For Your ISHIO Blog

データ分析や機械学習やスクラムや組織とか、色々つぶやくブログです。

【特別講義メモ】Deep LearningとGPUコンピューティング - Deep Learning基礎講座

東京大学公開講座として開講している「Deep Learning基礎講座」(私は参加していない!)。 本日は、NVIDIA社の2名(NVIDIA JAPAN 丹愛彦 氏、山崎和博 氏)をお招きした特別講義があり、講座受講者以外でも参加ができたので行ってまいりました。

実は、自身でGPUをほとんど触ったことがないのですが、今後触れ合うことが既に決定済みのため、まずは基礎知識を入手したいという気持ちで参加しました。今回は基本的な概要部をまとめています。

GPUコンピュータの歴史

NVIDIAは、大きく4つの事業でビジネスを行っている。「Gaming」「Enterprise Graphics」「HPCとクラウド (スーパーコンピューティング等)」「Inteligence Machine(ロボットや自動運転等)」。もともとはグラフィックスの会社だったが、GPUコンピューティングへと変遷してきた。2006年は、統合シェーダとCUDAが揃ったことから「GPU元年」と位置づけている。また2010年も、初のHPC仕様GPUであるFermiが登場した大きな節目の1つ。

統合シェーダーの登場で何が変わったのか

統合シェーダー登場前の3D処理の仕組みでは、図のように各段階の処理を、それぞれ別のハードウェアで行っていた。これにより、ハードウェアのリソースを最大限活かすことができていなかった。例えば頂点処理をする場合、Vertexシェーダーに負荷がかかるが、Pixcelシェーダーの負荷は低い。ここで遊休リソースが発生していた。

統合シェーダの登場によって、1つのシェーダーコアで処理が行えるようになった。頂点処理用にハードウェアリソースを割り当てる等、ハードウェアのリソースを割り当てをフレキシブルに可能となった。結果として性能が向上した。

f:id:ishitonton:20181107222439p:plain

GPUの中身はどうなっているのか

現在のメインのアーキテクチャは、Volta GPU。その1つ、「TESLA V100」は、データセンター向けのハイエンドなGPUであり、CUDA Coreが5000個以上も詰め込まれている。また、V100は80個のストリーミングマルチプロセッサを搭載。その1個のストリーミングマルチプロセッサには、64個のFP32演算用のCore、64個のint32演算用のCore、32個のFP64演算用のCore、8個のTensor Cor・・・うわぁぁっぁぁ。

とにかく、非常にたくさんの演算coreが搭載されている。

なぜこんな搭載してるのか。それは、ムーアの法則の終焉が見えているから。

CPUは、クロック周波数年率1.25倍の性能向上を果たしてきたが、2005年くらいから限界が見えてきた。CPUはマルチコア化により性能向上を維持してきたが、それでも最近は限界がみえていて、年率1.1%の性能向上と鈍化している。つまり、これからの性能向上は、別の方法が必要になっており、その別の方法の1つが多スレットの並列化GPU元から並列計算用に設計され、最適化されているので、今現在も年率1.5倍の性能向上を維持できている。

CPU vs GPU

「CPU vs GPU」の関係は、「レイテンシー vs スループット」の関係と一緒である。例として、空港までバイクとバスで移動することを考える。バイクは、1人あたりのデリバリーは速いが、30人の場合30往復する必要がある。一方、バスはバイクよりスピードが遅いが30人同時に運ぶことができる。

f:id:ishitonton:20181107231051p:plain

GPU⇔CPU間のデータ転送がボトルネックになる

GPU単体で計算できないので、CPUと組み合わせて利用する必要がある。GPUとCPUのメモリは物理的に分かれていて、IOバスで接続されている。GPUを利用する場合には、CPU側からGPU側にデータを転送する必要がある。

ここで、各コンポーネント間のデータ転送速度を見てみる。どこがボトルネックになるかがよくわかる。

  • GPUのメモリとGPUの演算コアの転送速度:900GB/秒
  • CPUとGPUの間の転送速度:32GB/秒。

GPUでパフォーマンスを出すためには、CPU⇔GPU間のデータ転送を必要最低限にする。また、この転送中に別の処理をオーバーラップさせる。こういったハードウェアをより効率的に利用するためにCUDAが準備されている。CUDAは、並列コンピューティングのための統合開発環境であり、これによりGPUとCPUを組み合わせたGPUコンピューティングを可能とする。

CUDAがあるととにかく嬉しい。コードを書く量が圧倒的に少なくて済む。

以上です。つかってみまーす。