エッジAIに関する現状整理

エッジAIに関するお仕事の話がちょっと出て来たので、調べてみました。

必要性

今はモデルを作ってクラウドにデプロイというのが一般的ですが、それが要件にマッチしないことがあります。

例えば、クラウドで処理するとどうしても数秒のタイムラグが発生してしまいます。スマホアプリで使うくらいならそれで問題ないことが多いでしょうが、工場での出荷検査を画像認識で行うとかだとサイクルタイムに影響して生産性が下がってしまうことは容易に想定できるし、自動車の自動運転でも当然マズイでしょう。

また、金融分野でも自動取引のスピードを高めるために既にかなりハードウェアに近いところで勝負しているという話もあり、やはりクラウドで数秒待つ世界は技術の後退となってしまいます。

そうしたことから、AI処理をクラウドに行かずに現場の環境(エッジ)でやりたいというニーズが出てきます。

また、エッジといえばIoTですが、IoTデバイスの中でAIをやろうとすると、ぶち当たるのが消費電力の問題です。据え置きデバイスで常時電源供給ができるなら良いですが、電池式だと最低でも1ヶ月、できれば1年くらいは電池がもって欲しいわけです。電力を消費するのはまず通信です。そのため、現在の多くのIoTデバイスはクラウドとの通信頻度を下げています。また、デバイス内でAIの処理を行うには高速な演算のできるチップが必要になります。これも消費電力の観点では悩みのタネになるでしょう。

Raspberry Pi

エッジである程度高速な演算を行うためには、Raspberry Piを使うという選択肢があります。Raspberry Piにはちょっとしたパソコン程度のCPUが搭載されているので、モデルの作成まではできないにしても、学習済みのモデルをデプロイして、推論だけやらせるくらいのことは可能です。

また、Raspberry PiはUSB給電で動作しますが、最近のモデルはCPU性能が上がっていることもあって給電にシビアになってきています。今年でたRaspberry Pi 4 model Bだと電源供給がこれまでのmicroUSBではなく、USB-Cになり5V3.0Aということです。さすがに電池稼働で1ヶ月なんて無理筋。

Jetson nano

AIというと最近はGPUということで、NVIDIAが出しているJetson nanoがエッジAI用に注目されています。私も最近、評価用ボードを購入して、動作検証しています。Jetson nano自体はパソコンではないのでキーボードやマウスなどが接続できませんが、評価用ボードにはUSB-Aが搭載されていたりディスプレイにも接続できるので、パソコンとして使えます。

ひととおり環境設定すると、Ubuntu上でJupyter Notebookが動くので、あとは手軽にAIを試すことができます。NVIDIAのGPUが載っているので、tensorflow-gpuが動くわけです。(もちろん、TensorFlowだけでなくPyTorchなども可。)

Raspberry Piのように推論だけでなく、学習にも使えそうだし、Raspberry Pi用のカメラを接続してリアルタイムに画像認識させるといった用途にも使用可能。ただ、電力消費はかなりのもので、評価用ボードを生半可なUSB充電器で給電すると、すぐに落ちます。確実に5V2.0Aが給電できることが重要なようですが、AC給電も可能なようになっています。

FGPA

Raspberry PiやJetson nanoまではパソコンの領域として話ができるのですが、FGPAとなるとそうもいきません。FGPAはCPUやGPUのようなチップそのものであり、CPUやGPUが作成されたソフトウェアを動作させるチップであるのに比べて、FPGAはロジックをチップそのものに書き込んで使うという違いがあります。さらに言えば、FPGAをCPUとして動作させるためのロジックを書き込んでCPUとして使うことも可能で、CPUなどとは次元が1つ違う話になってきます。

CPUなどとは逆の方向から考えると、ICやLSIといったチップはロジックを回路に埋め込んだ形で製造します。そのため、ロジックに変更が入ると莫大なお金を掛けて作り直すということになります。一方、FPGAなら回路をチップに書き込めば即座にそのとおりに動くので、回路変更が簡単にできるわけです。

FPGAには以下のような特徴があります。

  • 並列計算が得意
  • レイテンシに優れる
  • ビット計算が速い
  • CPUなどと比べると動作周波数は低い
  • 行列演算や浮動小数点の計算は苦手

最近は、このFPGAをディープラーニングに使おうということになってきています。

基本的には、FPGAにロジックを書き込むには、HDL(ハードウェア記述言語)でロジックを作ります。HLS(高位合成)という技術を使うと、C言語などで書いたロジックをHDLに変換することができます。つまり、C言語でFPGAの動作を変えることができるわけです。

FPGAはCPUと比べると動作周波数は低いし、行列演算や浮動小数点の計算が苦手なので、ディープラーニングには向かないように見えます。しかし、Binary Neural Network(二値化ニューラルネットワーク)を使うと、固定小数点の論理回路を使って処理を行うためGPUに遜色ない処理速度となり、モデルの精度もほとんど落ちないということが分かってきています。

FPGAによるディープラーニングのメリットは、低消費電力であることです。PYNQでは、5V0.5A程度でディープラーニングが動作するという事例もあり、Jetson nanoと比べると大きな差があります。

FPGAのメインプレーヤーはXilinxと、Intel(Altera社を買収)で、両者で80%以上のシェアを占めています。そのXilinx社のFPGAとARM系のCPUをまとめたSoCタイプのデバイスにZynqがあり、FPGAの評価用ボードとしてよく使われています。また、ZynqをベースにしたPYNQではPythonさえ分かればFPGAを使えるという環境もできています。

PYNQではJupyter Notebookが動作し、Binary Neural Networkはxilinx-tiny-cnnというライブラリを用いて実装できます。それで、FPGAにロジックを書き込むことができるので非常に手軽です。ただ、高性能な処理を実現するにはFPGAの特性をよく知った上でコードを書く必要はあるようです。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。2018年、株式会社ビビンコを北九州市に創業。IoTソリューションの開発・導入や、画像認識モデルを活用したアプリの開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。