メディア
特集
» 2018年09月20日 10時30分 公開

NVIDIAが語るVoltaとTuring、最新GPUはこう使おうGTC Japan 2018(3/4 ページ)

[松本貴志,EE Times Japan]

こうして使おうTensorコア

 それでは、VoltaとTuringに実装され、ディープラーニングなどで高い演算能力を提供するTensorコアを見ていく。成瀬氏は、Tensorコアについて「一言で言うと、行列のFMA(Fused Multiply Add:融合積和演算)」を実行する演算ユニットだと説明する。

Tensorコアの概要(クリックで拡大) 出典:NVIDIA

 4×4行列2つを入力として積を計算するとその演算量は64となり、さらに和を計算すると演算量は128となる。Tensorコアは、1個のユニットでこの128演算を1サイクルで実行できるスループットを持つ。VoltaからサポートされたTensorコアでは、FP16で入力された行列2つを乗算するが、ここでは32ビットに精度を拡張し実行する。その後、FP32の行列を加算している。この手法により精度が改善するため、「入力はFP16だが、得られる結果はFP32で計算した結果に近い」(成瀬氏)という。

Tensorコア計算の誤差をFP32とFP16で比較(クリックで拡大) 出典:NVIDIA
行列サイズが大きくなるにつれ、加算による誤差が蓄積する。Tensorコアはどの行列サイズにおいても、FP16よりもFP32からの相対誤差が減少している

 さらに、TuringではINT8入力もサポートしており、この場合は加算と出力をINT32で実行する。これにより、「推論で用いる場合などは全く問題なく計算できる。単純にFP16から2倍の性能向上が望める」(成瀬氏)とし、INT8モデルの用意も「FP32で学習済みのモデルを、われわれが提供するTensorRTによってINT8に落とし込む」(同氏)ことで調達できる。より高速に推論を実行する環境が、Turingの登場で整備しやすくなったといえる。

左:FP16入力でのTensorコア演算の流れ 右:INT8入力でのTensorコア演算の流れ(クリックで拡大) 出典:NVIDIA

 このように、Tensorコアは大きな行列積を高速に演算することに長けているが、NVIDIAが提供する密行列演算ライブラリ「cuBLAS」はTensorコアをサポートしている。このため、ユーザーはこのライブラリを適切に利用することで特別なコーディングが必要なくTensorコアを利用できるとする。

Tensorコアに対応するcuBLAS(クリックで拡大) 出典:NVIDIA

 また、大きな行列積は小さな行列積(サブ行列)の集合と見なすことができ、Tensorコアでは16×16サイズのサブ行列積をそれぞれのコアに割り当てている。CUDAにおいても、このサブ行列を取り扱うAPI「WMMA API」が用意されており、サブ行列(CUDAではfragment)の演算を実行することができる。WMMA APIは、CUDA 9.0から提供され、FP16とINT8(TuringとCUDA10の組み合わせた場合のみ)に対応している。

左:行列積のイメージ 右:WMMA APIの使用例(クリックで拡大) 出典:NVIDIA

 TuringのTensorコアでは、INT8をサポートしたためピーク性能は250TOPSに到達。また、試験用としてINT4とINT1もサポートし、INT4の場合には500TOPSを発揮する。Tensorコアの拡張で、量子化が進みつつあるニューラルネットワークにも対応する構えだ。

VoltaとTuringのTensorコア性能比較(クリックで拡大) 出典:NVIDIA

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.