GoogleがISCA論文のレビュー版を公開

Google DeepMindのアルファ碁が、トッププロ棋士の韓国の李世乭(イ・セドル) 九段を破ったのは記憶に新しい。事前には李 9段の圧勝という予想であったが、これは半年ほど前に元ヨーロッパチャンピオンとの対局した時の棋譜を見ての予想である。しかし、アルファ碁は半年の間に格段に強くなっていた。

その秘密が、AIの推論の性能を大幅に向上させた、Googleの専用アクセラレータのTensor Processing Unit(TPU)である。TPUを大量に使うことにより、先読みが深くなり、大幅に強くなったと考えられる。

TPUの存在は、2016年5月のGoogle I/Oで明らかにされたが、その詳細は公表されていなかった。そのTPUに関する論文が今年6月のISCA(International Symposium on Computer Architecture)で発表される。ISCAはコンピュータアーキテクチャ関係ではトップレベルの学会である。ということで、正式な発表は6月26日となるが、そのレビュー版の論文がGoogleから公開された

Googleは色々なサービスにニューラルネットワークを使っており、2013年にニューラルネットの需要を予測したところ、データセンターの処理能力を倍増する必要が出てくるということになり、対策が必要となった。そして、GPUやFPGAなども検討したが、カスタムASICでアクセラレータを作るのがベストということになり、TPUを開発したという。

Googleのデータセンターでは

  • MLP(Multi-Layer Perceptron):各層の間が全対全接続
  • CNN(Convolutional Neural Network):各層の間の接続は近傍のニューロンだけ
  • LSTM(Long and Short Term Memory):入力に前段の層の出力に加えて前の時点の状態を含む

という3種の構造のニューラルネットを使っている。主要なアプリケーションは次の表の6種であり、2016年6月の実績では、MLPの使用が61%、LSTMが29%、CNNが5%、その他のニューラルネットが5%となっている。ニューラルネットというと、画像認識で使われているCNNが頭に浮かぶが、Googleでの使用比率は小さく、CNNだけをターゲットとして考えるのは間違いであるという。

Googleのデータセンターで使われている6種のニューラルネットアプリの特性。CNNは5%程度しか使われていない (この記事の図表は、すべてGoogleの論文「In-Datacenter Performance Analysis of a Tensor Processing Unit」の図表のコピーである)

この表のLOCはネットワーク記述の行数(Lines of Code)、Layersは各タイプの層数で、FCは全対全、Convは近傍の信号の畳み込み、Vectorは1次元の時系列データの接続、Poolはある領域の最大値をとるなどの処理を行う層である。Nonlinear Functionは非線形関数のタイプである。Weightsは重みの数で、合計の入力本数と同じである。TPU Ops/Weight Byteは重み1バイトあたりの演算回数、TPU Batch Sizeは一括で計算する入力データの数である。

どのタイプのニューラルネットでも、各ニューロンでは入力に重みを掛けて、それらの和を取るという計算は同じであるが、MLPやLSTMとCNNでは重み1バイトあたりの演算数が大きく異なっている。

演算数の少ないMLPやLSTMでは、重みをメモリから読み出す部分がネックになりやすく、演算数が多いCNNは演算ネックになりやすい。

開発の着手からデータセンターに展開して実用化まで15カ月という短期の開発であったので、できるだけ簡単な構造とすることを心掛け、TPUはPCI Express接続のコプロセサとし、ホストCPUがTPUの命令FIFOに命令を書き込んで、TPUはそれを順次実行するという構造になっている。