NPUってメモリどうなってるの?GPUとの違いからIntel・AMDのアーキテクチャを調べてみた

最近「AI PC」という言葉を耳にするようになりましたね。Windows PCを買おうとすると「NPU搭載!」「○○TOPS!」みたいな文字が踊っていて、なんだか凄そうな雰囲気は伝わってくるんですが、実際のところNPUって何をしてるの? メモリはどうなってるの?というあたりが意外とよくわからないんですよね。

GPUについては、ゲームや動画編集で使ってる人も多いし、最近はローカルLLMの推論でVRAMが足りない!みたいな話題でだいぶ認知が広がってきた印象があります。 一方でNPUは「なんかCopilot+PCの要件で必要らしい」くらいの認識の人が多いんじゃないかと思います。自分もそうです🫠

というのも、NPUを直接意識して使うアプリケーションがまだ少ないんですよね。 GPUならゲームを起動すれば勝手に使われるし、LLM推論ならOllamaでGPUオフロードすれば「おお、速い!」と実感できる。 でもNPUは「Windows Studioエフェクトの背景ぼかし」とか「Copilotの一部処理」とか、なんとなくバックグラウンドで動いてる感じで、体感しにくい。

そんなわけで、今回はNPUが内部的にどうメモリを使っているのか、GPUとの違いは何なのか、IntelとAMDでアーキテクチャはどう違うのか、というあたりを調べてみました。 自分のレベルでは100%の理解は正直難しい(自分も完全にはわかっていない🤣)ので、「なるほど、だいたいそういうことね」くらいの感覚で読んでいただければと思います。

以前、DELLのPCのモニタをして行く中で、興味がでたのでなんとなく調べてみたという感じの内容になります。

参考

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com


そもそもNPUってなに?

NPU(Neural Processing Unit)は、名前の通りニューラルネットワークの演算に特化したプロセッサです。 CPUは汎用的な計算が得意、GPUは大量の並列演算が得意、NPUは行列演算(特にINT8やFP16などの低精度演算)に特化していて、少ない電力で効率よくAI推論を回せるというのが売りです。

大事なポイントは「省電力」という部分です。デスクトップでガンガンGPU回すならNPUの出番はあまりないんですが、バッテリー駆動のノートPCで「常時AIがバックグラウンドで動いてる」みたいなユースケースだと、GPUをぶん回すとバッテリーが無くなってしまう。NPUはそういう「ずっと動いてるけど電力は抑えたい」場面で真価を発揮する機能になります。

AMDがComputex 2024のアーキテクチャセッションで公開した資料によると、XDNA 2 NPUは同じAIモデルをCPUで動かした場合と比べて最大35倍の電力効率があるとのこと(特定のAIワークロードでの比較値らしいけど)。 モデルや条件によって変わりますが、桁が違う効率差があるのは確かです。

ちなみに、NPUの性能指標としてよく出てくる「TOPS」はTera Operations Per Secondの略で、基本的にINT8(8ビット整数)演算での値です。 FP16(16ビット浮動小数点)だと理論性能は半分になるので、TOPSの数値だけで比較するときは「どの精度での値か」を意識する必要がありそうです。

GPUのメモリの仕組み(おさらい)

NPUの話に入る前に、GPUのメモリがどうなっているかも知っておきます。これでNPUとの違いがわかりやすくなります。

ディスクリートGPU(一般的なNVIDIA GeForceなどのGPU)の場合

仕組みはシンプルで、GPU専用のVRAM(GDDR6やHBMなど)がGPUチップのすぐ近くに載っています。CPUのメインメモリとは物理的に完全に別物です。

CPUメモリ上にあるデータをGPUで処理したい場合は、PCIeバス経由でVRAMにコピーする必要があります。 ローカルLLMで「モデルをVRAMに載せる」と言っているのはまさにこれで、VRAMに収まらない分はCPUメモリに残ってしまい、これがボトルネックになります。

統合GPU(Intel UHD、AMD Radeonなど内蔵GPU)の場合

ノートPCなどに搭載されている統合GPU(iGPU)は、CPUと同じチップ上にあり、専用VRAMを持たず、メインメモリの一部をGPU用に使用します。

重要なのは、「事前予約」という仕組みです。BIOSやUEFIの設定で一定のメモリサイズが(32MBとか64MBなど)が最初から確保されます。 この領域はOSから見ると使えないメモリになるので、たとえば64GBのメモリを積んでいても、実際にOSが使えるのは32GBだったりします。この領域はタスクマネージャーの表示で「ハードウェア予約済み」となっています。

つまり統合GPUは「最初からメモリの一部を専用領域として確保しておく」という方式です。

NPUのメモリの構成

NPUのメモリの仕組みは、統合GPUとはかなり違うようです。

事前予約はない

NPUには、統合GPUのようなBIOSレベルでの事前メモリ予約はありません。NPUを使っていないときは、メモリを一切占有しません。ゼロです。

使うときだけ動的に確保する

NPUが推論を実行するとき、ドライバやランタイムがOSのメモリアロケータ経由でDMAバッファを動的に確保します。モデルの重みや入出力テンソル、中間計算用のバッファなどがメインメモリ上に確保され、推論が終われば解放されます。

つまり「必要な分だけメモリを確保し、終わったら解放する」という方式です。

NPU使用中はメインメモリの空きが減るということです。

なぜGPUと違って事前予約しないのか

理由はシンプルで、GPUは常時画面を描画しているからです。画面表示処理を行なっているため、メモリが常に必要となります。そして、起動時に確保しておく必要があるのです。

一方NPUは、AI推論タスクが走るときだけ動けばいい。常時メモリを占有しておく理由がないということです。

Intel NPUのアーキテクチャ

ここからメーカー別に見ていきます。まずはIntelから。

Meteor Lake世代(NPU 3720)

IntelのNPU技術は、2016年に買収したMovidius社の技術がベースになっています。Meteor Lake(Core Ultra第1世代)に搭載されたNPU 3720の性能は約10〜11 TOPS(INT8基準)。 正直なところ、この世代のNPUは「とりあえず載せました」感があり、実用的にはまだ厳しい場面も多く、大きな行列サイズではメモリ帯域がボトルネックになったようです。

Lunar Lake世代(NPU 4)

2024年9月に登場したLunar Lake(Core Ultra 200Vシリーズ)では、NPUが大幅に強化されました(Meteor Lake比で約4〜5倍の性能向上)。

Lunar Lakeの最大の特徴はメモリがCPUパッケージ上に直接搭載されています、これはApple Siliconと同様のアプローチです。メモリが物理的にプロセッサの近くにあることで帯域向上・レイテンシ削減・省電力化が実現されています。

⚠️ ただし、オンパッケージメモリの容量は16GBまたは32GBに限定されていて、ローカルLLM用途で大容量メモリが欲しい人には厳しい制約になっています。

AMD NPUのアーキテクチャ

次はAMD。AMDのNPUは、2022年に買収したXilinx社の技術がベースになっているXDNAアーキテクチャです。

XDNA(第1世代:Phoenix / Hawk Point)

AMD XDNAの面白いところは、L3に相当するメインメモリがCPU・NPU・統合GPUから直接アクセスできる共有メモリになっている点です。

XDNA 2(第2世代:Strix Point)

Ryzen AI 300シリーズ(Strix Point)では、XDNA 2にアップグレードされました。

XDNAアーキテクチャの大きな特徴は「プログラマがすべてのデータ移動を明示的に記述する」という設計思想です。 コア間のルーティングをスイッチボックス経由で設定し、各コアのDMAをプログラミングするという、かなり低レベルな制御が可能(というか必要)になっています。

⚠️ これは柔軟性が高い反面、ソフトウェア開発のハードルが上がるということを意味します。 AMDはROCmやVitis AI、ONNX Runtimeなどでこのあたりを抽象化しようとしていますが、Intel(OpenVINO)やApple(Core ML)と比べると、まだ発展途上な印象です。

Intel vs AMD:NPUアーキテクチャの比較

どちらも「メインメモリを共有し、内部にオンチップSRAMを持ち、DMAでデータを転送する」という基本構造は同じです。 ただ、Intelがオンパッケージメモリでメモリの帯域と省電力を攻めているのに対し、AMDは空間データフローの柔軟性とタイル間の高帯域接続で勝負している、という違いがあります。

ちなみにApple Siliconとの違い

参考までにApple Siliconもみてみます。

Apple SiliconのNeural Engineは、UMA(Unified Memory Architecture:統合メモリアーキテクチャ)上で動作します。 CPU・GPU・Neural Engineがすべて同じメモリプールを共有していて、データのコピーが原理的に不要です。

Intel・AMDのNPUも「メインメモリを共有している」という点では似ていますが、Apple Siliconの統合度はもう一段上で、ハードウェアからソフトウェアスタックまで一気通貫で最適化されています。

UMAの強みはあくまで「限られた電力の中で全体最適を行う」ことにあって、バッテリー駆動のモバイルデバイスやパーソナルコンピュータでこそ活きる設計のようです。

NPUのメモリについてわかったこと

今回調べてみて、自分なりに整理できたポイントをまとめてみました。

  • NPUは統合GPUのような事前のメモリ予約をしない … 推論実行時に動的にメインメモリを確保し、終わったら解放する
  • NPU使用中はメインメモリの空きが減る
  • IntelとAMDで設計思想が違う … Intelはオンパッケージメモリで帯域と省電力を攻め、AMDはXilinx譲りの空間データフローで柔軟性と効率を追求
  • どちらも「メモリ帯域の共有」という本質的なボトルネックは抱えている

おわりに

正直なところ、NPUはまだ「それがないと困る」という場面が少なくて、多くの人にとっては「へー、入ってるんだ」くらいのものだと思います。 自分もDELLアンバサダー・プログラムでお借りしたIntel Core Ultra 7 268V搭載PCでOpenVINO Model Serverを試してみたりしていますが、「NPUがあって良かった!」と思える体験はほとんどなかったです。

ただ、NPUを活用するアプリケーションは確実に増えてきています。ハードウェアの仕組みをなんとなくでも理解しておくと、 「なぜNPUは省電力なのか」「なぜメモリ容量が重要なのか」「なぜApple Siliconが注目されるのか」といった話が理解しやすくなるんじゃないかと思います。

今回は調べれば調べるほどわけわからない言葉がでてきて、頭から煙でた🤣