おはようございます、Ledge編集長の飯野(@jombo65)です。
ディープラーニングが話題にあがるとき、必ずといっていいほど「GPU」という言葉を聞きますよね。
そんな(おそらく)ディープラーニングと切っても切れない関係にあるGPU。なんですが、恥ずかしながらいったい何モノなのか? どんなことをしているのか? まったく理解できていません…。
こうなったらGPUを提供しているNVIDIAの方に直接教えてもらっちゃえ! ってことで、NVIDIAディープラーニング部の部長、井﨑さんに取材してきました。
ちんぷんかんぷんな人もこの記事を読めば、ちょっとだけGPUのことが理解できる……かも。
GPUという言葉はNVIDIAが作った
―あの、、申し上げにくいんですがハードに疎いもので、NVIDIAさんが何をやっているかもあまりピンときていません……

(笑) では、簡単に弊社の紹介からさせていただきますね。
NVIDIAがGPUを提供しているのは、4つの領域に分かれています。
ということで紹介して頂いたのは以下の4つの領域。
- ゲーミング:GEFORCEに代表されるPCゲーム領域
- エンタープライズグラフィックス:車のCADデータのビジュアライズや、映画のCGでも
- HPC&クラウド:スーパーコンピューターやデータセンターでの計算
- インテリジェントマシン:組み込み用途向けのSoC。自動運転やドローンなど。
SoC・・・System-on-a-chip。装置やシステムの動作に必要な機能を一つの半導体チップに実装する方式
PCゲームから自動運転車まで、多くの分野で使われているんですね。特に国内においてPCゲーミング向けGPUおよびプロフェッショナルのグラフィックス領域でのGPUのシェアも9割を超えているそう。独占状態じゃないですか……。

このようにいろいろな分野にGPUを提供させていただいていますが、実はGPUという言葉自体NVIDIAが作ったものになります。
Graphics Processing Unitの略ですね。
そもそも言葉自体がNVIDIA発……!(それを知らずに取材に来てしまって恥ずかしい…)
PCゲームではGPUがないと画面が滑らかにヌルヌル動かない。一方で、データセンターのようなグラフィックと関係なさそうなところでも使われている……と。んー、正直まだ「???」な状態。。。
GPUは並列処理を行うことで高速に演算を回す装置
―GPUなんですが、何をしているものなんでしょうか??

ちょっと3Dグラフィックのことからお話ししますね。
3Dグラフィックを表現するためには、ポリゴン三角形の頂点の座標位置の計算と、そこにのせるピクセルデータの計算が必要です。
それぞれの計算に専用エンジンがあったんですが、片方が暇で片方が忙しいみたいなことが課題としてありました。効率よくないんです。
そこで効率よく、かつ汎用的な計算を行えるようにハードをズラーッと並べて、プログラムで制御できるようにしたそう。この技術が、2000年以降の3Dグラフィックのアーキテクチャを大きく変えたとのことでした。
つまり、GPUというモノでそれぞれの専用エンジンをひとつにまとめたってことのようです。
CPUはファイルを開いてデータをメモリーにロードする、などシーケンシャルな処理を得意とし、GPUは並列処理を行うことで、高速に演算を回すのが得意なんだそう。

GPUアクセラレータが3Dグラフィックスを加速させ、GPGPUに向けた開発環境をNVIDIAが提供したことで、HPCやディープラーニングなどにも使えるようになりました。
なるほどなるほど……。少しずつわかってきた気がします。
GPUが全体の8割のパフォーマンスを決める
―GPUがディープラーニングの計算に向いているっぽいことは理解できました。CPUでも計算はできると思うんですが、例えばGPUを使わないとどうなっちゃうんですか?

プログラムコードでいえば、9割はシーケンシャルな処理なんですね。CPUが得意とする処理です。
その他の1割がGPUが得意とする計算のコアになります。ただ、その1割が全体のパフォーマンスの8割ぐらいを決めるんです。
その差はコアの数にも現れているんだとか。最新のCPUは24コアだそうですが、GPUには3,000~4,000コア入っているそう。このコアの違いが並列処理を加速させている・・・んですね。たぶん。

今のディープラーニングの計算量ってとんでもなく多くなっていて、10層ぐらいのディープニューラルネットワークでも10億個ぐらいのパラメータのチューニングが必要になります。
CPUだけでこの計算を行うと丸1年かかってしまうんですが、GPUを使うと30日で終わらせることができます。
10億個パラメータのチューニングで必要な計算量は、30EFLOPS(エクサフロップス)なんだそうです。んー、数字が大きすぎてイメージできません、、、。

計算速度の違いはわかってもらえたと思います。
ただ、普通の企業は30日も待てないので、実際には、複数のGPUを一つのサーバーに挿したり、もしくは複数のサーバーで分散学習をしたりすることで、4日から1週間ぐらいに学習時間を短縮しています。
10層というのはあくまで例え話とのことで、MicrosoftのResNetは152層もあるそう。
つまりディープラーニングをするときの計算量ってとてつもなく多くて、GPUを使わないことには、
というサイクルをぐるぐる回せないということのようです。トレーニングの部分で時間がかかりすぎてしまう、と。ここまで聞くとなんだかスッキリした気持ちになります。
PDCAを早く回すためのハード環境整備
話しを聞く前と比べると、GPUのことがすこーしだけ理解できました。
ディープラーニングを使ったシステムを作るためには、GPUを使わないと開発日数が現実的じゃないものになってしまうんですね。
システムを組むときはアイデアはもちろん大事。だけれども、スピード感をもってPDCAサイクルを回せるようにハードの環境面も整える必要がある。そんな当たり前のことなんですが、実際の数値など伺って、改めて認識しました。
これからもっともっと勉強していかないとなあ……。
井﨑さんお忙しい中ありがとうございました!
おまけ: こんな素敵なモノをいただきました
井﨑さんは資料を元に説明してくださったのですが、「データでもいただけると嬉しいです!」なんて図々しくお願いしたところ、こんなものをいただいちゃいました。
うおー、手首に巻けるUSB!! かっこいー! 資料をこの中に入れていただき、一瞬でNVIDIAのファンになってしまったのでした。