Hot Chips 29 - NVIDIAの最強GPU「Volta」

Hot Chips 29 - NVIDIAの最強GPU「Volta」

  • マイナビニュース
  • 更新日:2017/09/15
No image

●NVIDIAが作った最強のGPU「Volta」

Hot Chips 29では、AMDのVegaに続いて、NVIDIAのVoltaが発表された。Voltaは、4月のNVIDIA主催のGTC(GPU Technology Conference)で、Jensen Huang CEOが基調講演の中で発表したが、主要な学会での詳しい発表は今回が初めてである。

Voltaチップは、815mm2に210億トランジスタを集積している。光による露光では最高の分解能であるArF液浸スキャナの露光面積は26mm×33mmであり、851mm2より大きいチップは分割しなければ作れない。26mm×33mm=858mm2なので、815mm2というのは、まだ余裕があると思うかもしれないが、X、Yそれぞれのサイズの制限があるので、実際にはこれ以上大きいチップは作れない露光限界という巨大チップである。また、AMDのVega10 GPUは486mm2であるので、その1.68倍という巨大さである。

半導体チップの値段は1枚の直径300mmのシリコンウェハから何個の良品がとれるかに依存する。したがって、チップ面積に逆比例してウェハ上に作れるチップの数が減少して製造コストが上がる。これに加えて、製造欠陥の密度×面積の指数関数で良品率が下がって行くので、さらにコストは上がる。

そのためVoltaチップの製造コストはVegaチップの数倍以上高いはずである。また、GPUチップとHBM2メモリを搭載するシリコンインタポーザもサイズが大きくなり、シリコンインタポーザのコストも上がる。

さらに、VegaはHBM2を2個使っているが、VoltaはHBM2を4個使っており、その分、コストが上がっている。

次の図は、Voltaチップ(正式名称はTesla V100)のブロックダイヤグラムであり、NVIDIAがSM(Streaming Multiprocessor)と呼ぶユニットが84個描かれている。この内の4個は不良SM救済のためのスペアであり、製品としては80SMが使用される。

各SMには64個のCUDAコア(FP32の積和演算を実行する)が含まれているので、チップ全体では5120CUDAコアということになる。また、Voltaでは、新たにTensorコアという行列同士の掛け算を効率よく実行するコアが、各SMに8個、チップ全体では640個存在する。

GPUのデバイスメモリは現在のPascal GPUと同様にHBM2を4個使っているが、メモリ容量は16GBに増え、メモリバンド幅も900GB/sに向上している。さらに、GPU同士、あるいはGPU-CPUを接続するNVLinkは、片方向25GB/sのリンクを6本に増強され、CPUや他のVoltaチップとの合計の接続バンド幅は300GB/sに増加している。

Volta V100チップと現在のPascal P100チップの性能を比較したのが、次の表である。

ディープラーニング(Deep Learning)の学習(Training)は、P100ではFP32で行うことになるので、その演算性能は10TFlopsであるが、V100ではTensor Coreが新設されており、これを使えば、120TFlopsの性能が得られ、P100と比べて12倍に性能が向上する。ディープラーニングの推論(Inferencing)では、P100では半精度(FP16)を使用すれば21TFlopsになるが、V100ではTensor Coreを使えば120TFlopsで、6倍の性能である。

V100の科学技術計算の単精度(FP32)、倍精度(FP64)性能は、P100の1.5倍のそれぞれ15TFlops、7.5TFlopsとなっている。このように、HPC性能は1.5倍であるが、ディープラーニング性能は6倍~12倍となっており、Voltaがディープラーニングに狙いを定めているのは明らかである。

HBM2のメモリバンド幅はP100の720GB/sからV100では900GB/sに向上している。なお、GoogleのTPU v2もHBM2を使っているが、600GB/sの性能しか出ていない。SamsungもSK HynixもHBM2のメモリバンド幅は256GB/sと言っているが、実際の使用状態でこの値を実現するのは難しいようである。

第2世代のNVLink(以下、NVLink IIと書く)のバンド幅は160GB/sから300GB/sと1.9倍に向上している。これはリンクのスピードが20Gbit/sから25Gbit/sに向上したのと、1チップから出ているリンク本数が4本から6本に増加したことの合わせ技である。

また、L1キャッシュの容量が1.3MBから10MBに、L2キャッシュが4MBから6MBに増加している。

半導体プロセスとしては、P100が16nm FinFET+であるのに対して、V100は12nm FFNプロセスで作られており、単純にはプロセスルールのシュリンク(12/16)2の面積に縮小できる計算であるが、チップサイズは610mm2から815mm2に増加している。つまり、チップの物量は2.37倍に増えているという計算になる。ただし、チップのトランジスタ数は153億から211億と1.38倍にしか増えておらず、12nmのプロセスへとシュリンクされたのであるが、トランジスタ数は1.38倍でトランジスタ密度はほどんど増加していない。

これらの数字から見ると、NVIDIAはAMDなどとの価格競争は眼中になく、大幅なコストアップをものともせず、最強のGPUを作ったという感じである。

●V100で進化したGPUの核となるSM

V100のNVLink IIは単にバンド幅が増加しているだけではない。CPUからはフラットな共通メモリアドレスですべてのエージェントにロード/ストア命令でアクセスできると書かれている。この機能の中身については発表ではほとんど触れられず、詳細は分からないが、CPUからはロードストア命令ですべてのGPUチップのデバイスメモリもアクセスできるようである。

なお、ここでCPUというのはNVLink IIをサポートしているCPUのことで、IBMのPOWER9 CPUのことを意味しており、IntelのXeonやAMDのEPYCではこの機能は使えない。

また、Read-Modify-Writeを不可分に実行するAtomic命令はメモリ側で処理するようになったと書かれている。これにより、Atomicアクセスの性能向上が期待できる。しかし、これもCPU側のメモリがその機能をサポートしないと使えない。

そして、CPU側のページテーブルを使ってGPUのメモリアクセスのアドレス変換を行えるというのは共通メモリアドレス空間を実現するうえで重要であるが、これもCPU側のサポートが必須である。

V100のNVLink IIは、先に書いたように25Gbit/sにスピードアップされ、V100チップから6リンクに増加しており、結果として約1.9倍のバンド幅になっている。そして重要なのは、CPUのキャッシュがGPUメモリのデータをキャッシュするという点である。

CPUは、GPUのデバイスメモリを自由にアクセスでき、そのデータがCPUのキャッシュに入ってコヒーレンシが維持できるようになると、CPUとGPUの連携という点では、速度が向上し、かなり便利になる。また、GPUはProbe Filterを持つと書かれており、CPUのキャッシュに入っている可能性のないデータへのGPUからのアクセスは、CPUキャッシュのスヌープを行わないようにしているムダなスヌープ動作を行わないようにしていると考えられる。

一方、逆方向のGPUによるCPUメモリのアクセスについては言及されておらず、GPU側ではCPUのメモリのデータをキャッシュするということは行われないようである。

電力制御に関しては、NVLink IIの負荷の軽い状態では、使用する信号線の本数を減らして、消費エネルギーを減らすとのことである。

NVIDIAのディープラーニングの開発システムである初代のDGX-1は8個のP100 GPUを4本のNVLinkで相互接続しているが、6リンクをもつV100 GPUを使うエンハンス版が発表された。接続されるGPUの数は8個で増えてはいないが、V100 GPU間を接続するNVLinkの本数が増えて、通信バンド幅が拡大している。

また、IBMのS822LCサーバは2個のPOWER8 CPUにそれぞれ2個のP100 GPUを接続しているが、米国の次期フラグシップスパコンであるSummitシステムでは、計算ノードは、2個のPOWRER9 CPUにそれぞれ3個のV100 GPUを接続した構成となることが発表された。

V100 GPUのSM(Streaming Multiprocessor)のブロック図は次の図のようになっており、4つのサブコアからなっている。サブコアそれぞれに命令のスケジューラを持っており、2つの命令スケジューラであったP100に比べて2倍の数のスケジューラとなっている。また、P100ではスケジューラは2個であるが、それぞれのスケジューラが、連続した2命令を発行する命令ディスパッチャを持つという構成になっていた。これが、V100では4つのスケジューラがそれぞれ1命令を発行するというすっきりした構成となった。

また、L1キャッシュは容量が増加し、速度も速くなっている。そして、行列積を効率よく計算できるTensor Coreの新設があり、全体としてP100のSMと比べて50%エネルギー効率が改善されているという。

L1命令キャッシュは4つのサブコアに命令を供給しており、クロック当たり4ワープの命令を読み出せる。そして、サブコアはクロック当たり1つのワープの命令を実行するというすっきりした構成となった。

L1 Dキャッシュとシェアードメモリは一体に作られて全体で128KBの容量となっている。そして128B/クロックという高いバンド幅をもっている。テクスチャユニットはクロック当たり4クワッドを処理することができる。

●V100は、Voltaアーキテクチャを使う最も生産性の高いGPU

サブコアは1つのワープスケジューラを持ち、ワープスケジューラは、毎サイクル、1命令をTensor Core、演算ユニット、あるいはMIO(Memory IO)のどれかに発行する。

ワープスケジューラは毎サイクル1ワープ命令の発行であるが、サブコアあたり2個のTensor Coreがあり、毎サイクル2つの4×4×4のテンソルの演算を行うことができる。また、FP64ユニットは8/clk、INTとFP32演算ユニットは16/clkとなっているので、FP64ユニットは4クロック同じ命令を実行し、INTとFP32演算ユニットは2クロック同じ命令を実行することで32スレッド分の演算を行っている。

このように、 1命令の処理に少なくとも2サイクルを必要とするので、Math Dispatch Unitは少なくとも2つの演算パイプラインをビジーにすることができる。

そして、従来SFUと呼ばれていたMUFUは4/clkであり、8クロック同じ命令を実行するようである。

L1キャッシュとシェアードメモリは一体の128KBのメモリとして作られており、分割して使う。32KBの粒度で分割を変えることができ、シェアードメモリの最大容量は96KBとなっている。

L1キャッシュの容量は、P100 GPUと比べるとバンド幅、容量ともに4倍になっており、さらにレーテンシも短縮されているとのことである。

Voltaではワープの実行の自由度が大きく広がった。Volta以前のGPUでは、ワープ全体で1つのプログラムカウンタ(PC)とスタックしか持っていなかったのに対して、Voltaでは下の図のように、ワープの中の各スレッドがPCとスタックの状態を持つようになった。

Volta以前のGPUでは、次のようなif() then{A;B;} else{X; Y;}という構文の場合、条件の成立したスレッドではAとBを実行してから、条件が成立しなかったスレッドでXとYが実行される。しかし、この実行法では、条件の成立しなかったスレッドのXの実行の結果を条件が成立したスレッドのBが待つというような処理になっている場合は、デッドロックになってしまう。

これに対して、A; B;が終わらなければ、X;の実行が始まらないというのではなく、どのような状況でもX;のフォワードプログレスが保証される実行ができれば、デッドロックに陥ってしまうことがない。

Voltaでは、ワープ内の各スレッドが異なるアドレスの命令を実行できるので、次の図のようにA; X; B; Y;の順に実行させることができる。このため、X;の処理結果をB;が待つという処理でも正しく実行することができる。

ただし、CPUのマルチスレッドのようにハードウェアレベルでフォワードプログレスを保証しているわけではないので、適切にスレッドをグループ化して、実行の順序を決める必要があり、その辺りはコンパイラが依存関係を解析して決めていると思われる。

V100 GPUはTensor Coreと呼ぶ新しい演算ユニットを搭載することで、ディープラーニングの演算性能を大幅に引き上げた。Tensor Coreは次の図のように4行4列の行列AとBを掛け、それに行列Cを足すという計算を行う。

行列の積には64回の積和演算が必要であり、さらに、行列Cの加算には16回の和が必要である。しかし、Cを最初にアキュムレータに入れておけば、行列の積とCの加算は128演算×640Tensor Core×1.455GHzで119.2TFlopsで実行できる。

より大きな16行16列の行列の積を計算する場合は、次の図のようにワープの同期を行ってから、4×4の行列を4×4に並べて積を計算すればよい。この計算は4×4の行列の積を64回計算する必要があるが、順番にやっていけば良い。これらの計算が終わったところで結果をすべてのワープに分配し、次の処理を始めればよい。

次の図はTensorコアを使って混合精度のcuBLASで行列積を計算した場合と、P100 GPUで行列積を計算した場合の性能を比較した棒グラフで、Tensorコアを使うことにより、性能は9.3倍に向上している。

この行列積は、ディープラーニングの人工ニューロンの入力に対する出力の計算に使われる処理であり、ディープラーニングの性能がおおむね9.3倍に向上するといっても良い。

まとめとして、V100は、Voltaアーキテクチャを使う最も生産性の高いGPUであり、NVLinkとHBM2の採用で効率の高いバンド幅を実現している。また、新しいSMで性能の改善とプログラマビリティの改善を実現している。特に、スレッドごとのスケジュールを可能とし、ワープ内のスレッド間で依存性のあるアルゴリズムも実行可能になっている。また、Tensorコアの導入でディープラーニングに対しては120TFlopsという画期的な性能向上を実現している。

そして、V100 GPUは、最速で、ディープラーニングとHPCの両方に対して最も生産性の高いGPUであると述べて発表を締めくくった。

この記事をお届けした
グノシーの最新ニュース情報を、

でも最新ニュース情報をお届けしています。

外部リンク

IT総合カテゴリの人気記事

グノシーで話題の記事を読もう!
【注意】iOS 11のコントロールセンターでは「Wi-Fi/Bluetooth」はオフにできないぞ
「生きているようなロボット」を実現する人工筋肉技術が開発。AI組み合わせ、身体制御を学習させる構想も
【本日のセール情報】Amazonタイムセールで90%以上オフも! スマホカメラ用望遠レンズやスマート体重計が登場
ソニーの完全ワイヤレスイヤフォンはAirPodsに対抗できる完成度
大きめディスプレイでスーツに映えるモトローラのスマートウォッチ『Moto 360』
  • このエントリーをはてなブックマークに追加