FastFormersの紙の解釈:CPUでのTransformerの推論速度を233倍にすることができます



Fastformers Paper Interpretation



Transformersの誕生以来、BERTは密接にフォローされてきました。質問応答、感情分析、テキスト分類、テキスト生成など、ほとんどすべての言語関連のタスクで、NLPが支配的な位置を占めています。 RNNとLSTMの勾配消失問題(長いデータシーケンスの学習に影響を与えない)とは異なり、Transformersはこれらすべてのタスクでより正確です。 RNNとLSTMは、以前のニューロンの出力を考慮する必要があるため、スケーラブルではありません。



さて、「トランスフォーマー」の主な問題は、トレーニングと推論の観点から多くの計算が必要になることです。トレーニングの部分は、事前にトレーニングされた言語モデル(Google、Facebook、OpenAI Largeなどの大企業がオープンソース)を使用し、データセットを微調整することで解決できますが、このソリューションは完全ではありません。現在、後者の問題はFastFormersによって解決できます。これは、さまざまなNLUタスクでTransformersベースのモデルの効率的な推論時間パフォーマンスを実現できる一連の式です。

'これらの提案されたスキームをSuperGLUEベンチマークに適用すると、既製のCPUモデルと比較して9.8倍から233.9倍の加速を達成できます。 GPUでは、導入された方法により、最大12.4倍の加速を実現することもできます。 -FastFormers



定説 FastFormers:自然言語理解のための非常に効率的なTransformerモデル (Arxiv.org/2010.13382)は主に、大規模な本番シナリオで展開できるTransformerモデルの効率的な推論を提供することに焦点を当てています。著者は、時間効率の推論に特別な注意を払っています。これは、主に本番展開のコストを支配するためです。この記事では、この記事で取り上げたすべての問題と課題を紹介します。

では、彼らはどのようにして過度の推論時間の問題を解決するのでしょうか?

それらは主に、知識蒸留、構造化剪定、モデル定量化の3つの方法を使用します。

最初のステップは知識の蒸留です。これにより、精度に影響を与えることなく、モデルの深さと隠れた状態のサイズを減らすことができます。



第二に、構造化された剪定は、精度を維持するよう努めながら、自己集束ヘッドの数を減らすことによってモデルのサイズを減らすことができます。

最後に、モデルの量子化は、ハードウェアアクセラレーションを最大限に活用することで、モデルの実行を高速化できます。 CPUでは、8ビット整数量子化法が使用されますが、GPUでは、すべてのモデルパラメーターが16ビット浮動小数点データ型に変換され、効果的なTensorCoreを最大限に活用します。

詳細な調査

知識の蒸留:知識の蒸留とは、訓練されたより大きなネットワークをどうするか、正確には、より小さなネットワークを徐々に教えることによるモデル圧縮のアイデアを指します。大きなモデルは小さなモデルよりも高い知識能力を持っていますが、この能力は十分に活用されていない可能性があります。モデルがほとんど知識を使用しない場合でも、評価モデルは計算コストが高くなる可能性があります。知識の蒸留は、効果を失うことなく、知識を大きなモデルから小さなモデルに移します。小型モデルの評価コストが低いため、より弱いハードウェア(スマートフォンなど)に展開できます。

知識蒸留法:特に、タスク固有の蒸留とタスクに依存しない蒸留の2つの方法が使用されます。

特定のタスクの蒸留では、著者はTinyBERTによって提案された手順に従って、微調整された教師モデルを、タスクに関係のない蒸留方法でより小さな学生アーキテクチャに改良します。著者は、従来の方法に直接微調整を適用します。特定のタスクを対象とする蒸留モデル調整。

知識蒸留の結果:実験で、著者は、蒸留が他のモデルタイプである場合、蒸留モデルがうまく機能しないことを観察しました。したがって、著者は、RobertaモデルをBERTに蒸留したり、その逆を行ったりしないように設定を制限しました。次の表では、検証データセットの教師モデルがタスクの知識抽出結果を要約しています。 (学生はそれを蒸留モデルと呼んでいます)

ニューラルネットワークの剪定:ニューラルネットワークの剪定は、トレーニングされたモデルから重みを取り除くことを含む圧縮方法です。農業では、剪定は不必要な植物の枝や茎を切り落とします。機械学習では、剪定によって不要なニューロンや重みを排除できます。ニューラルネットワークプルーニングテクノロジーは、精度に影響を与えることなく、トレーニングされたネットワークのパラメーターの数を90%以上削減し、ストレージ要件を削減し、推論の計算パフォーマンスを向上させることができます。これは、トレーニングされたニューラルネットワークのサイズまたはエネルギー消費を削減し、推論の効率を向上させるのに役立ちます。プルーニングにより、ネットワークがより効率的かつ軽量になります。

構造化プルーニング法:構造化プルーニング法の最初のステップは、「マルチヘッドアテンション」で最も重要度の低いヘッドとフィードフォワード層で最も重要度の低い非表示状態を特定することです。

  • 振幅ベースの剪定ではなく、ある程度の情報を使用する重要度スコアを計算するための1次方法。
  • 重要度スコアを計算する前に、作成者は各注意ヘッドにマスク変数を追加して、ヘッドの勾配を計算します。次に、作成者は検証データセット全体でモデルを前後にトラバースし、勾配の絶対値を累積します。これらの累積値は、重要度スコアとして使用され、頭と中間の隠れた状態の重要度を分類するために使用されます。
  • ターゲットモデルのサイズに応じて、作成者はネットワークから指定された数のトップヘッドとトップ非表示状態を選択します。並べ替えと選択の手順を完了した後、作成者は残りのヘッドと非表示の状態を再グループ化して再接続し、モデルを小さくします。頭と非表示の状態をトリミングする場合、作成者は異なるレイヤーで同じトリミングレートを使用します。これにより、さらに最適化して、プルーニングされたモデルとシームレスに連携できます。
  • 実験では、著者は、剪定されたモデルが知識蒸留の次のラウンドの後に高い精度を得ることができることを発見しました。したがって、知識蒸留がモデルに再度適用されます。

モデルの量子化:量子化とは、計算を実行し、浮動小数点精度よりも低いビット幅でテンソルを格納するために使用される手法を指します。量子化モデルは、浮動小数点値の代わりに整数を使用してテンソルに対して一部またはすべての演算を実行します。これにより、よりコンパクトなモデル表現と、多くのハードウェアプラットフォームでの高性能のベクトル化された操作の使用が可能になります。

CPUでの8ビットの量子化行列の乗算:32ビットの浮動小数点演算と比較して、8ビットの量子化行列の乗算は、CPU命令の数が減ったため、大幅に高速化されます。

GPU 16ビットモデル変換:V100 GPUは、Transformerアーキテクチャの完全な16ビット操作をサポートします。同様に、値の範囲が狭いことに加えて、16ビット浮動小数点演算は入出力に特別な処理を必要としません。 Transformerモデルはメモリ帯域幅によって制限されるため、この16ビットモデル変換により速度が大幅に向上します。モデルの設定にもよりますが、約3.53倍のスピードアップが見られました。

アプリケーションの構造と数値の最適化に加えて、著者は計算をさらに最適化するためにさまざまな方法、特にマルチプロセッシングの最適化と計算グラフの最適化も使用しています。

包括的な結果

次の表は、次の結果の有効性を示しています

この記事では、著者はFastFormersを紹介します。これは、さまざまなNLUタスクでTransformerベースのモデルに効果的な推論時間のパフォーマンスを提供できます。 FastFormersの論文の著者は、知識の抽出、構造化された剪定、および数値の最適化を使用すると、推論の効率を大幅に向上できることを示しています。これらの改善は最大200倍に増加し、計算量を22倍節約して、200倍以上の推論コスト削減を達成できることを証明します。

最後にFastFormersのソースコード:https://github.com/microsoft/fastformers

著者:Parth Chokhra

ディープハブ翻訳チーム