2018年5月23日 00:00
マシンラーニングに特化したArm MLプロセッサ
Armがついにマシンラーニング(ML:機械学習)専用プロセッサのIPを正式にリリースする。Armの「Arm MLプロセッサ(Machine Learning Processor)」は、最近、各社から次々に登場している「ニューラルネットワークプロセッサ(NPU)」と同じく、ニューラルネットワーク(Neural Network:NN)を低電力かつ高パフォーマンスに実行する。CPUやGPU、DSPの拡張ではなく、最初からML処理専用に設計された専用アーキテクチャだ。Armは、Arm MLを投入することを、今年(2018年)2月に発表していたが、いよいよ技術的な詳細を明らかにした。
Arm MLは、ほかのArm IPコアと同様にスケーラブルで1コアから16コアまで、IoT(The Internet of Things)から車載、さらにはサーバーサイドまでのスケーラビリティを備える。IoTやモバイルに対応するため、電力効率は7nmプロセス時に1W当たり3 TOPS(trillion operations per second)ときわめて高い。MLのインファレンス(Inference:推論)に最適化されたアーキテクチャで、性能は最大構成なら4.6 TOPS(Trillion Operations Per Second)の性能となる。
モバイルをターゲットに含めたNPU(Neural Processing Unit)は数多いが、Arm MLにはいくつか目立った特徴がある。ニューラルネットワークでは、「CNN(Convolutional Neural Network)」に適したアーキテクチャを取っているが、「Recurrent Neural Network(RNN)」や「Long/Short-Term Memory Network(LSTM)」などほかのネットワークモデルにも対応できる柔軟性を持つ。そのため、CNNが向いている画像認識だけでなく、LSTMやRNNを使う音声や自然言語など多彩な認識処理に使うことが可能で、今後の新しいNNにも対応できる。
Arm MLは電力効率を上げるため、データ精度はINT8(8-bit 整数)のみとしており、浮動小数点演算はサポートしない。柔軟な処理のために、積和ユニット(Multiply-Accumulate:MAC)アレイと、MAC拡張したプロセッサの2系統のユニットを備える。インファレンスの電力効率向上の鍵となる「プルーニング(Pruning:剪定)」にハードウェアで対応し、プルーニングによって圧縮したデータを格納するSRAMを備える。複数のコンピュートエンジンの構成へと拡張可能にするための、制御用の同期ユニット(Sync Unit)を備える。
一言で言ってしまえば、Arm MLは現時点のNPUのなかでは、最先端的な機能と性能を備えている。たとえば、プルーニングでは、メモリ圧縮だけでなくコンピュテーションの圧縮もサポートする。パフォーマンスレンジでは、「iPhone X/8」が内蔵するNPU「Neural Engine」は600 GOPS(Giga Operations Per Second)で、Arm MLの最大構成は7倍以上となる。
ただし、Arm MLは今年(2018年)中盤に、ソフトマクロであるRTL(Register Transfer Level)の提供開始であるため、Arm ML搭載チップの登場は2019年頃となる。2019年のNPUとしては、標準的なレンジの性能と機能となるかもしれない。
プルーニングにハードウェア対応したMACコンボリューションエンジン
Arm MLプロセッサは、演算コア「コンピュートエンジン(Compute Engine)」を中心に構成されている。Arm MLは、最大16個までのコンピュートエンジンで構成することができる。各コンピュートエンジンは、128個の8-bit 積和ユニット(Multiply-Accumulate:MAC)を備えたアレイ「MACコンボリューションエンジン(MAC convolution engine)」と、16-wayのMACユニットを備えたプロセッサ「プログラマブルレイヤエンジン(Programmable layer engine:PLE)」を備える。
Arm MLにはMLプロセッサ全体を制御するMCUであるコントロールユニットがあり、各コンピュートエンジンにワークロードからタスクをディスパッチする。コンピュートエンジン同士はブロードキャストネットワークで接続されており、同期ユニットがコンピュートエンジン同士の同期を制御する。ホストインターフェイスはACE-Liteで、CPUとはI/Oコヒーレンシを取る。つまり、Arm MLコアはCPUコアのキャッシュをスヌープできるが、その逆はできない。
個々のコンピュートエンジンは、データを格納する容量がコンフィギュラブルなSRAMを備える。「重み(ウエイト:weight)」データの格納や「アクティベーション(activation)」データの格納やハンドリングは内蔵SRAMで行なう。コンピュートエンジン内では、フィーチャマップの読み込みユニットがSRAMからマップを読み出し、ウエイトデコーダ(Weight decoder)がプルーニングによって圧縮された重みデータの読み出しとデコードを行なう。
データは演算アレイであるMACコンボリューションエンジンに送り込まれる。MACコンボリューションエンジンは、1Dのベクタ構成のMACユニットアレイとなっている。NNの2Dマトリックス演算が1Dアレイにマップされる点は、GPU(Volta以外)での実装と似ている。NPUに多い2Dアレイ構成ではないのは、プルーニングへのハードウェア対応を容易にするためかもしれない。
MACアレイは、インプットとアウトプットは8-bitだが、内部精度は拡張している。8-bitとしているのは、現在のNNツールでインファレンス向けとしてサポートされている精度の主流が8-bitであるためだという。MACアレイは、ルックアップテーブルを使うことで、プルーニングされた部分の演算をスキップし、空いた演算スロットを詰めることで演算スループットを上げる仕組みを備えている。そのため、Arm MLのMLパフォーマンスは、額面の演算性能以上に高くなる。Arm MLのMACアレイとプルーニング対応については、別の記事でもう少し詳しく説明したい。
汎用性の高いプロセッサPLEも搭載
Arm MLのコンピュートエンジンは、MACアレイとは別に、プログラマブルレイヤエンジン(Programmable layer engine:PLE)と呼ぶマイクロコントローラを備える。PLEの実体は、ArmのMCU(マイクロコントローラ)をベースにニューラルネットワーク向け拡張エンジンを加えたプロセッサだ。ベクタ命令とNN向け命令を加えており、16レーンのベクタエンジンを備える。PLEは、MACアレイからは独立したプロセッサとなっており、専用のSRAMワーキングメモリも内蔵する。
PLEは、一言で言えば、ニューラルネットワークのなかで、MACアレイに向かない処理をすべて行なうユニットだ。NNのプーリングやアクティベーションの制御、また、プルーニングなどによる圧縮データの実行の制御などをPLEが行なう。NPUでは、この部分を専用ハードワイヤ化しているプロセッサもあるが、Armはプログラマブルプロセッサとすることで、柔軟性を持たせた。コンピュートエンジンを制御するマイクロコントローラに、NN演算機能まで持たせたものがPLEだと見なすことができる。
Arm MLは、全体の設計を見ると、画像認識のCNNを初期ターゲットとして開発されたように見える。しかし、PLEのために、ほかのニューラルネットワークモデルにも柔軟に対応ができる。これは、どんなモデルが流行するか予想が難しい現在のMLでは重要な機能だ。ただし、現在のインファレンスNPUは、異なるニューラルネットワークモデルへの柔軟な対応を進めているため、Arm MLが登場する頃にはほかのNPUも似たような柔軟性を備えている可能性がある。
Armのマシンラーニングソリューションを補助するODプロセッサ
Armは、マシンラーニング汎用のArm MLプロセッサの導入と同期して、オブジェクト認識専用の「オブジェクトディテクション(Object Detection:OD)プロセッサ」も刷新する。ArmはODプロセッサをすでにリリースしており、HiveやHikvisionのセキュリティカメラに組み込みコアとして採用されている。Armは、Arm MLと同時にODプロセッサも第2世代へと強化して、Arm MLとの組み合わせ構成を可能とする。
ODプロセッサは、画像や動画のなかから、人や顔、クルマや道路標識などを識別する。オブジェクト検知に特化することで、リアルタイムに高精度なディテクションを可能とする。Arm MLとの組み合わせでは、たとえば、動画のなかからODプロセッサが顔を認識し、MLプロセッサが誰の顔かを認識する。
第2世代のODプロセッサでは、フルHDの60フレームの動画の中の群衆から、リアルタイムで個々の顔部分を検知するといった処理が可能となる。オブジェクトサイズは50x60ピクセルまで。Arm MLとの組み合わせでは、オブジェクト検知をArm MLからオフロードすることで、Arm MLのNNを高度化させることができる。
MLのためのソフトウェアスタックも整備
Armは急速にマシンラーニングへの対応を進めている。CPUでは、Cortex-Aシリーズに、マシンラーニングに対応するためのドット積(dot product)命令を追加。GPUでも、つい最近、ドット積命令を追加してMLパフォーマンスを大幅にアップさせた。今回、ML専用のArm MLを投入することで、ArmはMLについては、CPU、GPU、NPUの3つのソリューションを並べることになる。それぞれパフォーマンスレンジと、フィーチャと、電力効率が大きく異なる。インファレンスでの電力効率がもっとも高いのはArm MLだが、トレーニングもデバイス側で行なうとなるとCPUやGPUのほうが向いていると思われる。
予想されるArm MLの実装パターンとしては、まず、スマートフォンやタブレット向けのモバイルSoCへの導入が考えられる。CPUとGPUに加えて、第3のプロセッサとしてArm ML NPUコアが搭載されるケースだ。MLワークロードの電力効率がきわめて高いArm MLコアへとオフロードすることで、マシンラーニングによる認識処理を容易にする。
また、Arm MLは省スペース構成も可能であるため、IoT向けの組み込みチップへの搭載も予想される。Arm MLの最大構成のパフォーマンスレンジは、今後車載も視野に入れることができる。サーバーサイドのインファレンス向けでは、省電力性が武器となる。
また、Armは、マシンラーニングのためのソフトウェアスタックも整備する。ArmのMLソリューションに最適化したライブラリを用意することで、既存のフレームワークであるTensorFlowやCaffe/Caffe2、mxnet、あるいはAndroid NNAPIから透過的にArmやパートナーのMLハードウェアにアクセスできるようにする。