オンライン開催となったCOOL Chips 23
2020年4月15日から17日までの3日間、IEEEが主催するコンピュータの国際学会「COOL Chips 23」が開催された。
元々は、国分寺の日立中央研究所で開催の予定であったが、新型コロナウイルスの感染リスクを減らすため、Web上によるオンライン開催となった。使ったシステムはCISCOのWebEXで、慶應義塾大学のシステムを使わせてもらっていた。
リアルの学会で、友人、知人と会って、近況などを会話するという楽しみは無いが、9時からの講演に、家でゆっくり朝食を食べて8時50分にパソコンの前に座れば参加できるというのは非常に楽ちんである。
主催者側の発表によると、COOL Chips 23の参加者は92名とのことで、例年の150名程度の参加者に比べると2/3程度の人数であった。バーチャル開催であるが、3万円(IEEE、IEICE、あるいはIPSJの会員で4月10日以前のレジストレーションの場合)という参加費は個人的には高い感じがした。もう少し安かったら参加者が増えたのではないかと思う。
低消費電力なエッジデバイスでできるディープラーニング
今回の発表の中で興味をひかれたのは、LeapMind社の基調講演である。
LeapMind社は2012年に創立され、2019年までに集めた投資の総額は約46億円で、主な出資社は、Intel Capital、TOYOTAなどであるという。
LeapMindは低電力のエッジデバイスでディープラーニングを動かすデバイスを開発している。
なぜ、エッジかというと、データをクラウドに送る必要がないので、通信コストが必要なく、安い。また、ネットワーク遅延が入らないので速い。そして、データのプライバシーが保ちやすい。などのメリットがあるからであるという。
しかし、YOLO v3ニューラルネットで画像認識を行う場合、フレーム当たりの演算量は39-140GFlopに上り、60FPSの処理を行うためには2.2-8.4TFlop/秒の演算能力が必要である。また、モデルのサイズも237MBとエッジデバイスに格納するにはサイズが大きい。
開発が進むDNNアクセラレータ「Efficiera」
そのため、次にあげるような手法を使って圧縮を行う。
LeapMindは、非常に少ないビット数で情報を表現するQuantization(量子化)を行うDNN(Deep Neural Network)のアクセラレータ「Efficiera」を開発している。このアクセラレータは推論(Inference)専用で、学習(Learning)用に使うことは考えていない。また、エッジデバイス用で、サーバ用に使うことも想定していない。EfficieraのIPの使い方としてはASICにする場合とFPGAで実現することを想定している。
LeapMindはTSMCの12nmプロセスを使って開発を行っており、現在の設計で27.7TOPS/Wの電力効率となっている。この値は推論アクセラレータとしては高い値である。そして、この数値は製品版ではもっと改善する予定である。
何故、Efficieraは効率が高いのかというと、それはニューラルネットの計算を非常に少ないビット数で行っているからである。
畳み込みニューラルネットでは、入力画像にフィルタを掛ける畳み込み演算を行って抽出する情報を取り出して行く。この操作は入力(Activationと呼ぶ)に重み(Weightと呼ぶ)を掛ける。これをニューロンのすべての入力について計算し、その合計を求めて、ReLU(Rectified Linear Unit)などの非線形の関数を通してニューロンの出力を作る。
ここで主要な計算はActivationとWeightの積を計算して、次々と加算をしていくところである。
この操作は、おおよそActivationとWeightのビット数に比例する。つまり、ActivationやWeightのビット数を小さくすると計算量は減り、回路に必要なトランジスタ数が減り、消費電力も減る。
このニューロンの計算は、初期には32bitの浮動小数点数で行われていたが、画像認識の場合などでは、精度を下げて計算しても、あまり、認識率が低下しないことが分かってきて、最近では16ビットの浮動小数点数や8ビット整数を使うのが一般的になってきている。
Efficieraでは、もっとビット数を切り詰めて、Weightは1ビット、Activationは2ビットとしている。これがEfficieraの高い電力効率を実現させていると考えられる。
Activationは入力画像のピクセルとして外部から入力されるが、WeightはEfficieraチップの中に記憶しておく必要がある。Weightが1ビットであると、Weightを記憶するメモリが1ビットで済み、FP32の場合の1/32のメモリで済む。また、WeightとActivationの掛け算は1bitと2bitの掛け算で、掛け算回路といった複雑な回路は必要なく、簡単なビット操作で実現できる。
しかし、もともと32bitの浮動小数点数を1ビットとか2ビットに切りつめると計算の誤差が多くなってしまい、認識率が低下して本当に推論ができるのかが問題である。
なお、ここではビット数を切り詰めて諧調のステップを荒くすることを「Quantization(量子化)」と呼んでいる。