プロセッサ・アーキテクチャ

NPU(AIアクセラレータ)

AI推論を高速化する専用演算器。

概要

NPU(Neural Processing Unit:ニューラル処理ユニット)は、ニューラルネットワークの推論処理を高速・低電力で実行するために設計された専用演算器です。AIアクセラレータ・ニューラルエンジン・テンソルコアなどとも呼ばれます。

ディープラーニングの推論(Inference)は大量の行列積・畳み込み演算・活性化関数計算から成り立ちます。汎用CPU(ARM Cortex-Ax86)や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

NPUTOPS電力対応量子化搭載機器
Google Edge TPU4 TOPS2WINT8のみCoral USB Accelerator
Intel Myriad X4 TOPS1.5WFP16/INT8Intel NCS2
Arm Ethos-N571 TOPS~0.5WINT8組み込みSoC向けIP
Arm Ethos-N781〜4 TOPS~1WINT8スマホSoC向けIP
Apple Neural Engine (A17)35 TOPS-INT8/INT16iPhone 15 Pro
Qualcomm Hexagon NPU (X Elite)45 TOPS-INT4/INT8PC/モバイル
NVIDIA Jetson AGX Orin NPU275 TOPS15〜60WINT8エッジ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組み込みGPUCPU(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を使う役割分担が一般的です。

関連用語

参考リンク