参考記事:

・「Meteor Lake」Deep Dive その4 - GPU、IO & SoC Detail

https://news.mynavi.jp/article/20231010-2789313/

・「Meteor Lake」Deep Dive その2 - Processor Detail

https://news.mynavi.jp/article/20230921-2776351/

・「Meteor Lake」Deep Dive その1 - Intel 4 Process Update

https://news.mynavi.jp/article/20230920-2774916/

Processor Coreそのものは前回ご紹介した通りだが、もう一つの大きなトピックはAI機能である。なにせIntel InnovationではAIPCなる言葉(これが単なるスローガンなのか、それともブランドとして定着させるつもりなのかはまだ不明)まで持ち出してアピールしており、それなりにAI性能が高い事を大きな売りにしている(Photo01)。

Photo01: そのAIPCの第一弾がMeteor Lakeということになる訳だが、第二弾以降があるのかどうかは不明。

このAI機能は何か? という話は概ね判っている。もともとRaptor Lakeの世代ではAI M.2 Moduleなるものがオプションで利用できるようになっており、これを利用してまずISVが対応アプリケーションを開発。そして一般ユーザーはMeteor Lake世代でこれを利用できるようになるが、Meteor Lakeでは"Processor Integration"と書かれている様にこのVPUがCPUに統合されている(そして名前がNPUに変わった)。

Photo02: これは昨年10月のイスラエルツアーの際のスライド。VPUはVision Processor Unitの略。

このNPUの中身であるが、もう隠すまでもない事でIntelが2016年に買収したMovidiusが開発していたMyriadシリーズのVPUである。初期にはUSBメモリを一回り大きくした様なCompute Stickという形で提供されており、その後M.2モジュールの形で提供されており、チップそのものも初代のMyriadからMyriad 2、Myriad Xと最新のものは第3世代になっている(ちなみにIntel買収時に既にMyriad 2が存在しており、買収後2017年にMyriad Xが発表されている)。ただこのMyriad Xだが、4GBのメモリを搭載したモジュールは既にDisconで、現在はチップ単体のみ発売が継続されている状況である。要するにMeteor Lakeの投入に合わせてModuleでの販売は終了。今後はプロセッサに統合した形での提供のみとなる形だ。実はMyriad Xモジュールを搭載した組み込みソリューションは幾つか存在しており(例えばこれ)、こうしたものは今後Meteor Lakeベースに移行する必要があることになる。

話を戻すとそのMeteor LakeのNPUであるが、元々のMyriadシリーズはVPUという名前から判るように映像処理用のプロセッサだった。Hot Chips 26でそのMyriad 2の内部構造が説明されているが、内部的にはSHAVEと呼ばれる128bitのSIMD/VLIWプロセッサを12基搭載し、600MHz駆動で345.6GOPSの処理性能を持つとされていた。この時点ではまだAIプロセッサというよりも画像処理プロセッサという扱いだったのだが、Myriad Xでは

プロセスをTSMC 28nm HPM→TSMC 16FFCに変更

オンチップメモリを増量かつ高速化(2MB→2.5MB、400GB/sec→450GB/sec)

SHAVEプロセッサを12基→16基に増量

外部メモリとしてLPDDR4 I/Fを追加

LEON4(SPARC V8)プロセッサ×2を搭載

新たにNeural Compute Engineを搭載

などの大幅な高性能化が図られている。このNeural Compute Engineのみで1TOPS、チップ全体ではMyriad 2の8倍の処理性能を実現した、というのがMyriad Xの特徴であった。

ということで話をMeteor Lakeに移す。Meteor LakeではSoC TileにNPUが搭載される格好になっているが(Photo03)、ざっくり言えばMyriad XをDualで搭載している格好だ。VPUの内部構造は余り詳細には語られていないが(Photo04)、Activation用の専用ユニットを搭載した(Photo05)ほか、Neural Compute Engineの行列演算や畳み込み演算の効率化を図った(Photo06)とされている。またSHAVEエンジンそのものも変更され、INT 4がこちらではサポートされている(Photo07)。またこのスライドを見る限り、SHAVEエンジン自体もDualで搭載されているように見える。全体としてみると、Myriad X比で2倍以上の処理性能なのは確実で、全体では4倍では効かず、データ型次第では10倍以上の処理性能を発揮する事になりそうだ。

Photo03: Scratch Padの話は後述。

Photo04: 2つのInference Pipelineは独立して動くことが可能な模様。なので、あるNetworkを動かしつつ、別のNetworkを使うなんてことも可能なようだ。

Photo05: Reluだけでなく、複数のActivation関数をサポートしているとする。ただSigmoidあたりまで入っているかどうかは不明。

Photo06: BF16のサポートがなかったのはちょっと意外。INT 4もない。

Photo07: この調子だとBF16もSHAVEの方ではサポートされているようだ。それはともかく、元々はVLIW/SIMDプロセッサだった筈のSHEVAがDSP扱いされているのはちょっと可哀想である(まぁ実際DSP的な動き方をするが)。

変わったところでは、Data Conversion Engineも新たに搭載されている(Photo08)ほか、新たにScratchPadが搭載された(Photo09)。逆にMyriad Xには、Myriad 2由来となるISP関連のハードウェアが搭載されていたが、Meteor Lakeに搭載されているものはこのあたりが省かれている可能性が高い。そもそもMeteor Lake自身がISPを搭載しているから、更にISPを載せる必要もないと判断されたと思われる。名前がVPUからNPUに変わったのは、画像処理機能をバッサリ落としたことで、純粋にAIのアクセラレータになったためだろう。

Photo08: 通常は畳み込みを行う前にこの値の調整を行う訳だが、それを専用ハードウェアで行える様になった訳だ。

Photo09: このScratch Padは基本データを格納する形だが、Graph Complierで生成したコマンドによってDMA駆動でデータの入れ替えが自由に行える様になっている。Scratch Padの使い方としては正しいが、外部のコントロールによるDMA制御、というのはちょっと珍しい。

ところでここまではNPUの話をしてきたが、GPUを使ったAI処理の方が今のところはまだ一般的である。これに向けて、Meteor Lake世代ではDP4AのサポートがGPUに追加された(Photo10)。詳しい話はGPUのところでまた説明するが、本来Xe-HPGのRender SliceにはXMX(Matrix Engine)が搭載される筈だし、実際Intel ArcのXe-HPGコアにはXMXが実装されている。ただDiscrete GPUは兎も角Meteor Lakeに搭載されるのはXe-LPGコアで、ここにはXMXが入っていない。そこで、XVEコアにDP4Aの処理機能を追加することで、AI処理性能を高める(というか、下げない)工夫が実装された格好だ。

Photo10: このDP4AはあくまでINT 8のみが対象である。

次にSoftware Stackについて。そんな訳でMeteor LakeではCPUとGPU、NPUとAI処理を行うためのユニットが3種類存在する事になる。これをどう使うかという話だが、これはApplicationからどのAPIを使うか、で決まることになる。具体的には

WinML:基本はCPUだが、DirectML経由でGPUないしNPUも利用可能

DirectML:基本はGPUだが、NPUも利用可能

ONNX RT:内部ではDirectMLないしOpenVINOを呼び出すので、どちらを呼び出すかで変わる

OpenVINO:基本はNPUだが、オプションでCPUないしGPUも利用可能

といった格好だ(Photo11)。なんというか複雑な格好ではある。ただONNX RT以外はデフォルト(WinML:CPU DirectML:GPU OpenVINO:NPU)が決まっているので、既存のアプリケーションはそのまま動作するのは間違いない。このあたりはアプリケーションで違いがあり、例えばMicrosoft Termsで利用するWindows Studio EffectsはOpenVINOをNPUのみ(Photo12)、AdobeのCreative CloudではDirectMLをGPUでのみ利用(Photo13)、ビデオ分析ではOpenVINOでGPUないしNPU(Photo14)といった具合だ。

Photo11: この辺は、Meteor Lakeに最適化するなら全てNPUを使う様にすれば性能は上がるのだろうが、多くのプロセッサで動かす事を考えるとそこまで最適化するのは難しいところである。

Photo12: WinMLとかDirectMLを使わないのがちょっと意外。多分性能を判断してのことだろう。

Photo13: こちらはGPUを使うのが一番広範に利用できるから、という事と思われる。

Photo14: NPUオンリーにすると利用できるプラットフォームが限られてしまうから、というあたりが理由と思われる。

ちなみに性能として、Stable Diffusionを

全処理をCPUで実施

全処理をGPUで実施

Unet+/Unet-をNPU、その他をCPUで実施

Unet+をGPU、Unet-をNPU、その他をCPUで実施

とした場合の処理時間と消費電力、効率を比較した結果が出ている(Photo15)が、

処理性能そのものはGPUを併用した方が高速

効率はNPUだけで行った方が高い

という結果になっており、あとは処理性能を取るか、消費電力を取るかといった結果になっているのは面白い(Photo15)。それでも一番性能が高いのはGPUとNPUを併用した場合であって、NPUの威力が判る。

ちなみにMeteor LakeではNPUの負荷もTask Managerで確認できる様になっているとの事だった(Photo16)。

Photo15: 要するにNPUはピーク性能というよりは性能/消費電力比を重視している(SoC Tileに載っているから、そもそもピーク性能を追求しにくい)あたりがこの結果に繋がっていると考えられる。

Photo16: これ、Myriad Xのモジュールを刺した場合はどうなるのか興味あるところだが、手元に機材が無いので確認できない。残念である。