元半導体設計屋 筑秋 景のシリコン解体新書

NPUにおけるソフトウェアの重要性

 AIワークロードが増加している中で、バッテリ寿命と最大放熱量が限られているクライアントプラットフォームで、AI推論処理のニーズの増加をどのようにサポートするかがNPUを搭載の焦点だ。

 すでにクライアント上では多くのAIワークロードが実行されている。オンライン会議での背景処理やノイズキャンセリングなどの例を考えてみよう。オンライン会議ツールなどでは、AIアルゴリズムはそれほどうまく機能していないという。理由は、ノートPCでのコンピューティングパワーと放熱能力が充分でないためだ。そこでNPUがAI処理の低電力化を実現し、ワークロードの多様化や複雑化も可能とし、処理の品質が向上していくわけだ。

 最終的にはクラウド行なわれているAI処理をクライアント上に移動させることも、NPUにより実現可能になっていく。加えて処理をクライアント上に移動させることで、プライバシーやセキュリティも改善され、レイテンシーやコストも削減できる。

 IntelのクライアントCPUにNPUが統合されるはCore Ultraが初めてだが、NPU単体で見ると第3世代のIPとなる。つまり、Intelは複数年NPUに取り組んできているということだ。

 NPUにおけるIntelの開発目標は電力効率の追求だ。これは固定機能(ハードウェア機能)とプログラム可能なコンピューティングとの組み合わせによって達成している。固定機能は効率とパフォーマンスを提供し、プログラム可能なコンピューティングにより種々のワークロードを完了できるためCPU、GPUをAI処理で利用する必要がなくなる。

 また、このNPUは多精度をサポートしているため、モデルの精度やパフォーマンスを犠牲にすることがない。NPUが多精度をサポートする優れた量子化ツールを備えていることで、アプリケーション開発者はパフォーマンスを最大化し、ニューラルネットワークの精度を維持できる。

 このほか、内蔵GPUだけでなく、NPUもホストシステムメモリとのユニファイドメモリをサポートしている。つまり、GPUとNPUアクセラレーターはシステムメモリに直接アクセスでき、データの移動にかかるオーバーヘッドを削減できる。もちろん、CPU、GPUがNPUとデータを直接共有できるということでもある。

NPUにおけるソフトウェアの重要性

 他方、IntelはNPUはハードウエアだけでなく、ソフトウェアも重要だと説明している。AI処理のアクセラレーションにNPUを導入するだけでは性能、精度、効率化が十分ではないからだ。

 そこでIntelは性能、精度、効率化を上げていくため、NPUのプログラミングインターフェイスの標準化にも注力している。それにより、複数のAIエンジンにおいて、GPU、CPU、NPU間でワークロードをシームレスに移行できるようになる。また、AIアクセラレータをサポートするMicrosoftの新しいドライバモデルであるMCDM(Microsoft Compute Driver Model)に対応したドライバスタックも用意されている。

 つまり、複数のIPを効率よく利用するためのプログラミング開発環境が重要だということだ。

NPUのブロックダイヤグラム

 WCDMでは、MMUでのセキュリティ、標準の電源管理とワークロードのスケジューリングもサポートしている。AI処理の多くのは周期的なワークロードになる。

 たとえば、オンライン会議ツールだと、背景のぼかしでは33msごとに新しいフレームを取得している。このAIアルゴリズムがNPUで実行されるのに3〜4msしかかからないとすると、次の処理までNPUは30ms近く待たされることになる。これは消費電力の観点から最適ではなく、NPUはすぐに低電力状態にしたい。そこで、ドライバでワークロードのスケジューリングと電源管理をサポートすることが重要になる。

 MCDMは、NPU上のプログラミングAPIである、OpenVINO、DirectML、Windmill、ONNXランタイムで使用できる。電源管理、デバイス管理、メモリ管理、ワークロードスケジューリングはどのAPIを使用していても同じドライバモデルをできる。MCDMドライバモデルからNPUは、システム内のCPU/GPUとは別のコンピューティングデバイスとして見える。

 ソフトウェアスタックをNPUの観点から見てみると、ソフトウェアの互換性に必要な基本的要素は2つある。1つはプログラミングモデルで、もう1つはドライバモデルだ。

 IP(AIエンジン)間でモデルを移行するための標準プログラミングインターフェイスが必要になる。前回の記事で、OpenVINOが標準ドライバモデルをサポートしているため、GPU、CPU、NPUの間でワークロードを簡単に移行できることを説明した。NPUのもう1つの利点は、多精度のサポートだ。これによりCPU、GPU、NPUでまったく同じモデルが利用できる。OpenVINOだけでなく、IntelはDirectMLでMicrosoftとも協力しており、DirectMLを介してNPU上で処理可能なAdobeアプリもある。

Core Ultra NPUのアーキテクチャ

 Core Ultra のNPUの特徴は以下の通りだ。

  • 推論パイプラインで電力効率の高いコンピューティングを提供するマルチエンジンアーキテクチャ
  • AI運用でのロングテールなワークロードをサポートするDSP
  • データ移動を最適化し効率とパフォーマンスを最大化するDMAエンジン

 NPUはマルチエンジンアーキテクチャで構成され、2つのニューラルコンピュートエンジンがある。これらのエンジンは、共通のワークロードで連携して動作することも、それぞれが独自のワークロードで作業することもできる。

 そしてニューラルコンピュートエンジンには、2つの主要なコンポーネントがある。1つは推論パイプラインで、標準的なニューラルネットワーク操作をサポートする固定機能ハードウェアだ。もう1つはSHAVE DSPだ。SHAVEとはIntelが買収したMovidiusのオリジナルDSP「Streaming Hybrid Architecture Vector Engine」の略だ。

 推論パイプラインは、コンピューティングにおける効率化の中心になる。ニューラルネットワークを実行する時、2つ電力を節約できる方法がある。1つ目はデータの移動を最小限にすること。次に、共通タスクとAIコンピュートタスク処理用のハードウエア機能を実装すること。

 これらの効率化を実現するために、パイプラインとニューラル ネットワークでの一般的な操作をサポートするように推論パイプラインが設計されている。

 この推論パイプラインはMAC(Multiply-Accumulate)アレイで構成されており、アクティベーション機能ブロックとデータ変換ブロックがある。MACは乗算・加算を意味する。

 ニューラルネットワークの計算の大部分は行列乗算になる。行列の乗算というとシストリック配列があるが、MACアレイはシストリック配列をはるかに超えているため、処理の全操作を行列の乗算に分解して計算でき、2D畳み込み、Depthwise畳み込み、転置畳み込みなど、すべての畳み込みをサポートできる。

 また、平均プール、最大プール、要素ごとの加算など他の一般的な操作もサポートする。基本的には計算能力の高いものばかりだ。MACアレイはそのエンジンごとにマッピングされていて内部キャッシュもあるため、データの移動を最小限に抑え、パフォーマンスを最大化するように設計されている。

 サイクルあたり最大2,048のデータのインテーク(取り込み)とサイクルあたり最大1,024回のFP16を実行できる。そして、データ移動をさらに減らすために“次元の集約や次元の再配置”(gather operations for implicit reshape)操作をサポートしている。スクラッチパッドSRAMからデータを読み取ると、“次元の集約(次元のデータをまとめて取得)や次元の再配置(読み取ったデータを必要な形式に変換)”操作を行なうことができるので、追加のデータ移動が必要なくなる。

 ニューラルネットワークは、入力から出力までの関係を学習するシステムだ。入力と出力の間には、重みとバイアスというパラメータがある。重みとバイアスだけでは、ニューラルネットワークは簡単な関係しか学習できない。そこで、活性化関数というものが必要になる。

 活性化関数は、重みとバイアスがかけられた後に、その値を変える関数のことだ。活性化関数は、直線ではなく、曲がったり、飛んだりする非線形関数になる。活性化関数があることで、ニューラルネットワークは複雑な関係も学習できるようになる。

 NPUにはパイプライン化されたアクティブ化関数のサポートがあり、重みとバイアスの計算と活性化関数の計算を同時に行なうことができる。パイプライン技術を使って、1つの処理が終わるのを待たずに、次の処理を始めることができるので、NPUはニューラルネットワークの計算を早く終わらせることができる。

 推論パイプラインの最後のブロックは、データ変換とデータ再配置だ。量子化されたネットワークまたはデータ取り込みネットワークの場合は、中間計算においてより高い精度で行なわれるが、最終的に整数データに変換し直される。ネットワークが量子化される場合の理想的かつ基本的な2つの理由は、FP16と比較してストレージスペースが半分になることと、MACアレイにおいてFP16と比較して、8bitのスループットが2倍になることだ。

 下記のスライドでは、浮動小数点データを量子化データに再マッピングする方法の例を挙げている。この図の例ではこの浮動小数点データの最小値と最大値があり、これにスケールとバイアスを適用している。それを整数データに再マッピングしている。このデータ変換ブロックでは、データ再配置もサポートしているので移調や置換を行なうことができる。これはトランスフォーマーネットワークではかなり一般的な操作になる。

 コンピューティングの大部分は推論パイプラインで行なわれるが、全てをサポートできるわけではない。むしろそれは望ましくないからだという。前述したように、AI処理にはロングテールのものがあり、その多くはまれに実行されるワークロードか、要求されるコンピューティング性能がそれほど高くないものだ。それらのワークロードに専用のハードハードウェアを占有させたくはない。

 そのためにSHAVE DSPがある。SHAVE DSPはAI専用に設計され高度に最適化されたVLIW(Very Long Instruction Word) DSPになる。各サイクルはVLIWであるため、ベクトル計算、スケーラー、計算、比較、分岐ロード、ストアなど、最大8つの命令を発行できる。

 もう1つの利点は、FP32までサポートしている点だ。推論パイプラインはインテークとFP16のみをサポートするが、より高い精度を必要とする操作がある場合がある。それをSHAVE DSPにマッピングできる。

 SHAVEアーキテクチャ全般のもう1つの良いところは、SHAVE操作をパイプライン化できることだ。推論パイプライン、DMAエンジン、これらは全て一緒にパイプライン化できる。そのため、パフォーマンスを最大化するために、NPU上で真のヘテロジニアスコンピューティングを並列に行なうことができる。

 先にデータ移動を最小限に抑えることが電力を節約する上で重要だと説明した。データ移動を抑えるための別のコンポーネントが、グラフコンパイラ(データ移動とアクセスを最適化するために、計算グラフを解析し、変換し、生成するコンパイラ)になる。ソフトウェアスタックにあるもので、パフォーマンスと効率を実現するために非常に重要なコンポーネントだ。

 グラフコンパイラが行なうことは、ニューラルネットワークの操作の権利を受け取り、理想的なハードウェアにマッピングすることになる。理想的なハードウェアで実行されるということは、Shave DSPか推論パイプラインのどちらかになるということだ。

 もう1つは、DMAエンジンを介してデータ移動をスケジュールすることだ。ニューラルネットワークの操作とサイズは全てコンパイル時に完全に分かっているので、データ移動を最適にスケジュールできるということになる。そのため、DMAエンジンとソフトウェア管理キャッシュを用意し、どのデータを保持し、どのデータを削除するかを推測できる。これによりハードウェア管理キャッシュよりも最適化できるという。

 DMAエンジンがサポートするもう1つの機能は、保存されたデータをDDRからMatrix EngineまたはスクラッチパッドSRAMにデータを転送するためのインラインリレーアウト(複数の命令を1つの長い命令としてまとめて実行する)であり、転送された方はインラインリレーアウトを実行して、追加のデータ移動操作を節約できる。