ホームページ テクノロジー周辺機器 AI 大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

May 07, 2023 pm 09:16 PM
モデル 電車 ビジョン

皆さん、こんにちは。NVIDIA GPU コンピューティング エキスパート チームの Tao Li です。今日は、同僚の Chen Yu と私が Swin Transformer で行ったことを皆さんと共有する機会を得ることができて、とても嬉しく思います。ビジュアル モデル: 型トレーニングと推論の最適化に取り組んでいる人もいます。これらの方法と戦略の一部は、他のモデルのトレーニングや推論の最適化に使用して、モデルのスループットを向上させ、GPU の使用効率を向上させ、モデルの反復を高速化することができます。

#Swin Transformer モデルのトレーニング部分の最適化について紹介します。推論最適化部分の作業については同僚によって詳細に紹介されます

#本日共有したディレクトリは主に4つの部分に分かれており、特定のモデルに最適化されているため、まず、Swin Transformer モデルについて簡単に紹介します。次に、プロファイリング ツール、つまり nsight システムを組み合わせて、トレーニング プロセスを分析し、最適化します。推論の部分では、同僚が、より詳細な CUDA レベルの最適化を含む、推論の最適化のための戦略と方法を提供します。最後に、本日の最適化内容をまとめます。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

#まずは前編、Swin Transformer の紹介です。

1. Swin Transformer の紹介

名前からわかるように、モデル、これはトランスをベースにしたモデルです。最初にトランスについて簡単に説明します。

記事で Transformer モデルが提案されて以来、必要なのは注目だけであり、自然言語処理の分野の多くのタスクにそのモデルが当てられてきました。

Transformer モデルの中核は、いわゆるアテンション メカニズム、つまりアテンション メカニズムです。アテンション モジュールの場合、通常の入力はクエリ、キー、値テンソルです。クエリとキーの機能とソフトマックスの計算により、通常アテンション マップと呼ばれるアテンション結果を取得できます。アテンション マップの値に従って、モデルは値のどの領域にもっと注意を払う必要があるかを学習できます。モデルは、値のどの値が私たちのタスクに非常に役立つかを学習できると言われています。これは最も基本的な単頭注意モデルです。

このような単一ヘッド アテンション モジュールの数を増やすことで、共通のマルチヘッド アテンション モジュールを形成できます。一般的なエンコーダとデコーダは、このようなマルチヘッド アテンション モジュールに基づいて構築されます。

多くのモデルには、通常、自己注意と交差注意、または 1 つ以上のモジュールのスタックという 2 種類の注意モジュールが含まれています。たとえば、有名な BERT は複数のエンコーダ モジュールで構成されており、一般的な拡散モデルには通常、セルフ アテンションとクロス アテンションの両方が含まれています。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

Swin Transformer の前に、Vision Transformer (ViT) が初めてトランスフォーマーをコンピュータ ビジョンの分野に適用しました。 ViT のモデル構造は下図の左側に示されています. ViT は画像を一連のパッチに分割します. 各パッチは自然言語処理におけるトークンに似ており, 次にこの一連のパッチを Transformer を通じてエンコードします.ベースのエンコーダを作成し、最終的に分類などのタスクに使用できる特徴を取得します。

Swin Transformer では、ウィンドウ アテンションの概念が導入されています。画像全体に注意を払う ViT とは異なり、Swin Transformer は最初に画像を分割します。複数のウィンドウを分割し、ウィンドウ内のパッチのみに注目することで計算量を削減します。

ウィンドウによって引き起こされる境界問題を補うために、Swin Transformer はさらにウィンドウ シフト操作を導入します。同時に、モデルに豊富な位置情報を持たせるために、相対位置バイアスも考慮して導入されます。実は、ここでのウィンドウ アテンションとウィンドウ シフトが、Swin Transformer の Swin という名前の由来になっています。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

ここで示すのは Swin Transformer のネットワーク構造です。大まかなネットワーク構造は従来の CNN とよく似ています。 ResNet と同様です。

ネットワーク構造全体が複数のステージに分割されており、さまざまなステージの途中で、対応するダウンサンプリング プロセスが存在することがわかります。各ステージの解像度は異なるため、解像度ピラ​​ミッドが形成され、各ステージの計算の複雑さも徐々に軽減されます。

# 次に、各ステージにいくつかの変圧器ブロックがあります。各変圧器ブロックでは、前述のウィンドウ アテンション モジュールが使用されます。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

#次に、具体的な操作の観点から Swin Transformer を分解していきます。

ご覧のとおり、Transformer ブロックには 3 つの部分が含まれており、最初の部分はウィンドウのシフト/分割/反転などのウィンドウ関連の操作であり、2 番目の部分はウィンドウ関連の操作です。部分はアテンションの計算で、3 番目の部分は FFN 計算です。アテンションと FFN の部分はさらにいくつかの演算に細分化でき、最終的にはモデル全体を数十の演算の組み合わせに細分化できます。

# このような演算子の分割は、パフォーマンス分析を実施し、パフォーマンスのボトルネックを特定し、高速化の最適化を実行するために非常に重要です。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

#以上が前編の紹介です。次に、トレーニングで行った最適化作業の一部を紹介します。特に、プロファイリング ツール、つまり nsight システムを組み合わせて、トレーニング プロセス全体を分析し、最適化します。

2. Swin Transformer トレーニングの最適化

大規模向けモデルのトレーニングには、通常、マルチカードおよびマルチノードのコンピューティング リソースが使用されます。 Swin Transformer の場合、カード間通信のオーバーヘッドが比較的小さいことがわかり、カード枚数が増加するにつれて全体の速度がほぼ直線的に向上するため、ここでは単一の GPU での計算ボトルネックの分析を優先します。最適化。

nsight system は、システムレベルのパフォーマンス分析ツールです。このツールを通じて、モデルの各モジュールの GPU 使用状況を簡単に確認できます。潜在的なパフォーマンスのボトルネックやデータ待機などの最適化スペースにより、CPU と GPU 間の負荷を合理的に計画することが容易になります。

nsight システムは、CUDA および cublas、cudnn、tensorRT などの一部の GPU コンピューティング ライブラリによって呼び出されるカーネル関数の呼び出しおよび実行ステータスをキャプチャできます。ユーザーがいくつかのマークを追加して、マーク範囲内の対応する GPU の動作をカウントするのに便利です。

標準的なモデル最適化プロセスを次の図に示します。モデルをプロファイリングし、パフォーマンス分析レポートを取得し、パフォーマンスの最適化ポイントを発見して、それらをターゲットにします。パフォーマンスチューニングを行うためです。

これは nsight システムのインターフェイスです。カーネル関数の起動 (カーネルの起動)、カーネル関数の実行 (ランタイム部分) がはっきりとわかります。特定のカーネル関数については、プロセス全体における時間の割合、GPU がアイドル状態かどうかなどの情報を確認できます。 nvtx タグを追加すると、モデルが前進および後退するのにかかる時間を確認できます。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

前の部分でズームインすると、各 SwinTransformer ブロックの特定の計算ニーズも明確にわかります。時間。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

最初に、nsight システム パフォーマンス分析ツールを使用して、ベースライン全体のパフォーマンスを調べます (図を参照)。下の図 FP32 のベースラインから、GPU 使用率が非常に高く、行列乗算カーネルが最も高い割合を占めていることがわかります。

#したがって、行列乗算の最適化方法の 1 つは、加速のためにテンソル コアを最大限に活用することです。

NVIDIA の GPU には、行列乗算を高速化するために特別に設計されたモジュールである cuda コアや tensor コアなどのハードウェア リソースがあることが知られています。 tf32 tensor コアを直接使用するか、混合精度で fp16 tensor コアを使用することを検討できます。 fp16 を使用した tensor コアの行列乗算のスループットは tf32 のスループットよりも高く、純粋な fp32 の行列乗算にも高い加速効果があることがわかります。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

#ここでは、混合精度ソリューションを採用します。 torch.cuda.amp の混合精度モードを使用すると、1.63 倍のスループット向上を達成できます。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

プロファイリング結果からも、元々最大の数値を占めていた行列の乗算が、が最適化されたため、タイムライン全体に占める割合は 11.9% に低下しました。これまでのところ、比較的高い割合を占めるカーネルは要素ごとのカーネルです。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

#要素ごとのカーネルの場合、まず要素ごとのカーネルがどこで使用されるかを理解する必要があります。

Elementwise カーネルでは、より一般的な展開された要素ごとのカーネルとベクトル化された要素ごとのカーネルです。その中でも、アンロールされた要素ごとのカーネルは、一部のバイアスをかけた畳み込みや線形層、さらにはメモリ内のデータの連続性を保証する一部の演算で広く見られます。

ベクトル化された要素ごとのカーネルは、ReLU などの一部の活性化関数の計算によく登場します。ここで多数の要素ごとのカーネルを削減したい場合、一般的なアプローチは演算子の融合を実行することです。たとえば、行列の乗算では、要素ごとの演算を行列乗算の演算子と融合することで、この部分の時間オーバーヘッドを削減できます。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

一般的に、演算子融合には次の 2 つの利点があります。

1 つは、カーネルの起動コストを削減することです。下の図に示すように、2 つの cuda カーネルを実行するには 2 回の起動が必要です。これにより、カーネル間にギャップが生じ、GPU がアイドル状態になる可能性があります。 2 つの cuda カーネルを 1 つの cuda カーネルにマージすると、起動を節約できる一方で、ギャップの生成を回避できます。

もう 1 つの利点は、グローバル メモリ アクセスは非常に時間がかかり、結果はグローバル メモリを介して 2 つの独立した cuda カーネル間で転送される必要があるため、グローバル メモリ アクセスが軽減されることです。カーネルを使用すると、結果をレジスタまたは共有メモリに転送できるため、1 つのグローバル メモリの書き込みと読み取りが回避され、パフォーマンスが向上します。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

演算子融合の最初のステップは、既製の apex ライブラリを使用して Layernorm と Adam で操作を実行することです。融合については、単純な命令の置き換えにより、apex の融合されたlayernorm と融合された Adam が有効になり、それによって加速が 1.63 倍から 2.11 倍に増加することがわかります。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

プロフリング ログから、演算子の融合後、要素ごとのカーネルがこのタイムラインの割合を占めていることもわかります。この比率は大幅に減少し、行列乗算が再び最大の時間を占めるカーネルになりました。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

既存の apex ライブラリの使用に加えて、手動融合オペレータも開発しました。

タイムラインを観察してモデルを理解することで、Swin Transformer にはウィンドウの分割/シフト/マージなど、ウィンドウに関連する固有の操作があることがわかりました。ウィンドウ シフトには 2 つのカーネルを呼び出す必要があり、要素ごとのカーネルはシフトが完了した後に呼び出されます。さらに、そのような操作をアテンションモジュールの前に実行する必要がある場合は、その後、対応する逆の操作が行われます。ここで、ウィンドウ シフトによって呼び出される roll_cuda_kernel だけで、タイムライン全体の 4.6% を占めます。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

今述べた操作は実際にはデータを分割するだけです。つまり、対応するデータは に分割されます。ウィンドウに対応する元のコードを次の図に示します。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

操作のこの部分が実際には単なるインデックス マッピングであることが判明したため、この部分をオペレーター開発に統合しました。開発プロセスでは、CUDA プログラミングの関連知識を習得し、演算子の順計算と逆計算に関連するコードを記述する必要があります。

pytorch にカスタム演算子を導入する方法。公式チュートリアルが提供されています。チュートリアルに従って CUDA コードを記述し、コンパイル後に使用できます。オリジナルモデルをモジュールとして紹介します。カスタマイズした Fusion オペレーターを導入することで、さらに 2.19 倍まで高速化できることがわかります。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

以下は、mha 部分に関する融合作業です。

Mha 部分は変圧器モデルの大きなモジュールであるため、これを最適化すると、多くの場合、より大きな加速効果が得られます。図からわかるように、演算子融合が実行される前は、mha 部分の演算の割合は 37.69% であり、多くの要素ごとのカーネルが含まれています。関連する操作をより高速な別のカーネルに融合できれば、高速化をさらに向上させることができます。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

Swin Transformer では、クエリ、キー、値に加えて、マスクとバイアスがテンソル形式で渡されるため、オリジナルのカーネルを変換できる fMHA のようなモジュールを開発しました。統合された。 fMHA モジュールに含まれる計算から判断すると、このモジュールは Swin Transformer で発生するいくつかの形状を大幅に改善しました。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

#モデルで fMHA モジュールを使用した後、加速率をさらに 2.85 倍に高めることができます。上記は 1 枚のカードで達成したトレーニング加速効果です。8 枚のカードを備えた 1 台のマシンでのトレーニング状況を見てみましょう。上記の最適化により、トレーニング スループットが 1612 から 3733 に増加できることがわかります。 2.32倍の加速を実現。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

トレーニングの最適化については、加速率が高いほど良いと考えています。加速前と同じパフォーマンスを維持できます。

上記のいくつかの加速ソリューションを重ね合わせた後、モデルの収束が元のベースラインと一致していることがわかります。最適化の前後で改善され、一貫性は Swin-Tiny、Swin-Base、Swin-Large で証明されています。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

# トレーニング部分に関しては、CUDA グラフ、マルチストリームなどの他のアクセラレーション戦略をすべて使用できます。 Swin Transformer のパフォーマンスはさらに向上しました。他の側面では、現在、Swin Transformer 公式リポジトリで採用されている戦略である混合精度ソリューションを導入しています。純粋な fp16 ソリューション (つまり、apex O2 モード) を使用すると、次のことを実現できます。より速い加速。

Swin には高い通信要件はありませんが、マルチノードの大規模モデルのトレーニングでは、元の分散トレーニングと比較して、合理的な戦略が使用されます。通信オーバーヘッドを隠すことで、マルチカード トレーニングでさらなる利点を得ることができます。

大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

#次に、同僚の方々に当社の高速化ソリューションと推論における効果を紹介していただきたいと思います。

3. Swin トランスフォーマー推論の最適化

皆さん、こんにちは。 , NVIDIA の GPU コンピューティング エキスパート チームの Chen Yu です。Tao Li によるトレーニング アクセラレーションについてのご紹介をありがとうございました。次に、推論におけるアクセラレーションについてご紹介します。

#トレーニングと同様、推論の高速化はオペレーター フュージョン ソリューションから切り離せません。ただし、トレーニングと比較して、演算子融合は推論の柔軟性に優れています。これは主に次の 2 つの点に反映されています。逆方向を考慮する必要があるため、カーネル開発プロセスでは勾配の計算に必要な中間結果の保存を考慮する必要がありません。

推論プロセスでは前処理が可能です。 、計算が 1 回だけ必要で繰り返し使用できる一部の操作を計算し、事前に計算して結果を保持し、各推論中に直接呼び出して計算の繰り返しを避けることができます。
  • 推論側では、多くの演算子融合を実行できます。ここでは、Transformer モデルで使用する一般的な演算子をいくつか示します。統合されたパターンとツール関連するパターンを実装するために必要です。
  • まず第一に、行列の乗算と畳み込みを別々にリストします。これらの周りには演算子融合の大きなクラスがあるためです。行列の乗算に関連する融合については、cublas、cutlass、cudnn の使用を検討できます。ライブラリ; 畳み込みには、cudnn または Cutlass を使用できます。したがって、Transformer モデルでは、行列乗算の演算子融合については、gemm バイアス、gemm バイアス活性化関数などの gemm 要素ごとの操作として要約します。このタイプの演算子融合については、cublas または Cutlass を直接呼び出して実行することを検討できます。 。

    さらに、gemm の後の操作操作が、layernorm、transpose など、より複雑な場合は、gemm とbias を分離することを検討できます。 then integratingbias into In the next op, this makes it easy to call cublas を呼び出して単純な行列乗算を実装します もちろん、このバイアスを次の op と統合するパターンでは、通常、cuda カーネルを手動で記述する必要があります。

    #最後に、layernorm シフト ウィンドウ パーティションなど、cuda カーネルを手書きして融合する必要がある特定の操作がいくつかあります。

    オペレーターフュージョンでは、cuda カーネルをより巧みに設計する必要があるため、一般的には、最初に nsight システムパフォーマンス分析ツールを通じてパイプライン全体を分析し、以下を優先することをお勧めします。ホットスポット モジュールは、オペレータ フュージョンの最適化を実行して、パフォーマンスとワークロードのバランスを実現します。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    そこで、多くの演算子融合最適化の中から、明らかな加速効果を持つ 2 つの演算子を選択しました。

    最初は、mha 部分の演算子融合です。推論のたびに検索を実行することを避けるために、位置バイアス検索操作を前処理部分に進めます。

    次に、batch gemm、softmax、batch gemm を独立した fMHA カーネルにマージし、同時に転置関連の操作を fMHA カーネル I/に統合します。 O 操作。明示的な転置操作を避けるために、データの読み取りと書き込みの特定のパターンが使用されます。

    #融合後、この部分は 10 倍の加速を達成し、エンドツーエンドの加速も次のように達成されたことがわかります。 1.58倍。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    紹介したいもう 1 つの演算子の融合は、QKV gemmbias の融合です。

    gemm とbias の融合は非常に一般的な融合方法ですが、前述の fMHA カーネルと連携するには、重みとバイアスを調整する必要があります。フォーマットを変更してください。

    私がこの演算子融合をここで紹介することにした理由は、まさにこの高度な変換が前述した推論計算を具体化しているためです。 -fusion を使用すると、モデルの精度に影響を与えない範囲でモデルの推論プロセスに変更を加えることができ、それによってオペレーターの融合パターンが改善され、加速効果が向上します。

    最後に、QKV gemmbias の統合により、さらに 1.1 倍のエンドツーエンドの高速化を達成できます。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    #次の最適化方法は、行列乗算パディングです。

    Swin Transformer の計算では、主次元が奇数の行列乗算が発生することがありますが、現時点では、行列乗算カーネルがベクトル化された読み取りと書き込みを実行するのに役立たないため、カーネルの演算効率が低くなります。このとき、演算に参加する行列の主な次元をパディングして 8 の倍数にすることを検討できます。これにより、行列乗算カーネルは一度に 8 つの要素を読み書きできます。 withalignment=8. パフォーマンスを向上させるためにベクトル化された読み取りと書き込みを実行するメソッド。

    以下の表に示すように、n を 49 から 56 にパディングした後、行列乗算のレイテンシは 60.54us から 40.38us に低下し、1.5 倍を達成しました。速度向上率。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    #次の最適化方法は、half2 や char4 などのデータ型を使用することです。

    次のコードは、half2 最適化の例です。これは、バイアスと残差を追加する単純な演算子融合演算を実装しています。 、ハーフデータクラスと比較して、レイテンシーを 20.96us から 10.78us に短縮でき、1.94 倍の加速が可能です。

    #では、half2 データ型を使用する一般的な利点は何でしょうか?主要なポイントは 3 つあります:

    最初の利点は、図に示すように、ベクトル化された読み取りと書き込みによってメモリ帯域幅の利用効率が向上し、メモリ アクセス命令の数が削減できることです。下図の右側では、half2 を使用することにより、メモリ アクセス命令が半分に減り、メモリの SOL も大幅に改善されることがわかります。 #2 番目の利点は、half2 独自の高スループット演算命令を組み合わせることで、カーネル レイテンシを短縮できることです。これらの点は両方とも、このサンプル プログラムに反映されています;

    #3 番目の利点は、リダクション関連のカーネルを開発するときに、half2 データ型を使用することは、1 つを意味することです。 CUDA スレッドは 2 つの要素を同時に処理するため、アイドル状態のスレッドの数が効果的に削減され、スレッド同期の待ち時間が短縮されます。

    #次の最適化方法は、レジスタ配列を上手に使用することです。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    layernorm や Softmax などの Transformer モデルの一般的な演算子を最適化する場合、多くの場合、カーネル内で同じ入力データを複数回使用する必要があります。毎回グローバル メモリから読み取る場合、レジスタ アレイを使用してデータをキャッシュし、グローバル メモリの繰り返し読み取りを避けることができます。

    レジスタは各 cuda スレッド専用であるため、カーネル設計時に各 cuda スレッドがキャッシュする必要がある要素を事前に設定する必要があります。これにより、対応するサイズのレジスタ配列が開かれ、各 cuda スレッドを担当する要素を割り当てるときに、8 つのスレッドがある場合に、下図の右上に示すように、複合アクセスを確実に達成できるようにする必要があります。 、スレッド No. 0 要素 No. 0 を処理できます。スレッドが 4 つの場合、スレッド No. 0 は要素 No. 0 と要素 No. 4 を処理します。

    #一般的には、テンプレート関数を使用して、テンプレート パラメーターを通じて各 cuda スレッドのレジスタ配列サイズを制御することをお勧めします。

    さらに、レジスタ配列を使用する場合は、添え字が定数であることを確認する必要があります。ループの場合、変数は添字として使用されます。ループ展開が確実に実行できるように最善を尽くす必要があります。これにより、コンパイラがローカル メモリにデータを配置する際の待ち時間が長くなります。次の図に示すように、制限を追加します。ローカル メモリの使用を回避し、ncu レポートを通じて確認できるループ条件を確認します。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    最後に紹介する最適化方法は、INT8 量子化です。

    INT8 量子化は、推論を高速化するための非常に重要な高速化方法です。Transformer ベースのモデルの場合、INT8 量子化はメモリ消費を削減し、より良い結果をもたらします。

    Swin の場合、適切な PTQ または QAT 量子化スキームを組み合わせることで、量子化精度を確保しながら良好な高速化を実現できます。一般に、int8 量子化は、主に行列の乗算または畳み込みを量子化するために実行されます。たとえば、int8 行列の乗算では、最初に元の FP32 または FP16 入力と重みを INT8 に量子化し、次に INT8 行列乗算を実行して INT32 データに累積します。賢明に言えば、ここで逆量子化操作を実行し、FP32 または FP16 の結果を取得します。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    INT8 行列乗算を呼び出すためのより一般的なツールは、cublasLt です。より良いパフォーマンスを達成するには、次のようにする必要があります。 cublasLt API のいくつかの機能を詳しく見てみましょう。

    cublasLt int8 行列乗算の場合、次の図の左側に示すように、INT32 として出力するか、または次のように 2 つの出力タイプが提供されます。下図の右側に表示、INT8で出力、図中青枠のcublasLtの演算動作を表示します。

    INT32 出力と比較して、INT8 出力には逆量子化および量子化操作の追加のペアがあり、一般的により多くの処理が行われることがわかります。精度は低下しますが、グローバル メモリに書き込む場合、INT8 出力は INT32 出力よりもデータ量が 3/4 少ないため、パフォーマンスが向上するため、精度とパフォーマンスの間にはトレードオフがあります。

    Swin Transformer では、INT8 出力方式を使用しているため、QAT を使用すると、良好な加速比を達成することを前提として、INT8 出力が精度を確保できることがわかりました。 。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?


    また、cublasLt の INT8 行列乗算に関しては、データのレイアウトも考慮する必要があります。 cublasLt は 2 つのレイアウトをサポートします。1 つは IMMA 固有のレイアウトで、より複雑な形式が含まれており、このレイアウトでは NT-gemm のみをサポートします。もう 1 つは通常の列優先レイアウトで、このレイアウトでは TN-gemm をサポートします。

    一般的に、IMMA 固有のレイアウトを使用する場合、これとの互換性が必要になる可能性があるため、列優先レイアウトを使用すると、パイプライン コード全体の開発が容易になります。レイアウト 上流および下流のカーネルだけでなく、多くの追加の操作も、この特別なレイアウトと互換性がある必要があります。ただし、IMMA 固有のレイアウトは、サイズによっては行列乗算のパフォーマンスが向上する場合があるため、int8 推論を構築したい場合は、最初にいくつかのベンチマークを実行して、パフォーマンスと開発の容易さをよりよく理解することをお勧めします。 。

    #FasterTransformer では、IMMA 固有のレイアウトを使用します。次に、IMMA 固有のレイアウトを例として、cublasLt int8 行列乗算の基本的な構築プロセスといくつかの開発テクニックを簡単に紹介します。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    cublasLt int8 行列乗算の基本的な構築プロセスは 5 つのステップに分けることができます。

    • 最初にハンドルと乗算記述子を作成する必要があります;
    • 次に、各行列記述子の行列を作成します。
    • 通常、入力は通常のレイアウトであるため、通常のレイアウト マトリックスに対してレイアウト変換を実行して、IMMA 固有のレイアウトにする必要があります。
    • 次に、int8 行列の乗算を実行します。結果を取得した後、変換を避けるために、この結果を下流の乗算計算に使用し続けることを検討できます。通常のレイアウト;
    • 最後の行列乗算の結果のみ、出力用に通常のレイアウトを変換する必要があります。

    上記は IMMA 固有のレイアウトでの構築プロセスを説明していますが、多くの制限があることがわかります。パフォーマンスに対するこれらの制限の影響を回避するために、Faster Transformer では次のテクニックを採用しています。

    • まず第一に、IMMA 固有のレイアウトは行列サイズ要件に固有であるため、推論プロセス中に追加のスペースを割り当てる必要を避けるために、事前に IMMA 固有のレイアウト サイズに準拠するバッファーを割り当てます;
    • そこで、重みは一度処理して再利用できるため、推論過程で重みが繰り返し変更されることを避けるために、事前に重み(乗算のB行列に相当)のレイアウト変換を行います。
    • #3 番目のトリックは、特別なレイアウト変換を行う必要がある A と C について、変換を上流または下流の操作とマージして、この部分を非表示にすることです。
    • 最後の点はレイアウトとは関係ありませんが、int8 行列の乗算に必要な量子化と逆量子化の操作です。オペレータ フュージョンを使用してレイテンシを隠します。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    次は、Faster Transformer で使用する INT8 プロセスの概略図です。すべての行列乗算は int8 データ型になりました。対応する量子化ノードと逆量子化ノードは、各 int8 行列乗算の前後に挿入されます。その後、バイアスの追加、残差またはレイヤーノルムの追加などの操作については、元の FP32 または FP16 データ型が保持されます。もちろん、その I/O は int8 であってもよく、これにより FP16 や FP32 よりも優れた I/O パフォーマンスが提供されます。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    ここに示されているのは、Swin Transformer int8 量子化の精度です。QAT を通じて、精度の損失が確実に保証されます。 1000分の1以内 5以内

    PTQ 列を見ると、Swin-Large のポイント低下がより深刻であることがわかります。一般的に、深刻なレベルに該当する場合は、使用を検討できます。ポイントドロップの問題 量子化精度を向上させるために一部の量子化ノードを削減します もちろん、これにより加速効果が弱まる可能性があります。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    FT では、FC2 および PatchMerge および量子化ノードでの int8 行列乗算の出力前に逆量子化を無効にすることができます。この最適化操作により、swin-large の PTQ 精度も大幅に向上していることがわかります。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    #推論側で達成した高速化効果は次のとおりです。GPU T4、A10、A10 のさまざまなモデルをテストしました。および A100. pytorch FP16 実装とのパフォーマンス比較は上記で実行されました。

    下図の左側は最適化とpytorchのレイテンシ比較、右図は最適化後のFP16とpytorchの高速化比、INT8最適化とFP16最適化の高速化比を示しています。 。最適化により、FP16 精度で pytorch と比較して 2.82x ~ 7.34x の高速化を達成でき、INT8 量子化と組み合わせることで、これをベースにさらに 1.2x ~ 1.5x の高速化を達成できることがわかります。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    #4. Swin トランスの最適化の概要

    最後に、要約しましょう。この共有では、nsight システム パフォーマンス分析ツールを通じてパフォーマンスのボトルネックを見つける方法を紹介し、その後、パフォーマンス ボトルネックに対する一連のトレーニング推論高速化テクニックを紹介しました。トレーニング/低精度推論、2. 演算子融合、3. cuda カーネル最適化テクニック: 行列のゼロ パディング、ベクトル化された読み取りと書き込み、レジスタ配列の賢明な使用など。 4. 推論の最適化で前処理が使用され、推論の最適化が向上します。計算プロセス; マルチストリームと cuda グラフのいくつかのアプリケーションも紹介しました。

    上記の最適化と組み合わせて、Swin-Large モデルを例として使用し、1 枚のカードで 2.85 倍、1 枚のカードで 2.32 倍の加速比を達成しました。 8 カード モデルの比; 推論の観点から、Swin-tiny モデルを例にとると、FP16 精度で 2.82x ~ 7.34x の加速比を達成し、INT8 量子化と組み合わせることで、さらに 2.82x ~ 7.34x の加速比を達成しました。 1.2倍~1.5倍。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

    大規模なビジュアル モデルのトレーニングと推論のための上記の高速化メソッドは、Baidu Baige AI ヘテロジニアス コンピューティング プラットフォームの AIAK に実装されました。アクセラレーション機能に実装されているので、どなたでもご利用いただけます。

    大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?

以上が大規模なビジュアル モデルを使用してトレーニングと推論を高速化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

世界で最も強力なオープンソース MoE モデルが登場。GPT-4 に匹敵する中国語機能を備え、価格は GPT-4-Turbo のわずか 1% 近くです 世界で最も強力なオープンソース MoE モデルが登場。GPT-4 に匹敵する中国語機能を備え、価格は GPT-4-Turbo のわずか 1% 近くです May 07, 2024 pm 04:13 PM

従来のコンピューティングを超える能力を備えているだけでなく、より低コストでより効率的なパフォーマンスを実現する人工知能モデルを想像してみてください。これは SF ではありません。世界で最も強力なオープンソース MoE モデルである DeepSeek-V2[1] が登場しました。 DeepSeek-V2 は、経済的なトレーニングと効率的な推論の特徴を備えた強力な専門家混合 (MoE) 言語モデルです。これは 236B のパラメータで構成されており、そのうち 21B は各マーカーをアクティブにするために使用されます。 DeepSeek67B と比較して、DeepSeek-V2 はパフォーマンスが優れていると同時に、トレーニング コストを 42.5% 節約し、KV キャッシュを 93.3% 削減し、最大生成スループットを 5.76 倍に高めます。 DeepSeek は一般的な人工知能を研究する会社です

AI が数学研究を破壊する!フィールズ賞受賞者で中国系アメリカ人の数学者が上位 11 件の論文を主導 | テレンス・タオが「いいね!」しました AI が数学研究を破壊する!フィールズ賞受賞者で中国系アメリカ人の数学者が上位 11 件の論文を主導 | テレンス・タオが「いいね!」しました Apr 09, 2024 am 11:52 AM

AI は確かに数学を変えつつあります。最近、この問題に細心の注意を払っている陶哲軒氏が『米国数学協会会報』(米国数学協会会報)の最新号を送ってくれた。 「機械は数学を変えるのか?」というテーマを中心に、多くの数学者が意見を述べ、そのプロセス全体は火花に満ち、ハードコアで刺激的でした。著者には、フィールズ賞受賞者のアクシャイ・ベンカテシュ氏、中国の数学者鄭楽軍氏、ニューヨーク大学のコンピューター科学者アーネスト・デイビス氏、その他業界で著名な学者を含む強力な顔ぶれが揃っている。 AI の世界は劇的に変化しています。これらの記事の多くは 1 年前に投稿されたものです。

ORB-SLAM3を超えて! SL-SLAM: 低照度、重度のジッター、弱いテクスチャのシーンはすべて処理されます。 ORB-SLAM3を超えて! SL-SLAM: 低照度、重度のジッター、弱いテクスチャのシーンはすべて処理されます。 May 30, 2024 am 09:35 AM

以前に書きましたが、今日は、深層学習テクノロジーが複雑な環境におけるビジョンベースの SLAM (同時ローカリゼーションとマッピング) のパフォーマンスをどのように向上させることができるかについて説明します。ここでは、深部特徴抽出と深度マッチング手法を組み合わせることで、低照度条件、動的照明、テクスチャの弱い領域、激しいセックスなどの困難なシナリオでの適応を改善するように設計された多用途のハイブリッド ビジュアル SLAM システムを紹介します。当社のシステムは、拡張単眼、ステレオ、単眼慣性、ステレオ慣性構成を含む複数のモードをサポートしています。さらに、他の研究にインスピレーションを与えるために、ビジュアル SLAM と深層学習手法を組み合わせる方法も分析します。公開データセットと自己サンプリングデータに関する広範な実験を通じて、測位精度と追跡堅牢性の点で SL-SLAM の優位性を実証しました。

こんにちは、電気アトラスです!ボストン・ダイナミクスのロボットが復活、180度の奇妙な動きにマスク氏も恐怖 こんにちは、電気アトラスです!ボストン・ダイナミクスのロボットが復活、180度の奇妙な動きにマスク氏も恐怖 Apr 18, 2024 pm 07:58 PM

Boston Dynamics Atlas は正式に電動ロボットの時代に突入します!昨日、油圧式アトラスが歴史の舞台から「涙ながらに」撤退したばかりですが、今日、ボストン・ダイナミクスは電動式アトラスが稼働することを発表しました。ボストン・ダイナミクス社は商用人型ロボットの分野でテスラ社と競争する決意を持っているようだ。新しいビデオが公開されてから、わずか 10 時間ですでに 100 万人以上が視聴しました。古い人が去り、新しい役割が現れるのは歴史的な必然です。今年が人型ロボットの爆発的な年であることは間違いありません。ネットユーザーは「ロボットの進歩により、今年の開会式は人間のように見え、人間よりもはるかに自由度が高い。しかし、これは本当にホラー映画ではないのか?」とコメントした。ビデオの冒頭では、アトラスは仰向けに見えるように地面に静かに横たわっています。次に続くのは驚くべきことです

MLP に代わる KAN は、オープンソース プロジェクトによって畳み込みまで拡張されました MLP に代わる KAN は、オープンソース プロジェクトによって畳み込みまで拡張されました Jun 01, 2024 pm 10:03 PM

今月初め、MIT やその他の機関の研究者らは、MLP に代わる非常に有望な代替案である KAN を提案しました。 KAN は、精度と解釈可能性の点で MLP よりも優れています。また、非常に少数のパラメーターを使用して、多数のパラメーターを使用して実行する MLP よりも優れたパフォーマンスを発揮できます。たとえば、著者らは、KAN を使用して、より小規模なネットワークと高度な自動化で DeepMind の結果を再現したと述べています。具体的には、DeepMind の MLP には約 300,000 個のパラメーターがありますが、KAN には約 200 個のパラメーターしかありません。 KAN は、MLP が普遍近似定理に基づいているのに対し、KAN はコルモゴロフ-アーノルド表現定理に基づいているのと同様に、強力な数学的基礎を持っています。以下の図に示すように、KAN は

テスラのロボットは工場で働く、マスク氏:手の自由度は今年22に達する! テスラのロボットは工場で働く、マスク氏:手の自由度は今年22に達する! May 06, 2024 pm 04:13 PM

テスラのロボット「オプティマス」の最新映像が公開され、すでに工場内で稼働可能となっている。通常の速度では、バッテリー(テスラの4680バッテリー)を次のように分類します:公式は、20倍の速度でどのように見えるかも公開しました - 小さな「ワークステーション」上で、ピッキング、ピッキング、ピッキング:今回は、それがリリースされたハイライトの1つビデオの内容は、オプティマスが工場内でこの作業を完全に自律的に行​​い、プロセス全体を通じて人間の介入なしに完了するというものです。そして、オプティマスの観点から見ると、自動エラー修正に重点を置いて、曲がったバッテリーを拾い上げたり配置したりすることもできます。オプティマスのハンドについては、NVIDIA の科学者ジム ファン氏が高く評価しました。オプティマスのハンドは、世界の 5 本指ロボットの 1 つです。最も器用。その手は触覚だけではありません

FisheyeDetNet: 魚眼カメラに基づいた最初のターゲット検出アルゴリズム FisheyeDetNet: 魚眼カメラに基づいた最初のターゲット検出アルゴリズム Apr 26, 2024 am 11:37 AM

目標検出は自動運転システムにおいて比較的成熟した問題であり、その中でも歩行者検出は最も初期に導入されたアルゴリズムの 1 つです。ほとんどの論文では非常に包括的な研究が行われています。ただし、サラウンドビューに魚眼カメラを使用した距離認識については、あまり研究されていません。放射状の歪みが大きいため、標準のバウンディング ボックス表現を魚眼カメラに実装するのは困難です。上記の説明を軽減するために、拡張バウンディング ボックス、楕円、および一般的な多角形の設計を極/角度表現に探索し、これらの表現を分析するためのインスタンス セグメンテーション mIOU メトリックを定義します。提案された多角形モデルの FisheyeDetNet は、他のモデルよりも優れたパフォーマンスを示し、同時に自動運転用の Valeo 魚眼カメラ データセットで 49.5% の mAP を達成しました。

超知性の生命力が覚醒する!しかし、自己更新 AI の登場により、母親はデータのボトルネックを心配する必要がなくなりました。 超知性の生命力が覚醒する!しかし、自己更新 AI の登場により、母親はデータのボトルネックを心配する必要がなくなりました。 Apr 29, 2024 pm 06:55 PM

世界は狂ったように大きなモデルを構築していますが、インターネット上のデータだけではまったく不十分です。このトレーニング モデルは「ハンガー ゲーム」のようであり、世界中の AI 研究者は、データを貪欲に食べる人たちにどのように餌を与えるかを心配しています。この問題は、マルチモーダル タスクで特に顕著です。何もできなかった当時、中国人民大学学部のスタートアップチームは、独自の新しいモデルを使用して、中国で初めて「モデル生成データフィード自体」を実現しました。さらに、これは理解側と生成側の 2 つの側面からのアプローチであり、両方の側で高品質のマルチモーダルな新しいデータを生成し、モデル自体にデータのフィードバックを提供できます。モデルとは何ですか? Awaker 1.0 は、中関村フォーラムに登場したばかりの大型マルチモーダル モデルです。チームは誰ですか?ソフォンエンジン。人民大学ヒルハウス人工知能大学院の博士課程学生、ガオ・イージャオ氏によって設立されました。

See all articles