エッジAI

推論アクセラレータ

AI推論を高速化する専用ハード(NPU等)。

概要

推論アクセラレータ(Inference Accelerator)とは、機械学習・ディープラーニングモデルの推論処理を汎用CPUより高速かつ省電力に実行するために設計された専用ハードウェアの総称です。NPU(Neural Processing Unit)・Edge TPU・AI Engine・VPU(Vision Processing Unit)などがこのカテゴリに含まれます。

AIの演算の多くは行列積(GEMM)やたたみ込み演算(Conv2D)であり、これらは同じ演算を大量のデータに並列で適用する「データ並列性」の高い処理です。推論アクセラレータは、このようなAI特有の演算パターンに最適化されたアーキテクチャ・メモリ配置・データ経路を持ちます。

ハードウェア特徴消費電力TOPS目安
汎用CPU汎用・AI非効率低(0.01〜0.5 TOPS)
GPU並列・電力大高(10W〜数kW)10〜数百TOPS
NPU(エッジ)AI専用・省電力低(mW〜数W)0.1〜32 TOPS
Edge TPUGoogle開発・INT82W4 TOPS
FPGA再構成可能・柔軟数W〜数十Wタスク依存
DSP信号処理と兼用0.1〜数TOPS

TOPSはTera Operations Per Secondの略で、1秒間に1兆回の演算能力を意味します。INT8演算での値が多く記載されるため、FP32での性能と混同しないよう注意が必要です。

歴史・背景

推論アクセラレータの歴史は、AIの計算ニーズとムーアの法則の限界が交差した2016年頃から急加速します。

発展の経緯:

出来事
2016年Google TPU v1(クラウド向け)内部公開
2017年Intel NervanaおよびMovidius Myriad X(VPU)発表
2018年Google Edge TPU(Coral)発表
2018年Arm Machine Learning Processor(後のEthos)発表
2019年Apple Neural Engine(A12 Bionic)でNPUを民生品に普及
2020年NVIDIA Jetson AGX Xavier(32 TOPS)、組み込み最高性能
2021年Arm Ethos-U55/U65 MCU向けNPU量産開始
2022年Apple M2チップの Neural Engine(15.8 TOPS)がPCに普及
2023年STM32N6(Cortex-M55 + Ethos-U65 統合MCU)登場
2024年NPUを内蔵したPC向けSoC(Intel Meteor Lake等)が標準化

技術仕様

NPUのアーキテクチャ原理

NPUの中核は脈動配列(Systolic Array)またはデータフローアーキテクチャです。行列積演算を特化した回路で、データが配列内を波(脈動)のように流れながら積和演算を行います。

脈動配列の概念図(4×4の例):

入力データ →  [PE][PE][PE][PE]  → 部分和
             [PE][PE][PE][PE]
重みデータ ↓ [PE][PE][PE][PE]
             [PE][PE][PE][PE]

PE = Processing Element(積和演算器1個)
全PEが同時並列に動作 → 汎用CPUの数十〜数百倍の演算効率

主要推論アクセラレータ比較

エッジAI向けハードウェア:

製品メーカーTOPS消費電力対応精度価格帯
Coral Edge TPUGoogle4 TOPS2WINT8のみ数千円
Jetson NanoNVIDIA472 GFLOPS5〜10WFP16/INT8数千〜数万円
Jetson Orin NanoNVIDIA40 TOPS7〜15WINT8数万円
Jetson AGX OrinNVIDIA275 TOPS15〜60WINT8/FP16数十万円
Intel Neural Stick 2Intel4 TOPS2.5WFP16数千円
Hailo-8Hailo26 TOPS2.5WINT8数万円
RK3588(NPU)Rockchip6 TOPSINT4/8/16組み込み向け

MCU内蔵NPU:

製品メーカーNPU性能消費電力
STM32N6STMicro600 GMAC(Ethos-U65)数十mW
Kendryte K210Canaan1 TOPS300mW
MAX78000Maxim超低消費電力
Ambiq Apollo510AmbiqμW級

TOPS(演算性能)の注意点

推論アクセラレータの比較でよく使われるTOPSには注意が必要です。

TOPS値の落とし穴:

1. データ型依存
   同じハードウェアでも:
   INT8: 100 TOPS
   FP16: 50 TOPS  
   FP32: 25 TOPS
   (INT8が最も高い値になる)

2. ピーク値と実効値の乖離
   ピーク性能 ≠ 実際のモデル推論性能
   実効利用率: 30〜70%が一般的

3. モデル依存
   大きいモデル → メモリ帯域律速 → TOPS値より遅くなる
   小さいモデル → 演算器が遊ぶ → TOPS値より遅くなる

4. 比較時の要点
   同データ型・同モデルでの実測値で比較することが重要

動作原理

デリゲーション(Delegate)による加速

TFLiteやONNX Runtimeでは、演算を推論アクセラレータにオフロードするデリゲートAPI(委譲機構)が提供されています。

import tflite_runtime.interpreter as tflite

# Coral Edge TPU デリゲート使用例
try:
    delegate = tflite.load_delegate('libedgetpu.so.1')
    interpreter = tflite.Interpreter(
        model_path='model_edgetpu.tflite',  # Edge TPU向け変換済み
        experimental_delegates=[delegate]
    )
    print("Edge TPU デリゲート: 有効")
except Exception as e:
    # Edge TPUが見つからない場合はCPUフォールバック
    interpreter = tflite.Interpreter(model_path='model.tflite')
    print(f"CPUフォールバック: {e}")

interpreter.allocate_tensors()

# 推論(デリゲート内部でEdge TPUが自動的に使用される)
interpreter.set_tensor(input_idx, input_data)
interpreter.invoke()  # この中でEdge TPUが動作
result = interpreter.get_tensor(output_idx)

Coral Edge TPU向けモデル変換

Edge TPUはINT8量子化モデルのみ対応し、専用の変換ツールが必要です。

# Step 1: TFLite INT8量子化モデルを作成
python quantize_model.py \
  --model saved_model/ \
  --output model_int8.tflite

# Step 2: Edge TPU Compilerでコンパイル
# (対応演算のみEdge TPU、残りはCPU実行)
edgetpu_compiler model_int8.tflite

# 出力: model_int8_edgetpu.tflite
# 変換ログの確認が重要:
# "X operations will run on the Edge TPU, 
#  Y operations will run on the CPU."

NVIDIA Jetsonでの推論(TensorRT)

import tensorrt as trt
import pycuda.driver as cuda
import pycuda.autoinit
import numpy as np

TRT_LOGGER = trt.Logger(trt.Logger.WARNING)

def build_engine_from_onnx(onnx_file, fp16_mode=True):
    """ONNXモデルからTensorRTエンジンを構築"""
    with trt.Builder(TRT_LOGGER) as builder, \
         builder.create_network(
             1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)
         ) as network, \
         trt.OnnxParser(network, TRT_LOGGER) as parser:
        
        config = builder.create_builder_config()
        config.max_workspace_size = 1 << 30  # 1GB
        
        if fp16_mode:
            config.set_flag(trt.BuilderFlag.FP16)
        
        with open(onnx_file, 'rb') as f:
            parser.parse(f.read())
        
        engine = builder.build_engine(network, config)
        
        # エンジンをファイルに保存
        with open('model.engine', 'wb') as f:
            f.write(engine.serialize())
        
        return engine

def run_inference(engine, input_data):
    """TensorRTで推論を実行"""
    context = engine.create_execution_context()
    
    # GPU メモリ確保
    input_buf = cuda.mem_alloc(input_data.nbytes)
    output_shape = (1, 1000)  # 例: ImageNet分類
    output_data = np.empty(output_shape, dtype=np.float32)
    output_buf = cuda.mem_alloc(output_data.nbytes)
    
    # CPU → GPU転送
    cuda.memcpy_htod(input_buf, input_data)
    
    # 推論実行
    context.execute_v2(bindings=[int(input_buf), int(output_buf)])
    
    # GPU → CPU転送
    cuda.memcpy_dtoh(output_data, output_buf)
    
    return output_data

ARM Cortex-M + Ethos-U NPUの統合

// STM32N6(Cortex-M55 + Ethos-U65)での推論
// Ethos-U NPUはTFLite Microのデリゲートとして動作

#include "ethosu_driver.h"
#include "tensorflow/lite/micro/micro_interpreter.h"
#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
#include "model_data.h"

// Ethos-U NPUドライバを初期化
struct ethosu_driver ethosu_drv;
void setup_ethosu(void) {
    ethosu_init(
        &ethosu_drv,
        (void*)0x48102000,  // NPUのベースアドレス(デバイス依存)
        NULL, 0,
        1, 0
    );
}

// TFLite MicroにEthos-Uデリゲートを組み込む
tflite::MicroMutableOpResolver<1> resolver;
// Ethos-U対応演算はNPUで自動実行される
resolver.AddEthosU();

// 以降は通常のTFLite Micro推論と同様
tflite::MicroInterpreter interpreter(
    tflite::GetModel(g_model_data),
    resolver, tensor_arena, kTensorArenaSize
);
interpreter.AllocateTensors();
interpreter.Invoke();  // NPUが高速実行

用途・ユースケース

産業用カメラ・マシンビジョン

高速な外観検査が必要な生産ラインでは、以下のような構成が採用されます。

カメラ(GigE Vision / USB3 Vision)
         ↓ 画像取得
NVIDIA Jetson Orin / Hailo-8搭載ボード
  ├── 画像前処理(GPU/DSP)
  ├── DNN推論(NPU/GPU: 10ms以下)
  └── 判定・結果出力

PLC・上位システムへ検査結果送信

スマートカメラ・ネットワークカメラ

IP監視カメラに推論アクセラレータを内蔵し、映像をストリームするのではなくメタデータ(検出結果)のみを送信します。これにより帯域を1/100以下に削減できます。

農業・屋外用途

日本の農業機械・ドローン向けには以下のような要件があります。

要求対応技術
広温度範囲(-20〜85℃)車載グレードNPU
防塵・防水(IP67等)堅牢なエンクロージャ
低消費電力(バッテリー)省電力NPU(数W以下)
リアルタイム(1秒以内)エッジ推論(クラウド不要)

実装・開発のポイント

NPU対応モデルの設計制約

NPUには対応演算の制約があり、非対応演算は自動的にCPUにフォールバックします。

Ethos-U55が対応するTFLite演算子(主要なもの):
○ Conv2D(INT8量子化)
○ DepthwiseConv2D
○ MaxPool2D / AveragePool2D
○ FullyConnected
○ Add / Mul
○ Reshape / Softmax

× 非対応(CPUフォールバック):
× Transpose(一部)
× Complex activation functions
× Dynamic shapes

モデル設計時から対応演算のみを使うことで、NPUの性能を最大限に引き出せます。

ベンチマーク手法

# Coral Edge TPU でのベンチマーク
python3 -c "
import time
import tflite_runtime.interpreter as tflite
import numpy as np

delegate = tflite.load_delegate('libedgetpu.so.1')
interp = tflite.Interpreter('model_edgetpu.tflite',
                             experimental_delegates=[delegate])
interp.allocate_tensors()

input_details = interp.get_input_details()
dummy_input = np.zeros(input_details[0]['shape'],
                        dtype=np.uint8)

# ウォームアップ
for _ in range(10):
    interp.set_tensor(input_details[0]['index'], dummy_input)
    interp.invoke()

# 実測
N = 100
start = time.perf_counter()
for _ in range(N):
    interp.set_tensor(input_details[0]['index'], dummy_input)
    interp.invoke()
elapsed = time.perf_counter() - start

print(f'平均推論時間: {elapsed/N*1000:.2f}ms')
print(f'スループット: {N/elapsed:.1f} FPS')
"

他技術との比較

比較軸NPU(エッジ)GPU(PC/サーバー)CPUFPGA
AI推論効率最高タスク依存
汎用性低(AI専用)最高高(再構成可能)
消費電力最低(mW〜数W)高(100W〜)中(数W〜)
開発容易性中(SDK次第)最高
コスト低(SoC統合)中〜高
リアルタイム性決定論的非決定論的決定論的最高(HW実装)

推論アクセラレータはエッジAIシステムのパフォーマンスを決定する重要なコンポーネントです。NPU組み込みGPUNVIDIA JetsonDSPFPGAなど多様な選択肢があり、要求性能・消費電力・コスト・開発容易性を総合的に評価して選定します。量子化TensorFlow LiteONNXとの連携により、性能を最大限に引き出すことができます。

関連用語

参考リンク