GTC 2017

【GTC 2017】NVIDIA、FP32で演算するCNNをINT8に変換して性能を2.5~3倍に引き上げるアルゴリズムを開発

「8-Bit Inference with TensorRT」。推論は同等の正確性

2017年5月8日~11日(現地時間) 開催

San Jose McEnery Convention Center

「8-Bit Inference with TensorRT」と題したセッションで説明を行なうNVIDIA CUDAライブラリソフトウェアエンジニア シズモン・ミガシズ氏

 NVIDIAは5月8日~11日(現地時間)の4日間にわたり、同社製品の開発者向けイベント「GPU Technology Conference 2017」(以下、GTC 2017)を、米国カリフォルニア州サンノゼ市にある「San Jose McEnery Convention Center」で開催している。

 GPU Technology Conferenceという名称から分かるように、同社が提供するGPUが、どのように使えるかを説明する場にもなっており、同社のGPUがAIの構築に必要なコンピューティングモデル“ディープラーニング”の学習や推論の演算に使われていることもあって、GTC 2017には多くのAI、自動運転などの開発を行なうエンジニアなどが参加している。

 初日となる5月8日に行なわれた「8-Bit Inference with TensorRT」というセッションでは、NVIDIAのPascal世代以降でサポートされたINT8(8bit幅の整数演算)を利用してディープラーニングの推論を行なうアルゴリズムの説明が行なわれた。

 このアルゴリズムを利用すると、AlexNet、VGG、GoogLeNet、ResNetなどのFP32(32ビット幅の浮動小数点演算)で演算するCNN(Convolutional Neural Networks)を活用して、INT8を利用した演算が可能になり、ディープラーニングの推論を正確性を維持したまま、数倍の性能で演算できるようになる。

Pascal以降のGPUに用意されているINT8をベースにした特殊な推論命令

 NVIDIA CUDAライブラリソフトウェアエンジニアのシズモン・ミガシズ氏は、「一般的にディープラーニングの推論に利用されるCNNはFP32で演算されている。それを、NVIDIAのPascal世代以降のGPUでサポートされているINT8に変換して演算することで、演算性能を引き上げることができる」と述べ、NVIDIAのPascal世代以降のGPUで採用されているINT8を活用することで、より高速にディープラーニングの推論が可能になり、システム全体の性能を引き上げることができると述べた。

 2016年のGTCで発表されたNVIDIAの現世代GPUアーキテクチャのPascalは、Tesla GP100、Quadro GP100、GeForce GTX TITAN XpなどのNVIDIA製品の多くに採用されている。このPascal世代のGPUの特徴の1つとして、INT8(8bitの整数演算)をベースにした特殊な推論命令を備えているということがある。これを利用することで、CPU(対Xeon E5-2690v4比)に比較して約45倍、従来のGPU(対Maxwell)に比べて約4倍という性能を実現できると昨年の段階でNVIDIAでは説明していた。 INT8で演算すると、FP32で演算する場合に比べて高いスループットでかつ低メモリレイテンシで演算することが可能になるからだ。

INT8を利用してCNNの推論を行なうにはPascal世代以降のGPUが必要になる

INT8変換で同じ正確性を維持したまま2.5~3倍の性能

 これまでこのINT8をどのように使うかに関してNVIDIAはあまり説明してこなかったのだが、GTC 2017でその技術的な概要を明らかにした。

TensorRTを利用してINT8で推論を行なう手順

 NVIDIAのミガシズ氏によれば、今回NVIDIAが開発したアルゴリズムを利用することでFP32を利用するようにプログラムされているCNN(AlexNet、VGG、GoogLeNet、ResNetなど)を利用した場合でもPascalのINT8を利用して推論を行なえるという。その変換には、NVIDIAが推論エンジンの開発キットとして用意されているTensorRT 2.1を利用する。

 ミガシズ氏によれば、CNNをINT8で実行するにはFP32で学習されたモデルとキャリブレーション用のデータセットを用意する。それを利用して、TensorRTがFP32からINT8への変換を行なう。

 具体的には、FP32においてキャリブレーションデータセットを利用した推論を行ない、その結果をもってキャリブレーションのアルゴリズムを走らせて、最適なスケーリングを得る。そして、それを利用してFP32からINT8の重み付けを量子化し、キャリブレーションテーブルを作り、INT8で実行するという仕組みになっているのだという。これらの変換は、TensorRTを利用して自動で行なわれる。

推論の正確性は同等

 ミガシズ氏によれば、このアルゴリズムでFP32をINT8に変換して実行したとしても、推論の正確性はほぼ変わりないか、むしろよいという結果になっているのだという。また、そのパフォーマンスでは、どのCNNを利用するかによるが、概ね2.5~3倍程度の結果がでるということだ。

性能の比較、GeForce TITAN X上でINT8とFP32で比較した場合、CNNなどにより違うが概ね2.5~5倍程度の性能がでている

 現状ではINT8で演算するCNNというのは存在していないと考えられるので、既存のFP32で演算するCNNを利用してINT8演算が行なえるのは大きなメリットとなる。一般的に使われているCNNをそのまま使い、TensorRTで簡単に変換するだけで性能が2.5~3倍程度になるという。そのため、あまり性能が高いGPUを搭載しづらいエッジ側(端末側、車載側)のSoCなどでこの手法を使えば、推論の性能を倍以上にできることになる。

 車載システムなどでディープラーニングの推論を利用して物体認識などを考えているメーカーなどには注目の発表と言えるのではないだろうか。

プレゼンテーションスライド

笠原一輝