概要
NPU(Neural Processing Unit:ニューラル処理ユニット)は、ニューラルネットワークの推論処理を高速・低電力で実行するために設計された専用演算器です。AIアクセラレータ・ニューラルエンジン・テンソルコアなどとも呼ばれます。
ディープラーニングの推論(Inference)は大量の行列積・畳み込み演算・活性化関数計算から成り立ちます。汎用CPU(ARM Cortex-A・x86)やGPUでも実行できますが、NPUは以下の観点で特化した優位性を持ちます:
- 高いOPS/W(電力効率): CPU比10〜100倍のエネルギー効率
- 決定的なレイテンシ: バッチ・スケジューリングによる遅延なく確定的に処理
- 特定ネットワーク構造への最適化: 畳み込み・行列積・プーリングを専用ハードウェアで実装
- INT8/INT4量子化の高効率実行: 量子化モデルに対して大幅な性能向上
スマートフォンSoC(Apple Neural Engine・Qualcomm Hexagon NPU・MediaTek APU)・組み込みLinux機器(NXP i.MX 8・Renesas RZ/V)・エッジAIボード(NVIDIA Jetson)など、様々なレベルの機器に搭載が広がっています。
歴史・背景
NPUの商用化の先駆者は中国のHiSilicon(華為)で、2017年発売のKirin 970にArm CortexをベースにしたNPUを搭載し「世界初のAI搭載スマホSoC」として話題になりました。同年、Appleも「Apple A11 Bionic」にNeural Engineを搭載。Google TPU(Tensor Processing Unit)はデータセンター向けで2016年から稼働していましたが、エッジ向けは2018年のEdge TPU(Coral)として登場しました。
Armは2018年にEthos-N NPUシリーズを発表し、SoCベンダーがNPUをライセンス購入して組み込めるIPとして提供。NXP・Renesas・STMicroelectronicsなどがEthos-NをSoCに統合し始めました。
TFLite(TensorFlow Lite)・ONNX Runtime・TVM・Edge Impulseなどのフレームワークが各種NPUのバックエンドをサポートし、開発者がNPUの詳細を意識せず推論を実行できる環境が整いつつあります。
2023〜2024年以降、生成AI(LLM)のエッジ実行需要が高まり、Qualcomm Snapdragon X Eliteや Apple M4チップのNPUが数十TOPS(Tera Operations Per Second)の性能に達しています。
技術仕様
NPUのアーキテクチャ
MAC(積和演算)アレイ
NPUの核心はMAC(Multiply-Accumulate)演算を多数並列に実行するアレイです:
単純なNPUの概念図:
入力特徴マップ 重みデータ
(W×H×C) (K×K×C×N)
↓ ↓
+---------+ +-----------------+
| Input | | Weight Buffer |
| Buffer | | (SRAM/Cache) |
+---------+ +-----------------+
↓ ↓
+------------------------------------+
| MAC Array (多数の乗算器+加算器) |
| (例: 256×256 = 65536 MACs) |
+------------------------------------+
↓
+---------------------------+
| 活性化関数 (ReLU等) |
| プーリング |
| バッチ正規化 |
+---------------------------+
↓
出力特徴マップ
データフロー vs 命令駆動
- データフロー型: 計算グラフを静的にコンパイルし、データが流れるとともに自動実行(Google Edge TPU等)
- 命令駆動型: 従来のプロセッサに近い命令セットでNPU操作を制御(より柔軟)
代表的なエッジNPU
| NPU | TOPS | 電力 | 対応量子化 | 搭載機器 |
|---|---|---|---|---|
| Google Edge TPU | 4 TOPS | 2W | INT8のみ | Coral USB Accelerator |
| Intel Myriad X | 4 TOPS | 1.5W | FP16/INT8 | Intel NCS2 |
| Arm Ethos-N57 | 1 TOPS | ~0.5W | INT8 | 組み込みSoC向けIP |
| Arm Ethos-N78 | 1〜4 TOPS | ~1W | INT8 | スマホSoC向けIP |
| Apple Neural Engine (A17) | 35 TOPS | - | INT8/INT16 | iPhone 15 Pro |
| Qualcomm Hexagon NPU (X Elite) | 45 TOPS | - | INT4/INT8 | PC/モバイル |
| NVIDIA Jetson AGX Orin NPU | 275 TOPS | 15〜60W | INT8 | エッジAIボード |
量子化とNPU性能
NPUはINT8(8ビット整数)演算でFP32(32ビット浮動小数点)に比べて大幅に高い性能を発揮します:
FP32(32ビット浮動小数点): 精度高・推論遅い・メモリ消費大
INT8(8ビット整数): 精度若干低下・推論4〜8倍高速・メモリ1/4
INT8演算の優位性:
- 1つのINT8乗算器の面積 ≈ FP32乗算器の1/16
- 同じ面積で16倍多くの並列演算器を実装できる
→ 同じシリコン面積でINT8 NPUはFP32 GPUより大幅に高いOPS
量子化(Quantization)により、FP32の学習済みモデルをINT8に変換し、NPUで高効率実行します。
動作原理
畳み込み演算のハードウェア実装
CNNの畳み込み層は入力特徴マップと重みカーネルの積和演算:
# 畳み込みの数学的定義(2D conv)
output[n, h, w, k] = Σ(c, kh, kw) input[n, h+kh, w+kw, c] * weight[kh, kw, c, k]
NPUはこれを多次元MACアレイでデータを再利用しながら効率的に処理します:
重みの固定(Weight Stationary): 重みをSRAMにキャッシュし、入力を流すことで重みの再ロードを削減 出力の固定(Output Stationary): 部分和をアキュムレータに蓄積し、最後に一度だけ書き出す 行の固定(Row Stationary): Googleのシストリックアレイで採用。行単位で計算を分担
ソフトウェアスタック
ユーザーアプリ
↓
推論フレームワーク(TFLite / ONNX Runtime / TVM / Edge Impulse)
↓
NPUドライバ(ベンダー提供)
↓
NPUハードウェア
TFLiteでのNPUデリゲート使用例:
import tflite_runtime.interpreter as tflite
# NPUデリゲートを使ったTFLite推論(Google Edge TPU)
interpreter = tflite.Interpreter(
model_path='model_edgetpu.tflite',
experimental_delegates=[tflite.load_delegate('libedgetpu.so.1')]
)
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke() # NPUで推論実行
output = interpreter.get_tensor(output_details[0]['index'])
C/C++からのNPU利用(Arm NN SDK)
#include "armnn/ArmNN.hpp"
#include "armnnTfLiteParser/ITfLiteParser.hpp"
// TFLiteモデルをArm NN(NPU対応)でロード
armnn::IRuntime::CreationOptions options;
armnn::IRuntimePtr runtime = armnn::IRuntime::Create(options);
armnnTfLiteParser::ITfLiteParserPtr parser = armnnTfLiteParser::ITfLiteParser::Create();
armnn::INetworkPtr network = parser->CreateNetworkFromBinaryFile("model.tflite");
// Ethos-N NPUバックエンドを優先
armnn::IOptimizedNetworkPtr optimizedNet = armnn::Optimize(
*network,
{armnn::Compute::EthosNPU, armnn::Compute::CpuAcc, armnn::Compute::CpuRef},
runtime->GetDeviceSpec()
);
armnn::NetworkId networkId;
runtime->LoadNetwork(networkId, std::move(optimizedNet));
// 推論実行
armnn::InputTensors inputTensors = {{0, armnn::ConstTensor(inputTensorInfo, inputData)}};
armnn::OutputTensors outputTensors = {{0, armnn::Tensor(outputTensorInfo, outputData)}};
runtime->EnqueueWorkload(networkId, inputTensors, outputTensors);
用途・ユースケース
物体検出・画像分類
カメラ映像からのリアルタイム物体検出(YOLO・MobileNet SSD)はNPUの代表的用途です。エッジで推論することでクラウドへのデータ送信遅延・プライバシーリスクを回避できます。
カメラ → 前処理(リサイズ・正規化) → NPU推論 → 後処理(NMS)→ 検出結果
レイテンシ: 全体で30ms未満(リアルタイム処理)
キーワード検出・音声認識
スマートスピーカー・ヘッドセットのウェイクワード検出(「Hey Siri」「OK Google」)は超低消費電力のNPU/DSPで常時動作します:
- モデルサイズ: 数十〜数百KB
- 消費電力: 1mW以下(バッテリー動作)
- レイテンシ: 数十ms
異常検知
工場センサーの異常検知では、オートエンコーダ・One-Class SVM・時系列モデルをNPUで推論し、クラウドを介さずエッジでリアルタイム異常判断します。
顔認証・生体認証
スマートドアロック・アクセス管理システムでは顔認識モデルをNPUで実行。プライバシー保護のためクラウドに顔データを送らずローカル認証を実現します。
実装・開発のポイント
モデルの最適化フロー
1. FP32モデル学習(TensorFlow / PyTorch)
↓
2. モデル変換(TFLite / ONNX形式に変換)
↓
3. 量子化(Post-Training Quantization または QAT)
- INT8量子化でモデルサイズを1/4に削減
- キャリブレーションデータでスケールを決定
↓
4. NPU向けコンパイル(ベンダーツール)
- Google: Edge TPU Compiler
- Intel: OpenVINO Model Optimizer
- Arm: Vela Compiler (Ethos-N向け)
↓
5. 精度検証・ベンチマーク
↓
6. デプロイ
TFLite量子化変換例
import tensorflow as tf
# FP32モデルをINT8量子化してTFLiteに変換
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
# キャリブレーションデータセット
def representative_dataset():
for data in calibration_dataset:
yield [data.astype(np.float32)]
converter.representative_dataset = representative_dataset
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.int8
converter.inference_output_type = tf.int8
tflite_model = converter.convert()
with open('model_int8.tflite', 'wb') as f:
f.write(tflite_model)
ベンチマークと性能評価
# TFLite Benchmark Tool
./benchmark_model \
--graph=model_int8.tflite \
--num_threads=4 \
--num_runs=50 \
--use_nnapi=true # Android NPU使用
# 出力例:
# Average inference timings in us: Delegate: 5432, CPU: 45231
# NPUによる約8倍の高速化
他技術との比較
NPU vs GPU vs CPU(エッジ推論)
| 項目 | NPU | 組み込みGPU | CPU(Cortex-A) |
|---|---|---|---|
| 推論OPS/W | 最高(10〜100 TOPS/W) | 中(1〜10 TOPS/W) | 低(<1 TOPS/W) |
| 汎用性 | 低(推論特化) | 中(シェーダー汎用) | 高 |
| 量子化対応 | INT8/INT4特化 | FP16主体 | FP32主体 |
| 開発難易度 | 高(ベンダー依存) | 中(CUDA/OpenCL) | 低 |
| コスト | 低(SoC統合) | 高 | - |
NPU vs DSP
DSPは従来の信号処理(FIR・FFT・PID)に特化しており、ニューラルネットワーク推論には必ずしも最適ではありません。NPUはニューラルネットワークの計算グラフに特化したデータパスを持ちます。最新のエッジチップでは両者が統合された「NPU+DSP」構成が増えており(Qualcomm Hexagon等)、センサー前処理にDSPを使い、推論にNPUを使う役割分担が一般的です。