後藤弘茂のWeekly海外ニュース

NVIDIAのAmpereで対応した新技術「プルーニング」

ディープラーニングプロセッサの技術トレンドが

 NVIDIAは新GPUアーキテクチャ「Ampere」に、ディープラーニングのインファレンス(推論)の性能を2倍にする機構を取り入れた。「プルーニング(Pruning:刈り込み)」にハードウェアで対応することで、搭載するマトリックス演算ユニットの2倍のインファレンス性能を達成する。

 プルーニングは、ディープラーニングのニューラルネットワークを圧縮する技術の1つで、パラメータ数を減らした「スパース(Sparse:疎)ネットワーク」を作る。Ampereでは、スパースネットワークにハードウェアで対応することで、演算ユニット数や電力に対して、インファレンスの性能が倍に上がった。

プルーニングの仕組み

 プロセッサの進化では、演算ユニット数やクロック周波数などに目が行きがちだが、ディープラーニングの場合は違った視点から見る必要がある。それは、ディープラーニングのプロセッシングには、アーキテクチャレベルで高速化する余地がまだかなり多く残されているためだ。アーキテクチャ上の工夫によって、性能が比較できる点が、ディープラーニングプロセッシングと、通常のプロセッシングとの大きな違いだ。

 ディープラーニングプロセッサは、プルーニングなどのソフトウェアとハードウェアの協調した設計によるモデル圧縮を実装した段階に入って、ようやく原人レベルになったという声もある。下は、2018年のプロセッサ学会Hot Chipsのチュートリアルのスライドだ。NVIDIA GPUは、Ampereでスライドの緑の原人部分に到達したことになる。

 2018年のプロセッサ学会Hot Chipsのチュートリアル「Accelerating Inference at the Edge」(S. Han, Hot Chips 2018)のスライド。スライド上ではAmpereが原人、Voltaが猿人となる。

 NVIDIAがGTC(GPU Technology Conference)の基調講演で示したスパースネットワーク対応のスライド。このスライドのなかのテンサーコアの8x4x4の図はTF32時のもので、実際には、AmpereのテンサーコアはFP16時では下の図のように8x8x4に拡張されている。

Ampereのテンサーコアアーキテクチャ
PDF版はこちら
NVIDIAのAmpereでのプルーニング対応

アーキテクチャで性能を飛躍させることができるディープラーニング

 通常、チップの性能を引き上げるには、演算ユニットなどの数を増やすか、動作クロックを引き上げる。最先端CPUの場合は、アーキテクチャの拡張でシングルスレッドパフォーマンスを引き上げることができる幅がかぎられている。データ並列にしても、演算ユニット分しか性能は上がらない。

 しかし、ディープラーニングでは話が違う。ディープラーニングのプロセッシングには、アーキテクチャレベルで高速化する余地が豊富に残されている。単純に、プロセッサの演算ユニットを増やしたり動作クロックを引き上げるだけでなく、アーキテクチャによる工夫でディープラーニング性能を飛躍的に伸ばすことが可能だ。かつて、CPUがアーキテクチャの拡張でガンガン性能を伸ばしていた時代や、GPUがシェーダプロセッサ化で機能を大幅に刷新した時代と、同じようなフェイズにディープラーニングプロセッサはいる。

 ディープラーニングのアーキテクチャ上の技法のなかでも、現在、焦点となっているのが、上の原人のスライドにあるハードウェアとソフトウェアの協調によるネットワークモデルの圧縮技術だ。

 ディープラーニングの学習済みモデル(Pre-trained model)を圧縮すると、データ量と演算量が減る。インファレンスの精度を落とさずに圧縮することができれば、同じ精度のディープラーニング処理を、はるかに少ないメモリ量と演算量、消費電力で達成することができる。そのため、ディープラーニングプロセッサでは、現在、ネットワークモデルの圧縮技術へのハードウェア対応が大きな焦点となっている。なかでももっとも重要な圧縮技術が、NVIDIAがAmpereに搭載した、プルーニングによるスパースネットワークへの対応だ。

 プルーニングでは、ディープラーニングのニューラルネットワークのパラメータを刈り込むことで、パラメータの数自体を減らす。同じディープラーニング処理を、より少ないパラメータでできるようにする。アーキテクチャレベルでディープラーニングのパフォーマンスを飛躍させる、これからのディープラーニングプロセッサでは最重要な技術の1つだ。

 スパースネットワークは、そう遠くない将来に、インファレンスのためのネットワークモデル最適化技術として標準的なものとなり、ハードウェアの対応も当たり前になる可能性が高い。NVIDIAは、Ampereアーキテクチャでのプルーニング対応の技術概要を明らかにしているが、その実装は、NVIDIAだけでなく、今後の汎用型のプロセッサでのプルーニングへの対応の方向を示している可能性が高い。

 NVIDIAのAmpereのスパースネットワーク対応を知るには、まず、その背景にある、ネットワークモデル圧縮技術の研究の流れを知る必要がある。

ニューラルネットワークのプルーニングによってスパースネットワークを作る仕組み
PDF版はこちら

そもそもなぜネットワークモデルの圧縮が重要なのか

 ニューラルネットワークのインファレンス処理では、高速かつ低レイテンシに、ネットワークサイズや消費電力を抑えながら、推論の精度を保つことが重要な課題となっている。そのための、学習済みモデルの圧縮技術は、どんどん重要になっている。なぜなら、ニューラルネットワークのプリトレインドモデル(学習済みモデル:Pre-trained model)が、急送に肥大化しているためだ。

 ニューラルネットワークは進化して精度を上げるにつれて、ネットワークモデルのサイズが巨大化する傾向がある。現在のディープラーニングブームのスタートとなったのは、2012年のAlexNet。AlexNetは、8層のCNN(Convolutional Neural Network)と現在の基準では小さなネットワークモデルで、必要とするメモリ量もコンピュテーションも小さかった。だが、後続のCNN系モデルは、精度が上がるにつれて、モデルのサイズが大型化を続けて来た。

NVIDIAが示すニューラルネットワークモデルのサイズの大型化
CNN系のモデルの比較。縦軸が精度、横軸がコンピュテーション量。「An Analysis of Deep Neural Network Models for Practical Applications」(A. Canziani, et al., 2017)

 モデルの肥大化の傾向をさらにドライブしたのは、CNN以外のネットワークタイプが興隆したことだ。自然言語処理(NLP:Natural Language Processing)分野では、新しい画期的なニューラルネットワーク構造である「Transformer」が2017年に発表された。そして、2018年にTransformerを使った「BERT(Bidirectional Encoder Representations from Transformers)」モデルが登場して以降、NLPモデルのバーが上がった。

 NLP系モデルでは、昨年(2019年)にNVIDIAが8.3B(83億)パラメータの「MegatronLM」を発表、今年(2020年)にMicrosoftが17B(170億)パラメータの「T-NLG」を発表した。極めつけは、非営利団体のOpenAIから5月に発表されたばかりの「GPT-3」で、パラメータ数はなんと175B(1,750億)。NLPモデルでは、小型軽量化モデルの研究発表もあるが、巨大化のトレンドが目立つ。

NLP(Natural Language Processing:自然言語処理)におけるコンピュテーション量の増大。Megatron-LMとT-NLGでさらに跳ね上がっている。メガトロンは、トランスフォーマ(アニメ、コミック、映画、玩具)に登場する最大サイズの機械生命体「Megatron-LM_Training Multi-Billion Parameter Language Models Using Model Parallelism」(R. Puri, et al., GTC 2020)

ハードウェアリソースを軽くする必要

 ディープラーニングのネットワークモデルについては、このように全般的に巨大化の方向にある。今後、新しい分野のニューラルネットワークアルゴリズムで革新があるたびに、巨大化する可能性もある。こうしたモデルの肥大化状況にあり、インファレンス時には、ネットワークモデルのサイズや演算量の圧縮の技術が求められて来ている。

 インファレンスは、端末デバイスやエッジデバイスで処理する場合もある。その場合は、ハードウェアリソースがかぎられているため、学習済みモデルを走らせるのに必要なメモリ量や演算量の低減が重要となる。モデルを圧縮すれば、メモリ量や演算量が減り、ハードウェアを軽くすることができ、消費電力も下がり、短レイテンシの応答も容易になり、ユーザー体験が向上する。

 クラウド側で処理すれば、モデルが大きい場合も対応が容易だが、その場合は、ネットワーク遅延やユーザープライバシーの問題がある。また、クラウド側でも、処理件数が多いと電力消費が大きくなり、ハードウェアが大きくなるとラックスペースも必要になる。

 そのため、インファレンスでは、モデルを小さく圧縮することで、少ないリソースでも実行が可能で、処理のレイテンシが短く、電力やスペースを食わないようにすることが重要になりつつある。Transformerのように、モデルのアーキテクチャの進化が激しい段階では、圧縮技術の適用がなかなか難しいが、CNNのようにある程度こなれてくると、モデル圧縮が重要なテーマの段階に入る。

クラウド側でインファレンスを走らせる場合の問題。NVIDIAが主催するGPUコンピューティングカンファレンスGTC(GPU Technology Conference) 2016で行なわれたDeep Compressionのセッション「S6561 Deep Compression and EIE: ——Deep Neural Network Model Compression and Efficient Inference Engine」(S. Han, Stanford University, GTC 2016)のスライド
問題はプリトレインドネットワークモデルのサイズにあるため、それを圧縮する
圧縮技術を実装したディープラーニングアクセラレータによってレイテンシや電力などの課題をクリアする

NVIDIAのDally氏が主導した研究「Deep Compression」

 ニューラルネットワークのモデル圧縮技術では、いくつか有名な論文がある。ICLR 2016(International Conference on Learning Representations)で発表された論文「Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding」(S. Han, et al., ICLR 2016)がよく知られている。

 ICLRは人工知能のなかでディープラーニングにフォーカスして作られた学会で、新興だが注目度が非常に高い。そのICLRで発表された、Deep Compressionの論文は、米スタンフォード大学(Stanford University)と、NVIDIA、中国Tsinghua Universityによるものだ。NVIDIAのリサーチ部門を統括するBill Dally(ビル・ダリー)氏(William J. Dally, Chief Scientist and SVP of Research, NVIDIA/Professor(Research)が主導している。

 「ディープ圧縮(Deep Compression)」と名づけられたこの研究のアプローチでは、「プルーニング(Pruning)」と「量子化(Quantization)」、「ウェイトシェアリング(Weight Sharing:重み共有)」、「ハフマン符号化(Huffman Coding)」を組み合わせて、モデルサイズを劇的に圧縮する。

 プルーニングでは重要度の低いパラメータを削り、不要になったノードを削ることでネットワーク自体をスパースにしてデータと演算の量を減らす。量子化ではウェイト(重み)やアクティベイションなどのパラメータのデータ精度を落とす(たとえば32-bitを4-bitに)ことでデータ量を減らし、演算並列度を上げる。ウェイトシェアリングではウェイトパラメータを共有することでパラメータ数を減らす。最後にロスレス圧縮のハフマン符号化でデータ圧縮をする。

ウェイトの量子化によってデータ量を減らす
ニューラルネットワークの量子化
PDF版はこちら
Bill Dally氏(William J. Dally, Chief Scientist and SVP of Research, NVIDIA)

 論文によると、Deep Compressionによって認識精度の劣化なしで、モデルサイズを最大で50分の1にまで縮小できるという。たとえば、8層のCNNであるAlexNetなら、オリジナルのモデルサイズ240MBが、最大で6.9MBと、35倍の圧縮率で縮小できるとレポートされている。16層のVGG-16なら552MBから11.3MBと、49倍の圧縮率だ。プルーニング(刈り込み)で約10倍の圧縮、それに量子化などを加えて27~31倍の圧縮、ハフマン符号化を加えて最終的に35~50倍の圧縮をCNNで実現するという。

GTC 2016で発表されたDeep Compressionによるモデル圧縮の例.「S6561 Deep Compression and EIE: ——Deep Neural Network Model Compression and Efficient Inference Engine」(S. Han, Stanford University, GTC 2016)
AlexNetにおけるDeep Compressionでの圧縮率と精度ロスの関係。量子化だけだとビット数を落とすと急激に落ちるが、プルーニングを組み合わせると数10倍の圧縮でも精度が落ちない
Deep Compressionのトレーニングパイプラインは、プルーニングから量子化、ハフマン符号化と3段階で構成される

 AlexNetやVGG-16といった、一般的なCNNモデルなら、Deep Compressionによってディープラーニングプロセッサのオンチップメモリに収まるサイズにモデルサイズを縮小できることになる。オフチップのDRAMにモデルを載せなくて済むため、メモリアクセスの電力やレイテンシの無駄がなくなる。

 また、プロセッサの設計によっては、プルーニングで削減された分だけ、コンピュテーションの量も減るので、演算の電力やレイテンシも減る。つまり、通常の画像認識なら、外付けDRAMを使わない、ワンチップのディープラーニングプロセッサを作ることも可能になる。

先駆的なスタンフォード大学のEIEプロセッサ

 米スタンフォード大学では、このアプローチを実証するために、Deep Compressionへの対応ハードウェアを実装したディープラーニングアクセラレータのリサーチチップ「EIE(Efficient Inference Engine)」も開発した。Deep Compressionで高比率で圧縮しても、圧縮したパラメータをソフトウェアで展開して実行するのでは、実行時にレイテンシが生じ、電力もセーブできず、意味がなくなってしまう。Deep Compression圧縮をそのまま、あるいは展開して実行できるハードウェアの仕組みを作らなければならない。そのための実証チップがEIEだ。

 EIEの概要は、コンピュータアーキテクチャの学会ISCA (International Symposium on Computer Architecture)で発表された。(「EIE: Efficient Inference Engine on Compressed Deep Neural Network」(S. Han, et al., ISCA 2016))。EIEでは、プルーニングされたスパースネットワークをそのまま扱うことが可能で、メモリ上だけでなく演算もスパースで行なう。量子化したパラメータに対応した演算ハードウェアで、ハフマン圧縮もハードウェアで展開する。

 EIEは、発表されたあと、モデル圧縮技術のリファレンス的な位置づけとなり、圧縮技術を実装したディープラーニングアクセラレータの論文が出ると、必ず比較対象としてEIEが引用されている。EIEで実証された、Deep Compressionの最大50倍という圧縮率は、インパクトが強く、非常に注目を集めたことがわかる。

Deep Compression技術を実装したディープラーニングアクセラレータのリサーチチップ「EIE(Efficient Inference Engine)」のアーキテクチャ。「EIE: Efficient Inference Engine on Compressed Deep Neural Network」(S. Han, et al., ISCA 2016)
EIEのダイレイアウト。TSMCの45nmプロセスのバージョンで、1DのMACアレイで64プロセッサエレメント。中央の正方形が演算ユニット群。面積の多くはメモリが占めている
EIEでは、ウェイトパラメータは4-bitでストアされており16-bit整数に展開されて演算ユニットに送られる
組み込み用途を意識したEIEアーキテクチャ

ディープラーニングの圧縮技術の研究では先頭を行くNVIDIA

 ここまでの話を、業界ベースの話としてまとめると、次のようになる。NVIDIAがAmpereアーキテクチャでスパースネットワーク対応を実装する前から、ネットワークモデルの圧縮技術は盛んに研究されていた。そして、圧縮技術のハードウェア化の研究をリードしていた1人は、ほかでもないNVIDIAの研究を統括するDally氏だった。Dally氏のDeep Compressionの要と言える技術が、プルーニングによるスパースネットワークだった。NVIDIAは、プルーニング対応技術を深く理解した上で、同社の商用製品であるGPU側にもその技術を持ち込んできた、という流れだ。

 実際には、NVIDIAは、Ampereの前にプルーニング対応技術を商用チップに実装している。NVIDIAのオープンソースのディープラーニングアクセラレータコア「NVDLA(NVIDIA Deep Learning Accelerator)」で、ウェイトパラメータの圧縮技術がハードウェアで実装されている。NVDLAは、NVIDIAの組み込み向けSoCである「Xavier」に、Volta GPUコアと一緒に搭載されている。省電力性を求める場合はNVDLAで走らせるという位置づけだった。

NVIDIAのXavier SOC

 Ampereのプルーニング対応は、汎用プロセッサであるGPUへの実装に最適化されており、これまでの流れとは異なる。実装方法は、プルーニングについて重ねて来た研究の成果となっている。