エッジAIまとめ （概要、基礎）

# 1章：はじめに

近年、ディープラーニングの急速な発展により、AI技術は飛躍的な進歩を遂げています。これにより、画像認識、自然言語処理、音声認識などの分野で革新的なアプリケーションが次々と登場しています。

しかし、これらの技術を実際の製品やサービスに応用するためには、膨大な計算資源を必要とするため、従来は主にクラウド環境での実行が主流でした。

一方で、近年ではエッジデバイスでAIを実行したいというモチベーションが高まっています。ここでいうAI実行は、モデルの学習ではなく、オフライン環境で学習した学習済みモデルを用いて推論を行うことを指します。自動運転やドローン、スマートフォンやスマート家電など、リアルタイム性が求められるアプリケーションでの利用が期待されています。

これらのエッジデバイス上でAI処理を行うことにより、遅延を最小限に抑え、即時に判断を下すことが可能となります。また、エッジAIはデータのプライバシー保護や通信コストの削減にも寄与します。

エッジAIとは、こうした背景のもと、エッジデバイス上でAI処理を行う技術です。これにより、データをクラウドに送信することなく、リアルタイムで処理できます。

本記事では、今後需要が高まっていくと考えられるエッジAIの概要や基礎的な内容についてまとめていきたいと思います。

## 1.1 エッジAIとは

エッジAIとは、組み込み機器上に搭載されるSoCやマイコンのようなエッジデバイス上で推論処理を行う技術です。ここでいうAIはCNNやTransformerのようなディープラーニング系のモデルを想定しています。

エッジデバイス上でAI処理を行うことで、データをクラウドに送信することなくリアルタイムで処理できます。この技術は、IoTデバイス、モバイル端末、産業用機器など、さまざまなユースケースでの利用が想定されています。

## 1.2 エッジAIが注目される背景

エッジAIが注目される理由として、主に、データ処理の即時性とプライバシー保護のニーズがあげられます。

### リアルタイム処理

例えば、自動運転システムや産業用ロボットでは、センサで観測したデータをもとに、即時にデータを処理しなければならない状況が多々あります。このようなユースケースの場合、データをクラウドに連携して処理を行うシステムでは伝送遅延が問題になります。

通信は基本的にベストエフォートのシステムとなるため、クラウド型のAI処理システムはリアルタイム性（想定される最大時間内に処理を完了させること）を保証できません。そのため、ミッションクリティカルな処理に利用できない問題があります。

### プライバシー保護

監視カメラに写っている人物データを処理する場合などにおいて、クラウドとデータ連携するシステムでは個人情報保護の観点から問題になるケースがあります。このようなケースの場合、機密情報をエッジデバイス上で処理したい要求が高まります。
データをクラウドに送信せずローカルで処理することで、機密情報を保護しながら処理することができ、さらに通信コストの削減が可能になります。

## 1.3 エッジAIのメリットとデメリット

上述の内容を踏まえて、エッジデバイスで推論を行うことのメリット、デメリットを比較します。

**メリット**
- **リアルタイム処理**
  エッジデバイスで直接データを処理するため、リアルタイム処理が可能となります。これにより、自動運転など、リアルタイム性が求められるアプリケーションでの利用が可能となります。
  
- **通信帯域の節約**
  映像データや大量のセンサデータなどをクラウドへ送信せずにローカル処理するため、通信コストを削減できます。
  
- **機密性の向上**
  データをエッジデバイス上で処理することで、センシティブな情報をクラウドに送信する必要がなくなり、機密情報を扱うシステムに適用できます。


**デメリット**

- **ハードウェア制約による演算リソースの制限**
  通常、AIモデルを用いて推論処理するにはハードウェアアクセラレータを利用することになりますが、搭載されているアクセラレータの制約により、モデルに利用できる演算子が限定される場合があります。また、メモリの搭載量やメモリ帯域幅の制約で巨大なモデルを用いた推論処理が困難な場合もあります。そのようなケースでは、オフラインのGPU環境で学習したモデルをハードウェアの制約に合わせて変更する必要があります。推論精度と演算効率を両立することは一般的に困難な課題となります。

- **電力消費量の増加**
  エッジデバイスはバッテリーで駆動されることが多いため、電力消費量が問題になる場合があります。特に、高度な演算を伴うAI推論処理は電力消費が大きくなるため、大量のバッテリーが必要となり、システムのコスト増加につながる可能性があります。

- **保守運用の複雑化**
  一般的に多数のエッジデバイスを管理・監視することは困難であり、スケーラビリティが課題となります。また、再学習などによるモデル更新時のソフトウェアアップデート等で問題になる場合があります。

## 1.4 主要なユースケースとアプリケーション

エッジAIは多くの分野で活用され、リアルタイム性や安全性の向上に期待されています。

**スマートシティ**
- **交通管理**
  センサーやカメラを使用して交通状況をリアルタイムで監視し、信号時間の調整などで渋滞を緩和
  
- **人流管理**
  エッジデバイスが映像をリアルタイムで解析し、公共交通機関の運行計画に反映

**産業機器への応用**
- **予知保全**
  機械の動作データをリアルタイムで分析し、異常検知による事前メンテナンスを実施
  
- **品質管理**
  製造ラインでの製品検査をエッジデバイスがリアルタイムで行い、不良品を自動検出

**ヘルスケア**
- **モニタリング**
  ウェアラブルデバイスなどによるバイタルデータのリアルタイム監視
  
- **遠隔診断**
  リモートデバイスを使用して、遠隔地の患者を遠隔診断

**小売・物流**
- **在庫管理**
  センサーが在庫レベルをリアルタイムで監視し、商品を自動補充
  
- **顧客行動分析**
  店内カメラが顧客の行動を解析し、マーケティング情報を収集



# 2章：エッジAIの基本概念

本章では、エッジAIの動向を深堀していくにあたり、前提となる技術要素を整理します。

## 2.1 AIモデル

エッジデバイスでアクセラレーションするAIモデルはディープラーニングモデルを対象としています。主に、シンプルな全結合層で構成される多層パーセプトロン(MLP)や、畳み込み層を持つConvolution Nural Network（CNN)、また近年、爆発的な性能発展をもたらしているTransformerが対象となります。

DNN、CNNにも構成により様々な形を取り、この初期設定のことをハイパーパラメータとよんだりします。エッジデバイスでのCNNによる推論を想定した場合、主なものは以下となります。

- アーキテクチャ
    - 入力層
    - 出力層
    - 畳み込み層
    - 残差接続 (Residual Connection)
    - pooling層
    - 全結合層 (Full Connected)
    - Batch Normalization
    - Depthwise Convolution (MobileNet)
    - Pointwise Convolution (MobileNet)
- ハイパーパラメータ
    - kernel size
    - stride
    - padding
- 活性化関数
    - Relu
    - softmax

エッジデバイスに搭載されたハードウェアアクセラレーションでAIモデルを動作させるためには、AIモデルを構成しているこれらの要素がサポートされている必要があります。サポートされていない要素がある場合、学習済みモデルの構成を変更する必要があり、性能劣化を起こす可能性があります。

## 2.2 数値精度

推論を行うエッジデバイスは一般的にAIモデルの学習時に用いるデバイスより非力なものになります。この時、学習時と推論時におけるAIモデルの重み(weight)を構成する数値精度が課題になります。

数値精度には、モデルの重みを保存する領域の精度と演算時の精度があります。重みの精度はRAMに、演算精度はアクセラレータの影響を受けます。主に用いられる精度は以下となります。

- 32bit floating (FP32)
- 16bit floating (FP16)
- 16bit integer (INT16)
- 8bit integer (INT8)
- 4bit/2bit/1bit integer (INT4/2/1: FPGA等)

FP32の場合、一つの重みの保存に4byte消費します。モデルが大きくなるにつれて保存領域が大きくなりメモリ領域と帯域を圧迫します。

例えば、代表的なCNNであるResNet50の場合、実装によりますが約25.6M個のパラメータがあり、重みデータが単純計算で約100MBとなります。このデータを推論処理毎にRAMから読み込むことになります。画像認識のユースケースで30fpsを想定すると、100MB×30回/s = 3Gbpsのメモリ帯域を消費することになります。

これをFP16にすると必要な帯域を半分に、またINT8にすると1/4にすることができるため、メモリ利用効率の観点では有効になります。一方で、モデルの学習はFP32で実行されることがスタンダードとなります。FP16やINT8で同じ性能がでるように保証することは困難なことが多く、精度と演算性能のトレードオフとなります。

## 2.3 演算速度

DNNをアクセラレートするハードウェアは基本的にはモデルの重みデータに対して積和演算をCPUよりも効率よく処理できるように実装されるものとなります。効率よくというのは、複数の重みデータに対して、同時並列に演算できることを指します。このような処理を行う演算をSIMD（Single Instrucstion Multi Data)演算といいます。SIMDは複数のデータに対して同じ演算を並列で処理できる装置となります。

SIMDの演算速度（演算回数）は、演算コア数（同時データ数）× クロックレート × 演算コアが1クロックで実行できる演算数で決まります。

DNNでは積和演算（掛け算と足し算）を実行するMAC(Multiply Accumulation)コアが重要となります。ハードウェアアクセラレータが持っているMACコア数とクロックレートで理論的な最大演算速度が決まります（MACは演算数を2回とカウントすることが慣例となります）。

演算回数はOperation per Second (OPS)で表し、GOPSやTOPSで表現されることが多いです。例えば、MACコア数1000、MACコアの動作クロックレートを1GHzとするとOPSの値は以下のようになります。

OPS = 1000 x 1G(Hz) x 2 = 2000 GOPS/s = 2 TOPS/s

Imagenetを想定したResNet50の処理量(Operations:OP)は約7.7GOPとされているため、上記のアクセラレータでは理論的にスループット約260fpsで処理できる能力を持っていることになります。

※OPS以外に1秒間で何回の浮動小数点演算が実行できるかを示すFLOPSで評価される場合もあります。

ただし、OPSやFLOPSは全クロックで演算を行った場合の理論値となります。実際は演算実行にクロックウェイトが入ったり、メモリからのデータ読み込み時間で待ち時間が発生するなどの理由により、全クロックで演算を行うことはできない場合がほとんどで、理論的な性能から実際のスループットは劣化します。

## 2.4 ハードウェアで高速化できる処理

推論処理は一般にCPUとハードウェアアクセラレーションが協調して行う処理となります。そのため、全ての演算をハードウェアでアクセラレートできるわけではありません。

以下は推論処理のフロー概要となります。この中で主な役割分担を示します。

| 処理 | 概要 | 実行パート   |
|:-:|:-:|:-:|
| データ入力  | センサなどから観測データを作成  | CPU  |
| 前処理（pre-processing)  | データをモデル入力するための加工処理  | CPU |
| モデル演算  | DNNの重みとデータの演算  | アクセラレータ |
| 後処理（post-processing）  | モデルから出力されたデータの加工処理 | CPU |
| データ出力  | アプリケーションへの出力 | CPU |

このようにモデルとの演算以外にも処理があり、ほとんどをCPUで実施することになります。最も負荷が高いモデル演算をハードウェアアクセラレータに任せることになります。

ハードウェアアクセラレータに遊び時間が発生すると、演算性能が理論値からどんどん悪化してしまいます。そのため、CPUとハードウェアアクセラレータの処理を並列スケジューリングし、なるべく連続的にハードウェアアクセラレータに演算データが流れ続けるように設計することが必要となります。

（次回へ続く）