このページの本文へ

さくらの熱量チャレンジ 第26回

ソフト/アルゴリズム/ハードへの深い理解に基づく深層学習モデル最適化技術、その裏側を聞く

安価な組み込みAIを世界へ! Ideinが「高火力」を選んだ理由

2018年09月05日 11時30分更新

文● 大塚昭彦/TECH.ASCII.jp 写真● 曽根田元

提供: さくらインターネット

  • この記事をはてなブックマークに追加
  • 本文印刷

「組み込みAI」の実用化を促すために新たなアプローチでチャレンジ

――Ideinの技術によってリソースの少ない組み込みデバイスでも高度な(複雑な)深層学習モデルを動かせるというお話ですが、従来の技術とはどこに違いがあるんでしょうか。

中村:まず、アプローチが根本的に違います。組み込みデバイスに深層学習モデルを載せる場合、これまでのアプローチは「リソースの少ないデバイスに載るように、いかにモデルを小さくするか」というものでした。実際、多くの企業がこのアプローチで研究開発を進めていますが、それだとモデルそのものを簡素化することになるので、たとえば画像認識や音声認識の精度は下がってしまいます。

 一方でIdeinのアプローチは、「リソースの少ないデバイスでもそのまま動かせるように、既存の深層学習モデルを最適化する」というものです。最適化によって既存のモデルとまったく同等の計算を行うモデルを作るので、精度は低下しません。

 言い換えれば、これまでの組み込みAIは「必要な計算量をいかに削るか」を考えてきたわけですが、Ideinでは最適化コンパイラを用いて「同じ時間内で実行できる計算量をいかに増やすか」を研究しているわけです。

――「Ideinが持つ技術のポイントはスピード」だというお話もありました。組み込みデバイスでも実用上十分なスピードを実現するというわけですが、実際どのくらい速くなるんでしょうか。

中村:たとえばRaspberry Pi Zeroで、「TensorFlow」を用いてMobileNetを実行する場合、Ideinの技術を適用することで、通常のおよそ50倍、正確には49倍速く動かせます。まったく同じモデルを使って同じ計算をするんですが、49倍速く処理できるのです。

 なので、Raspberry Piのような安価な組み込みデバイスを、タイミングがクリティカルな(瞬時に解析しなければならないような)用途に使えるようになります。そのほかにも、同じ時間内に複数の異なる解析を走らせる、あるいはもっと複雑な解析をするなど、幅広いアイデアが考えられますね。

江草:「49倍のスピード向上」というのは、最適化コンパイラによる効果がほとんどなんですか。

中村:最適化コンパイラによる効果と、Raspberry PiのGPUを効率的に使っている効果の両方ですね。「数学的なレベルでの高速化」と「ハードウェアに特化した高速化」の2つがあります。

 数学的な高速化というのは、たとえばキャッシュパフォーマンスをいかに最適化するか、モデルを融合していかに演算量を減らすかといった工夫のことです。それと同時に、そのハードウェアにしかない特殊な回路などを駆使して高速化する工夫もする。その両方を掛け合わせて、Raspberry Pi Zeroならば49倍のスピードを実現しているわけです。

 ハードウェアに特化した高速化で言うと、先ほどのデモでお見せした深層学習モデルは全体がGPUに載っています。それで何をしているかと言うと、ioctl(アイオーコントロール、Linuxでデバイスドライバを制御するシステムコール)を1回呼んだら、CNN(たたみ込みニューラルネットワーク)の上から下までを全部通るようにしています。

江草:ああ、なるほど!

――……えー、わたしはよくわかってないので(笑)、もう少し詳しく説明していただけますか。

中村:ニューラルネットワークモデルは多数のレイヤーで構成されていますよね。入力があったら1レイヤー目でこの計算をして、2レイヤー目でこの計算をして……と、いろんな計算を順番にやっていく仕組みです。

 一般的な手法だと、このレイヤーごとにCPUがGPUにデータを送って、計算結果をCPUに戻して、またGPUに送って、戻して……と繰り返し処理していきます。そのたびにカーネルではioctlの呼び出しが発生するんですが、われわれはこのioctlの部分も全部GPUに載せてしまって、最初のioctlを呼び出すだけでCNNの全レイヤーを一気に計算してしまう仕組みにしているわけです。

――あっ、だから処理が速くなるわけですね。

江草:本来、GPUはソフトウェアの実行環境なのだけど、ハードウェアのパイプライン処理もGPU内でやってしまっているイメージですよね。

中村:そうですそうです。全部GPUに載っているので、CPUはGPUの処理が終わるのを待っているだけ、その間のCPU使用率はほぼゼロ%です。なので、CPUはディープラーニング以外の処理、たとえばポストプロセスの処理や通信周りのコントロールに使える空き状態になっています。

 ちなみにRaspberry Pi ZeroのCPUはすごく遅くて、Raspberry Pi 3の40分の1くらいです。しかし、実は両者のGPUは一緒なので、GPUに全部送ってしまえば同じスピードで処理できるんです。

江草:それはすごい。

中村:これはわかる人にはわかる話ですね(笑)。

 なお、Ideinがターゲットとしている組み込みデバイスはRaspberry Piだけではありません。先ほど触れた最適化コンパイラは汎用的な、どんなデバイスにも対応するものとして開発しており、CPU処理はこちらで最適化できます。それとは別に、Raspberry PiのGPU用に特化したニューラルネットワークのライブラリも開発したわけです。

 ちなみにこのライブラリは、アセンブラから全部われわれが作りました。まずアセンブラを作って、ドライバを作って、ライブラリ群はアセンブラで……と。GPUのライブラリまで「手書き」する会社って、あまりないでしょうね。

長谷川:そういえば以前、Raspberry Piのアセンブラを作る記事をネットで読んだことがあるのですが……。

中村:それ、わたしの記事です(笑)。Raspberry Piのチップを作っているブロードコムがGPUのスペックを全部公開したことがあって、その技術資料に基づいてアセンブラを自作し、GPUで行列乗算をしてみる記事を書きました。そのアセンブラをベースに、うちのエンジニアがディープラーニング用に開発を続けて、現在に至っているわけです。

長谷川:そしてそのときの記事をわたしが読んでいた、と。

江草:最適化コンパイラを作っているのは、ハードウェア設計にも詳しい方なんですか?

中村:たとえばスパコンのコンパイラを開発していた人、半導体の露光装置を開発していた人など、メンバーはいろいろです。CTOは半導体に関わっていた人、わたし自身は東大でスパコンの研究をしていました。

江草:Ideinさんのアーキテクチャは、ソフトウェアだけでなくアルゴリズムも当然知っていないといけないし、「仮にハードウェア実装したらこうなるだろう」と想像できる人が設計していることを強く感じさせます。

中村:そうですね。同じ計算をするにしても、たとえばアルゴリズムにもデータの分割方法にも無数の選択肢があります。そして、そこには必ずトレードオフもあって、演算回数は減るけれど通信量が増える、メモリ使用量は増えるけど演算効率は上がるといった違いが生まれます。そうした無数の選択肢の中からどうすれば最も効率が良いのかを、マイクロベンチマークをひたすら取りながら、コンパイラとして実装していくのです。

 こうしたものを自ら開発して動かすことの難しさは、わかる人にはわかります。なので、Ideinが持つ技術力の証明にもなっているんです。先ほどRaspberry PiのGPUライブラリの話をしましたが、これを開発したことでRaspberry Pi以外の組み込みデバイスの案件も舞い込んでくるようになりました。

Ideinオフィスの書棚には、ソフトウェアだけでなくAI/アルゴリズムやプロセッサ関連の専門書も並ぶ

カテゴリートップへ

この連載の記事

灯油タンクで残量検知を実現!北海道の生活を守るIoTとは【熱量IoT】#3

動画一覧はこちら!