iPhone Xに代表されるモバイルニューラルプロセッシングの動き Appleは、A11 SoCを、9月12日に発表したiPhoneファミリ「iPhone X」、「iPhone 8」、「iPhone 8 Plus」に採用する。ニューラルネットワークプロセッシングコア「Neural Engine」については、iPhone Xの顔認識ベースの認証機能「Face ID」についてしか説明が行なわれていない。しかし、アーキテクチャの方向性は推測が可能だ。 現在、コンピューティングはニューラルネットワークのアクセラレーションへと急速に進んでいる。スマートフォンなどモバイルデバイスは先陣を切っており、Appleだけでなく、GoogleやQualcomm、HiSilicon、Samsung、富士通などほとんど業界全体がニューラルネットワークのハードウェア開発へと進んでいる。 ニューラルネットワークのハードウェアアクセラレーションでは、方向性としてCPUやGPUなど既存のプロセッサアーキテクチャを拡張する方法、専用のニューラルネットワーク用プロセッサコアを搭載する方法、そのハイブリッドの3つのアプローチがある。また、適用するニューラルネットワークのフェイズとしては、「トレーニング(Training:学習)」に最適化する方向、「インファレンス(inference:推論)」に最適化する方向、両対応的な方向の3つがある。適用市場範囲も、サーバールーム、据え置きコンピュータ、モバイル、組み込みIoT(The Internet of Things)と幅広い。 深層学習で使われるニューラルネットワーク専用のプロセッシングユニットについては、現状では定まった呼称がない。つまり、CPUやGPUのような明瞭な呼称が定まっていない。Appleの呼称はNeural Engineだが、ほかの呼称を列記すると、下のようなリストができる。 ・DLU (Deep Learning Unit)

・DLPU (Deep Learning Processing Unit)

・DLP (Deep Learning Processor)

・NPU (Neural Processing Unit)

・DNPU (Deep Neural Network Processing Unit)

・DNNE (Deep Neural Network Engine)

・TPU (Tensor Processing Unit)

・DLA (Deep Learning Accelerator) まだまだ見落としがあるはずで、今のところ、呼称が収束する見込みがない。それだけ、多数のニューラルネットワークプロセッサのアイデアがわき出ているのが現状だ。そして、Appleバージョンの呼称Neural Engine(NE?)が、上のリストに加わる。この記事では、面倒なので、こうしたニューラルネットワークのプロセッシングユニットは、暫定的にNPU (Neural Processing Unit)としておく。 AppleのNeural Engineについては、詳細はまだわかっていない。しかし、スマートフォン向けのモバイルSoCに内蔵するNPUという制約から、アーキテクチャの方向性は予測がつきやすい。そもそも、モバイル向けSoC全体が、何らかの形でのニューラルネットワーク用のプロセッシングユニットを搭載する方向へと進んでおり、Appleの動きはその先端の1つに過ぎない。そして、モバイルSoC内蔵のNPUは、同じ電力とダイエリアの制約を受ける。

モバイル向けNPUは推論に最適化した設計へ向かっている モバイル向けのNPUの要求仕様は非常に明確だ。超低電力であること、ダイエリアが小さいこと(内蔵メモリも含む)、リアルタイム処理に応えられる高速性を持つことだ。低電力化のためには、外部メモリアクセスを減らし内部メモリを多用することも重要であるため内蔵メモリを含めたダイエリアが重要となる。また、個々のユニットを低電力にすると演算ユニット数を増やして応答性を高めることができる。3つの要素は密接に絡んでいる。 では、AppleのNeural Engineは、どういった目的の、どういった機能を持ったコアが想定できるのか。整理して行くと、まず最初のポイントは、ニューラルネットワークのフェイズだ。 深層学習には、ニューラルネットワークモデルを構築する学習フェイズと、学習の結果を使った認識を行なう推論フェイズがある。モバイルデバイスではNPUは、推論に特化した方向へと向かっている。これは、電力消費とダイエリア、メモリ帯域の制約のためだ。 学習か推論かには、電力とダイエリアのトレードオフがある。モバイルデバイスの電力とコストの枠内で、高精度の認識処理を実現するためには、推論にある程度最適化したNPU設計を取らざるを得ない。モバイルでは、深い学習と推論の両対応の汎用コアではなく、推論に寄った設計がほとんどになる。概要は後述するとして、AppleのNeural Engineも、推論プロセッサであるはずだ。

CNN以外のニューラルネットワークへの対応 もう1つ重要な要素は、多様なニューラルネットワーク構造への対応だ。具体的には、画像認識に多用されている畳み込みの「Convolutional Neural Network(CNN)」だけでなく、音声や動作のような時系列データに適した「Recurrent Neural Network(RNN)」、自然言語処理などに使われるRNNの特殊形の「Long/Short-Term Memory Network(LSTM)」などにも対応できる柔軟性を持つのかどうか。このネットワークモデルのリストには、今後もさらに種類が加わる可能性がある。特定のネットワークモデルに特化した構造か、多様なモデルに対応できる柔軟性を持つのか、そこがポイントとなる。 ここにも悩ましいトレードオフがある。特定モデルに特化させると、電力効率とエリア効率が高いNPU設計にすることができる。柔軟性を持たせると、どうしても効率は低下するし、ダイエリアも必要となる。対応するニューラルネットワークは、演算アレイアーキテクチャなどに影響してくる。 ちなみに、推論向けNPU全体を見ると、用途によって対応ネットワークモデルの方向性が異なりつつある。深層学習が台頭した当初は、画像認識でCNNが成功したため、ハードウェアもCNNに特化させる方向だった。監視カメラやドローン搭載AIのような画像系をターゲットにしたNPUでは、現在もCNN特化の方向にある。しかし、スマートフォンに搭載するNPUの場合、若干方向が異なる。音声や動作、自然言語もターゲットとして行きたいはずだ。 こうした背景を考えると、モバイル向けNPUについては、モデル柔軟性のあるアーキテクチャが主流になって行くと思われる。実際のハードウェアではまだこの方向は明確にはなっていないが、そうした予想は立てられる。もっとも、Appleの初代のNeural Engineがそうした柔軟性を備えるかどうかはわからない。従来の流れはCNNのためのプロセッサという発想だったため、NPUのアーキテクチャ開発のリードタイムを考えると、まだ、キャッチアップできていない可能性がある。

ニューラルネットワークの数値精度 Appleが発表したNeural Engineの性能は「600 billion operations per second」。推論用NPUでは、FLOPS(Floating Operations Per Second:浮動小数点オペレーション/秒)ではなくOPS(Operations Per Second:オペレーション/秒)が、性能単位として使われる。これは、演算するデータタイプが浮動小数点(Floating Point)ではなく、整数(integer)の場合が主流だからだ。 浮動小数点演算主体であるGPUなら演算性能の単位はTFLOPS(Tera Floating Operations Per Second)だ。しかし、整数演算のNPUならTOPS(Tera Operations Per Second)やGOPSが単位となる。AppleがNeural Engineの性能として、“operations per second”という単位を使ったことは、整数演算コアであることを暗示している。AppleのNeural Engineの推論性能をプロセッサ風の単位に変えると「600 GOPS(Giga Operations Per Second)」となる。数100 GOPSのニューラルネットワーク性能は、現在のモバイル向けNPUとしては標準的なレンジだが、すでに流れは数TOPSへと向かっている。 深層学習については、データの数値精度についての考え方が急速に変化して来ている。ある程度データ精度を落としても、実際の推論の精度はそれほど落ちないためだ。学習については、データ精度は32-bit浮動小数点から、16-bit浮動小数点、あるいは16-bit整数やそれ以下へとトレンドが移行して来ている。推論は、学習よりさらにデータの数値精度を落とすことが可能で、16-bit浮動小数点/整数から8-bit整数、4-bit整数、あるいはもっとイレギュラーな精度や、さらに極端にはバイナリ、そして混合精度までさまざまなアプローチが出てきている。 推論フェイズでは、データの数値精度をかなり落としても推論精度がそれほどは落ちない。そして、データの数値精度は、演算コアの電力消費やダイエリア、そしてデータ転送帯域及び外部メモリ帯域と密接に絡む。データ精度を落とせば落とすほど、電力やエリアの効率が高くなる。その分、演算ユニット数を増やして推論の性能を上げることができる。そのため、推論の精度と性能電力コスト(PPA:Performance, Power, Area)のトレードオフでバランスを取ることになる。とはいえ、どこまで数値精度を落としていいのか、見極めが難しいので、様子を見ながら徐々に落としている。 モバイルや組み込みをターゲットとした推論NPUでは、整数演算の採用が多くなりつつある。これは、浮動小数点演算ユニットが整数ユニットの数倍の電力とエリアを食うためだ。モバイルのNPUで、数100 GOPSや数TOPSの性能を達成して、リアルタイムの応答性を高めようとすると、データを整数系にするアプローチが有効となる。しかし、数値精度については、まだ試行錯誤の段階だ。