発想と実装の 間 をつなぐメディア

ディープラーニングに必須のGPUって何なの?NVIDIAでいろいろ聞いてきた

おはようございます、デジマラボ編集長の飯野(@jombo65)です。

ディープラーニングが話題にあがるとき、必ずといっていいほど「GPU」という言葉を聞きますよね。

そんな(おそらく)ディープラーニングと切っても切れない関係にあるGPU。なんですが、恥ずかしながらいったい何モノなのか? どんなことをしているのか? まったく理解できていません…。

こうなったらGPUを提供しているNVIDIAの方に直接教えてもらっちゃえ! ってことで、NVIDIAディープラーニング部の部長、井﨑さんに取材してきました。

ちんぷんかんぷんな人もこの記事を読めば、ちょっとだけGPUのことが理解できる……かも。

GPUという言葉はNVIDIAが作った

―あの、、申し上げにくいんですがハードに疎いもので、NVIDIAさんが何をやっているかもあまりピンときていません……

image1

―井﨑
(笑) では、簡単に弊社の紹介からさせていただきますね。

NVIDIAがGPUを提供しているのは、4つの領域に分かれています。

4business

ということで紹介して頂いたのは以下の4つの領域。

  • ゲーミング:GEFORCEに代表されるPCゲーム領域
  • エンタープライズグラフィックス:車のCADデータのビジュアライズや、映画のCGでも
  • HPC&クラウド:スーパーコンピューターやデータセンターでの計算
  • インテリジェントマシン:組み込み用途向けのSoC。自動運転やドローンなど。
HPC・・・High Performance Computing。高性能な計算。
SoC・・・System-on-a-chip。装置やシステムの動作に必要な機能を一つの半導体チップに実装する方式

PCゲームから自動運転車まで、多くの分野で使われているんですね。特に国内においてPCゲーミング向けGPUおよびプロフェッショナルのグラフィックス領域でのGPUのシェアも9割を超えているそう。独占状態じゃないですか……。

―井﨑
このようにいろいろな分野にGPUを提供させていただいていますが、実はGPUという言葉自体NVIDIAが作ったものになります。

Graphics Processing Unitの略ですね。

そもそも言葉自体がNVIDIA発……!(それを知らずに取材に来てしまって恥ずかしい…)

PCゲームではGPUがないと画面が滑らかにヌルヌル動かない。一方で、データセンターのようなグラフィックと関係なさそうなところでも使われている……と。んー、正直まだ「???」な状態。。。

GPUは並列処理を行うことで高速に演算を回す装置

―GPUなんですが、何をしているものなんでしょうか??

image2

―井﨑
ちょっと3Dグラフィックのことからお話ししますね。

3Dグラフィックを表現するためには、ポリゴン三角形の頂点の座標位置の計算と、そこにのせるピクセルデータの計算が必要です。

それぞれの計算に専用エンジンがあったんですが、片方が暇で片方が忙しいみたいなことが課題としてありました。効率よくないんです。

そこで効率よく、かつ汎用的な計算を行えるようにハードをズラーッと並べて、プログラムで制御できるようにしたそう。この技術が、2000年以降の3Dグラフィックのアーキテクチャを大きく変えたとのことでした。

つまり、GPUというモノでそれぞれの専用エンジンをひとつにまとめたってことのようです。

―井﨑
これって計算が高速で行えるってことなので、3Dグラフィックだけに限った話ではないんです。

GPUはアクセラレータとして動作するため、CPUと相まって使われることになります。

アクセラレータ・・・コンピュータの特定の機能や処理能力を向上させるハードウェアやソフトウェア。ハードウェアではCPUが担当する処理を肩代わりするものが一般的

image3

CPUはファイルを開いてデータをメモリーにロードする、などシーケンシャルな処理を得意とし、GPUは並列処理を行うことで、高速に演算を回すのが得意なんだそう。

―井﨑
GPUアクセラレータが3Dグラフィックスを加速させ、GPGPUに向けた開発環境をNVIDIAが提供したことで、HPCやディープラーニングなどにも使えるようになりました。
GPGPU・・・GPUを画像処理以外の目的(ここでいうと汎用計算)に応用すること

なるほどなるほど……。少しずつわかってきた気がします。

GPUが全体の8割のパフォーマンスを決める

―GPUがディープラーニングの計算に向いているっぽいことは理解できました。CPUでも計算はできると思うんですが、例えばGPUを使わないとどうなっちゃうんですか?

―井﨑
プログラムコードでいえば、9割はシーケンシャルな処理なんですね。CPUが得意とする処理です。

その他の1割がGPUが得意とする計算のコアになります。ただ、その1割が全体のパフォーマンスの8割ぐらいを決めるんです。

image4

その差はコアの数にも現れているんだとか。最新のCPUは24コアだそうですが、GPUには3,000~4,000コア入っているそう。このコアの違いが並列処理を加速させている・・・んですね。たぶん。

―井﨑
今のディープラーニングの計算量ってとんでもなく多くなっていて、10層ぐらいのディープニューラルネットワークでも10億個ぐらいのパラメータのチューニングが必要になります。

CPUだけでこの計算を行うと丸1年かかってしまうんですが、GPUを使うと30日で終わらせることができます。

10億個パラメータのチューニングで必要な計算量は、30EFLOPS(エクサフロップス)なんだそうです。んー、数字が大きすぎてイメージできません、、、。

FLOPS・・・1秒間にできる浮動小数点数演算の回数。EFLOPSは1018を指す。つまり100京回/秒の浮動小数点演算。

image6

―井﨑
計算速度の違いはわかってもらえたと思います。

ただ、普通の企業は30日も待てないので、実際には、複数のGPUを一つのサーバーに挿したり、もしくは複数のサーバーで分散学習をしたりすることで、4日から1週間ぐらいに学習時間を短縮しています。

10層というのはあくまで例え話とのことで、MicrosoftのResNetは152層もあるそう。

つまりディープラーニングをするときの計算量ってとてつもなく多くて、GPUを使わないことには、

アイデア → コード化 → 学習 → トレーニング → テスト → チューニング

というサイクルをぐるぐる回せないということのようです。トレーニングの部分で時間がかかりすぎてしまう、と。ここまで聞くとなんだかスッキリした気持ちになります。

PDCAを早く回すためのハード環境整備

話しを聞く前と比べると、GPUのことがすこーしだけ理解できました。

ディープラーニングを使ったシステムを作るためには、GPUを使わないと開発日数が現実的じゃないものになってしまうんですね。

システムを組むときはアイデアはもちろん大事。だけれども、スピード感をもってPDCAサイクルを回せるようにハードの環境面も整える必要がある。そんな当たり前のことなんですが、実際の数値など伺って、改めて認識しました。

これからもっともっと勉強していかないとなあ……。

井﨑さんお忙しい中ありがとうございました!

おまけ: こんな素敵なモノをいただきました

井﨑さんは資料を元に説明してくださったのですが、「データでもいただけると嬉しいです!」なんて図々しくお願いしたところ、こんなものをいただいちゃいました。

image8

image9

うおー、手首に巻けるUSB!! かっこいー! 資料をこの中に入れていただき、一瞬でNVIDIAのファンになってしまったのでした。

飯野 希 by
BITAデジマラボ編集長。前職はメーカーのユーザビリティエンジニアとして活動。ビットエーではデータサイエンティストとしても活躍しつつ、デジマラボを軸をした事業開発をおこなう。