NPUはなぜDRAMアクセスを減らしやすいのか?PE ArrayとSystolic ArrayをGPUとの違いから理解する

NPUのSystolic Arrayとデータ再利用の全体像

NPUのSystolic Arrayとデータ再利用の全体像

概念図:実際の製品回路を理解しやすく簡略化した図。

本記事の目的

GPUとNPUでは再利用の場所と流し方が異なる

前編では、GPUが行列積をtile(小さな部分行列)へ分割し、Shared Memory(SM内で共有する高速メモリ)やRegisters(thread近傍の保存領域)でA/B tileを再利用する仕組みを整理しました。

前編はこちらです。

GPUはなぜ行列積をtile化するのか──thread・warp・Shared Memory・Tensor Coreを積和から理解する

本記事では、NPU(Neural Processing Unit、ニューラルネットワーク処理向けアクセラレータ)が、PE Array(Processing Elementの配列)やSystolic Array(拍動するようにデータを隣接セルへ流す配列構造)を使って、なぜDRAMへの高コストなアクセスを減らしやすいのかを説明します。

重要なのは、NPUが「AI専用チップだから速い」とだけ理解しないことです。GPUもNPUもデータ再利用を行います。違いは、GPUが近いメモリ階層にtileを置いて再利用するのに対し、NPUはPE Array内の空間的なデータフローそのものへ再利用を埋め込みやすい点にあります。

3文要約

NPUもtile処理し、PE ArrayでA/Bを流して再利用する

NPUもGPUと同じく、大きな行列をtileへ分割して処理します。On-chip SRAM(チップ内SRAM)へ持ち込んだA/B tileをFIFO(先入れ先出しバッファ)からPE Arrayへ供給し、隣接PEへ渡しながら複数のMAC(Multiply-Accumulate、乗算加算)へ再利用します。DRAMアクセスをゼロにするのではなく、DRAMアクセスや長距離通信のような高コストなデータ移動を、多数のMACへ償却しやすいことが本質です。

論文・一次資料情報

NPUのデータ再利用を理解するための一次資料

この記事は、単一論文の要約ではありません。Systolic Arrayの考え方、TPUv1の行列積ユニット、Eyerissのdataflow設計を組み合わせ、NPUのデータ移動を理解するための概念として整理します。

種別 タイトル 著者・組織 この記事で参照する内容 リンク
論文 Why Systolic Architectures? H. T. Kung 1982 Systolic Architectureの基本思想。隣接セル間でデータを規則的に流し、局所通信で計算を進める考え方 Why Systolic Architectures?
論文 In-Datacenter Performance Analysis of a Tensor Processing Unit Norman P. Jouppi et al. 2017 TPUv1をSystolic Array型アクセラレータの代表例として参照。65,536個の8-bit MACとソフトウェア管理のOn-chip Memoryを持つ例 In-Datacenter Performance Analysis of a Tensor Processing Unit
論文 Eyeriss: An Energy-Efficient Reconfigurable Accelerator for Deep Convolutional Neural Networks Yu-Hsin Chen et al. 2016 CNN向けアクセラレータで、データ再利用を意識したdataflow設計の例として参照 Eyeriss
論文 Eyeriss v2: A Flexible Accelerator for Emerging Deep Neural Networks on Mobile Devices Yu-Hsin Chen et al. 2018 DNN形状に応じたデータ再利用、PE Array、Global Buffer、NoC(Network-on-Chip)の設計例 Eyeriss v2

注意点として、NPUは特定製品名ではなく広い分類です。TPUv1、Eyeriss、スマートフォンのモバイルNPUは、内部構成、対応演算子、データフロー、メモリ容量が同じではありません。本記事では、TPUv1をSystolic Array型アクセラレータの代表例、Eyerissをデータ再利用を最適化するdataflow設計の代表例として扱います。

行列積とPEが実行する積和

行列積ではPEがMACを実行し、Accumulatorが部分和を保持する

ニューラルネットワークの推論では、畳み込み、全結合層、attention(系列内の要素間関係を重み付けする処理)などが、行列積または行列積に近い形へ変換されます。

\[ C = A \times B \]

各出力要素は、次のようなK方向の積和で作られます。

\[ C_{i,j} = \sum_k A_{i,k}B_{k,j} \]

3×3の例で、\( C_{1,1} \) は次のように作られます。

\[ C_{1,1} = A_{1,1}B_{1,1} + A_{1,2}B_{2,1} + A_{1,3}B_{3,1} \]

ここで、Aはactivation(アクティベーション、前段の出力)または入力、Bはweight(重み)、Cは出力または部分和です。

NPUの文脈で重要なのは、PEが単なるメモリではなく、\( \mathrm{partial\_sum} += A \times B \) を実行するMAC演算要素である点です。Accumulator(累算器)は、K方向に複数回発生する積和の途中結果を保持します。つまり、PEがMACを実行し、AccumulatorがCの部分和を保持する、という役割分担です。

NPUの典型回路構成

DRAM、SRAM、FIFO、PE Array、Accumulatorの役割分担

NPUの内部構成は製品や研究チップごとに異なりますが、行列積や畳み込みを効率よく処理するアクセラレータでは、概念的に次のような流れでデータを扱います。

DRAM ↓ On-chip SRAM / Unified Buffer ↓ Activation FIFO (A) と Weight FIFO (B) ↓ PE Array / Systolic Array ↓ Accumulator / Output Buffer ↓ DRAM

回路 初学者向けの比喩 技術的役割
DRAM 大きい倉庫 大容量の重み・入力・出力を保存する
On-chip SRAM ライン横の材料置き場 tileを保持し、DRAMアクセスを減らす
FIFO ベルトコンベアの入口 A/Bを規則的なタイミングでPEへ供給する
PE 小さな作業員兼加工機 MACを実行し、部分和を更新する
PE Array 作業ライン 多数PEを並べ、データを隣へ流す
Accumulator 途中結果置き場 Cの部分和を蓄積する
Output Buffer 完成品置き場 出力をまとめ、後段またはDRAMへ渡す

SRAM、FIFO、PE、Accumulatorは同じものではありません。SRAMとFIFOはデータを置き、規則的に供給するための回路です。PEは演算器を含む計算セルです。Accumulatorは、Cの部分和を保持する回路です。

NPUであっても、巨大な行列全体を常にOn-chip SRAMへ置けるとは限りません。そのため、NPUもGPUと同じく、行列をtile単位で持ち込み、必要な範囲を処理してから次のtileへ入れ替えます。

Systolic Arrayを時間方向に追う

4x4 PE ArrayでAとBが波のように広がる時系列データフロー

Systolic Arrayは、PEを格子状に並べ、データを隣接PEへ規則的に流しながら計算する構造です。心臓の拍動のように、一定のリズムでデータが配列内を進むため、systolicという名前が付いています。

代表的な行列積mappingでは、Aの要素を左から右へ流し、Bの要素を上から下へ流します。各PEは、流れてきたAとBを使ってMACを実行し、自分が担当するC要素の部分和を更新します。

時刻 t0

t0では、Aの先頭要素が左端PEへ投入され、Bの先頭要素が上端PEへ投入されます。左上のPEだけが最初のMACを実行します。

この段階では、PE Array全体はまだ埋まっていません。DRAMから持ってきたA/B tileは、On-chip SRAMとFIFOを経由して、配列の入口へ供給され始めた状態です。

時刻 t1

t1では、Aの要素が右隣PEへ進み、Bの要素が下隣PEへ進みます。同時に、新しいA/B要素も左端・上端から投入されます。

この結果、複数のPEが同時にMACを実行します。A/Bが波のようにPE Arrayへ広がり、同じA要素は横方向の複数PEで、同じB要素は縦方向の複数PEで使われます。

時刻 t2以降

t2以降は、PE Arrayのより広い範囲でMACが並列に進みます。各PEは、自分が担当するC要素の部分和をPE内またはAccumulator方向へ蓄積します。K方向の積和が完了すると、Cの要素またはC tileが完成します。

ここで重要なのは、1回読み込んだA/B要素を、DRAMから毎回取り直すのではなく、局所配線を通じて隣のPEへ渡す点です。これにより、1回のDRAMロードを複数MACへ再利用しやすくなります。

ただし、これは代表的なmappingの概念例です。実際のNPUでは、A/B/Cの移動方向、部分和の保持場所、weight stationary(重みを固定する方式)、output stationary(出力部分和を固定する方式)、row-stationary dataflow(畳み込みの複数種の再利用をバランスさせる方式)などが異なり得ます。

NPUはなぜデータ移動を減らしやすいのか

NPUはDRAMアクセスをゼロにするのではなく局所通信へ置き換えやすい

NPUについて、「データ移動がゼロになる」と理解すると誤解になります。実際には、NPUもDRAMからA/B tileを読み込み、完成したC tileをDRAMへ書き戻します。減らしやすいのは、特にDRAMアクセスや長距離通信のような高コストな移動です。

GPUの再利用は、概念的には次のような流れです。

HBM/GDDR → L2 → Shared Memory → Registers → Tensor Core

GPUは、A/B tileを近いメモリへ置き、同じtileを複数の積和へ使います。大きい行列ではK方向にtile入れ替えを繰り返します。つまり、GPUはメモリ階層を通じて演算器へデータを供給する方式です。

NPUの再利用は、概念的には次のような流れです。

DRAM → On-chip SRAM → FIFO → PE → 隣のPE → 隣のPE

NPUは、A/B tileをOn-chip SRAMへ持ち込んだ後、FIFOを通じてPE Arrayへ供給します。そして、PE Array内の局所配線を使い、A/Bを隣のPEへ渡します。これにより、1回のDRAMロードを複数PEのMACへ再利用しやすくなります。

よくある誤解 正確な情報・解釈
NPUはDRAMアクセスが不要 NPUもDRAMからtileを読み込み、出力を書き戻す
NPUは行列をtile化しない SRAM容量を超える行列はNPUでもtile化する
GPUは再利用しない GPUもShared MemoryやRegistersで再利用する
NPUはデータを動かさない NPUも移動させるが、PE間の局所通信へ置き換えやすい
NPUは常にGPUより高速・省電力 モデル、精度、batch、データフロー、コンパイラ、帯域に依存する

GPUとNPUの差は、GPUが再利用せずNPUだけが再利用することではありません。両者とも再利用します。GPUがメモリ階層の近い場所にtileを置いて再利用するのに対し、NPUはPE Arrayの空間的なデータフローそのものに再利用を埋め込む点が大きな違いです。

GPUとNPUの回路構成・データフロー比較

GPUとNPUはどちらも再利用するが、場所と流し方が異なる

前編のGPUと、本記事のNPUを並べると、違いは「再利用するかどうか」ではなく、「どこで、どう再利用するか」にあります。

観点 GPU NPU
主な実行単位 thread / warp / SM PE / PE Array
積和の実行場所 Tensor Core / CUDA Core PE
主な再利用場所 Shared Memory / Registers PE Array / On-chip SRAM
再利用方法 近いメモリから複数回読む 配列内を流し、隣のPEへ渡す
メモリ階層 HBM/GDDR、L2、SM内メモリ DRAM、SRAM、FIFO、PE近傍メモリ
遠いメモリへのアクセス tile入れ替えに伴い発生 tileロード・書き戻しで発生
強み 柔軟性、汎用性、多様な演算 規則的な行列積での効率、電力効率、レイテンシ予測性
たとえ 作業台に材料を置いて何度も使う ベルトコンベアで隣へ渡しながら加工する

GPUは、thread、warp(NVIDIA GPUでは通常32 threadsの実行単位)、SM、Shared Memory、Registers、Tensor Coreを組み合わせ、多様な演算を高い柔軟性で処理できます。一方、NPUは、演算パターンが規則的なGEMM(General Matrix Multiplication、汎用行列積)や畳み込みで、PE Arrayのデータフローをうまく使える場合に効率を出しやすい設計です。

ただし、NPUが常にGPUより優れるわけではありません。動的shape(実行時にテンソル形状が変わる処理)、複雑な分岐、未対応演算子、頻繁なモデル変更では、GPUやCPUの柔軟性が有利になる場合があります。

カメラAI・画像処理への応用

カメラAIではISP、GPU、NPU、CPUを役割分担させる

カメラAIでは、DLNR(Deep Learning Noise Reduction、深層学習ノイズ低減)、Demosaic(カラーフィルタ配列からRGB画像を復元する処理)、Super Resolution(超解像)、Transformer系画像処理などが使われます。

モデル形状が比較的固定で、畳み込みやGEMM中心なら、NPUは有利になりやすいです。理由は、入力・重み・部分和の流れを事前に最適化しやすく、PE Array上での再利用を設計しやすいためです。

一方で、動的shape、複雑な分岐、独自演算、頻繁なモデル変更、研究段階の試行では、GPUの柔軟性が有利になりやすいです。NPUは対応演算子、対応精度、SRAM容量、メモリ帯域、コンパイラの成熟度に強く依存します。

実機のカメラパイプラインでは、CPU、GPU、ISP、DSP(Digital Signal Processor、信号処理向けプロセッサ)、NPUを役割分担させる場合があります。GPUかNPUかの二択ではなく、演算特性とデータフローによって配置先を決めるべきです。

NPU搭載時には、ISPとの入出力形式、メモリ共有、レイテンシ制約、対応する量子化精度、モデル更新のしやすさも課題になります。特に高ISOノイズ除去や高解像度化ではfeature map(特徴マップ)が大きくなり、オンチップ容量と外部メモリ帯域が効きやすくなります。

まとめ

NPUは高コストな長距離移動を多数のMACへ償却する

NPUは、行列をtileとしてOn-chip SRAMへ持ち込んだ後、AとBをPE Arrayの中で規則的に流し、隣接PEへ受け渡しながら積和します。

DRAMアクセスを完全になくすのではありません。大きな行列では、NPUでもtileロードと書き戻しが必要です。

本質は、DRAMアクセスや長距離通信のような高コストなデータ移動を多数のMACへ償却し、PE間の局所的な通信へ置き換えやすい点です。GPUもNPUも再利用しますが、GPUは近いメモリ階層でtileを再利用し、NPUはPE Arrayの空間的なデータフローに再利用を埋め込みます。

関連技術

NPUのPE Arrayとデータフローを理解するための関連技術

関連技術 概要
Systolic Array データを隣接PEへ規則的に流しながら計算する配列構造
PE Array MACを実行するPEを多数並べた計算配列
MAC Multiply-Accumulate。\( \mathrm{partial\_sum} += A \times B \) の演算
Dataflow accelerator データの流れを設計の中心に置くアクセラレータ
Row-stationary dataflow Eyerissで扱われる、畳み込みの複数種の再利用を意識したdataflow
TPU GoogleのTensor Processing Unit。TPUv1はSystolic Array型アクセラレータの代表例
Eyeriss CNN向けエネルギー効率アクセラレータ。データ再利用とdataflow設計の代表例
On-chip SRAM チップ内に置かれる高速メモリ。DRAMアクセス削減に使われる
NoC Network-on-Chip。チップ内のデータ転送ネットワーク
GPU 汎用性の高い並列プロセッサ。Shared MemoryやRegistersでtileを再利用する
Tensor Core NVIDIA GPUの行列積和向け演算器。GPU前編で扱った中心要素

次に読むべき記事

GPU前編とNPU後編を合わせて読むことで再利用方式の違いが分かる

GPU側のtile化、thread、warp、SM、Shared Memory、Registers、Tensor Coreの関係は、前編で詳しく整理しています。

GPUはなぜ行列積をtile化するのか──thread・warp・Shared Memory・Tensor Coreを積和から理解する

GPUとNPUの違いを理解するときは、「GPUは再利用しない、NPUだけが再利用する」と考えないことが重要です。両者とも再利用します。違いは、GPUが近いメモリ階層にtileを置いて再利用するのに対し、NPUがPE Array内のデータフローに再利用を埋め込みやすい点です。

コメント

タイトルとURLをコピーしました