全5617文字
この記事は日経Robotics 有料購読者向けの過去記事の再掲載ですが
日経Robotics デジタル版(電子版)』のサービス開始を記念して、特別に誰でも閲覧できるようにしています。

前編の記事はこちら

 ラズパイ(Raspberry Pi)の全機種に、初代Xbox並みの処理性能を持ったGPUが標準搭載されているのをご存じだろうか。このラズパイのGPUを使って、ディープラーニング推論を劇的に高速化する技術を開発したのが、日本のAIベンチャー、Idein(イデイン)だ。同社の創業経緯を紹介した前編に続き、後編では、同社がいかにしてラズパイGPUでの高速化を実現したか、技術の詳細を解説する。
本記事はロボットとAI技術の専門誌『日経Robotics』のデジタル版です
本記事はロボットとAI技術の専門誌『日経Robotics』のデジタル版です

 ラズパイ全機種に標準搭載されているGPU「VideoCore」のリファレンスマニュアルをチップ製造元の米Broadcom社が公開していたとはいえ、ソフト開発ツールなどについてはBroadcom社は一切提供していない。そんな中、Idein創業者の中村晃一氏はどのようにVideoCore向けにディープラーニング推論ソフトを開発したのか。Ideinの高速化技術の詳細を見ていこう。

 中村氏が最初に作ったのは、VideoCore向けのアセンブラである。VideoCoreは、32ビットの4-way SIMDプロセサ「QPU(quad processor unit)」が12個搭載されており注4)、3次元グラフィックス処理ではこれが統合シェーダの役割をする。VideoCoreをGPGPUとして使う際も、このQPU向けのプログラムを記述することとなる。前編の記事で言及したRaspberry Pi Foundation創設者のEben Upton氏が設計したのは、このQPUの命令セットアーキテクチャ(ISA)である。

注4)SIMDとは「single instruction multiple data」の略で、1命令で複数のデータの処理を行うこと。QPUのように4-wayの場合は、1個の命令で4個のデータを同時処理する。メディア処理プロセッサでは頻繁に用いられる。NVIDIA社のGPUを構成するプロセサ「SM(streaming multiprocessor)」もSIMD型だ。VideoCoreのQPUは物理的には4-wayだが論理的には16-wayで、4クロックかけて16個分を処理する。

 Broadcom社が2014年に公開したマニュアルにはQPUの全命令のフォーマットが解説されていたことから、中村氏はまずQPU向けのアセンブラ「py-videocore」を独自に構築した。Pythonコードの中でインラインに記述したアセンブリ言語を機械語に変換する。同アセンブラはOSSとして公開している。

 アセンブラが出来上がった後は、実際にディープニューラルネットをどのように高速化していくか方針を決める。

 中村氏は博士課程の際、東京大学の平木敬氏の研究室に所属し、SIMD型並列計算機「GRAPE-DR」向けに自動並列化コンパイラなどを研究していた。このため、VideoCoreのようなGPGPUでの演算高速化は、中村氏にとってまさに本業ともいえる仕事だった。

 なお、前編の記事の冒頭で紹介したPreferred Networks 共同創業者 社長の西川徹氏が修士課程で在籍していたのもこの平木研究室であり、西川氏も同じくGRAPE-DR関連の研究に関与していた。西川氏はその後、PFNを創業してディープラーニングの学習側のアクセラレータを手掛けた注5)。一方、中村氏はIdeinでディープラーニングの推論側の高速化を追求している。GRAPE-DRに関わった人材がディープラーニング領域の高速化で活躍している。

注5)PFNのMN-Coreのモックアップチップの表面には「GRAPE-PFN2」との文字がある。

当初はGEMMで実装

 ディープニューラルネットの推論実行を高速化するアプローチは、本誌が2018年9月号の記事で紹介したように様々な方式がある(表27-8

 大きく分けて、(1)CNNの畳み込み演算のアルゴリズムレベルの高速化、(2)ソフトウエアパイプライニングなど実装面での高速化、(3)枝刈りや重みの量子化などディープニューラルネットワーク(DNN)のモデル自体を変更したり近似したりすることによる高速化、がある。このうち、精度低下につながる(3)はIdeinは基本的に実施していない。

表2 ディープラーニング推論の高速化手段
表2 ディープラーニング推論の高速化手段
[画像のクリックで拡大表示]

 (1)に関しては、CNNの畳み込み演算を行列積に変換して(im2col:image-to-columnと呼ばれる)から、GEMM(general matrix multiply)として実行する手法、一度別の空間に写像してそこで乗算をしてから再び元の空間に戻す「Winograd」、周波数空間に変換する「FFT」を用いる手法などがある。どの手法が高速かは用いるプロセサのアーキテクチャやCNNのフィルタの大きさなどに依存する。

 例えば、NVIDIA社のGPU向けのDNNライブラリ「cuDNN」ではim2colがよく用いられているほか、本誌が2018年9月号で紹介したモルフォの推論高速化ライブラリ「SoftNeuro」ではWinogradが多用されている7)

 Ideinは当初、VideoCore上でim2colにより実装したが注6)、「im2colはメモリ使用量が増えるため、VideoCoreでCNNを実行する際はあまり向かず、現在ではこの手法は利用していない」(同社 エンジニアの大川徳之氏)という。im2colの後はWinogradも一時期用いていたが、最終的にはVideoCoreのQPUではアルゴリズム上は畳み込み演算を定義通り実装しつつ、キャッシュやレジスタの利用などメモリアクセス関連の実装を工夫するのが最も高速であることが分かり、現在の同社の実装では定義通りの実行となっている。

注6)VideoCore上での当時のGEMMの実装の詳細は、中村氏のブログで解説されている。

ホスト介在なしにGPUが独立で演算

 (2)のプログラム実装面での高速化は、Ideinが特に力を注いだ部分だ。中でも最も特徴的なのが、同社が「pure-GPU化」と呼ぶ工夫である。