AIトレーニング加速原理分析とエンジニアリング実践の共有
この共有では、AI モデルのトレーニング プロセスにおける主なパフォーマンスのボトルネック、およびこれらのボトルネックに対する現在の主な高速化ソリューションと技術原則を体系的に分析し、この点に関する Baidu Intelligent Cloud の実践的な結果をいくつか紹介します。
今日の共有は主に 3 つの部分で構成されます:
最初に、なぜ AI トレーニングを加速する必要があるのか、つまり全体的な背景と出発点を紹介します;
2 番目の部分実際のトレーニング プロセス中に遭遇する可能性のあるパフォーマンスのボトルネックを体系的に分析し、これらの問題に対処するための現在の主な高速化ソリューションを紹介します。
3 番目のパートでは、Baidu Baige プラットフォームの AI トレーニング アクセラレーションを紹介します。一部のモデル トレーニングの高速化に対するパッケージ AIAK-Training の実際的な効果。
1. なぜ AI トレーニングが加速しているのでしょうか?
AI システムでは、通常、モデルにはオフライン トレーニングと本番環境からアプリケーションへの推論展開という 2 つの段階が含まれます。
オフライン トレーニング フェーズはモデルを生成するプロセスであり、ユーザーは独自のタスク シナリオに従ってモデルのトレーニングに必要なデータ セットとニューラル ネットワーク アルゴリズムを準備する必要があります。
このアルゴリズムは、多くの変数とパラメーターを含む、非常に複雑な非凸数学関数として理解できます。モデルのトレーニングのプロセスは、実際にはニューラル ネットワーク モデルのパラメーターを学習することです。
モデルのトレーニングが開始されると、データが読み取られ、前方計算のためにモデルに送信され、実際の値との誤差が計算されます。次に、逆計算を実行してパラメータの勾配を取得し、最後にパラメータを更新します。トレーニングには複数ラウンドのデータ反復が含まれます。
トレーニングが完了したら、トレーニングされたモデルを保存し、そのモデルをオンラインにデプロイし、ユーザーの実際の入力を受け入れ、前方計算による推論を完了します。
したがって、トレーニングでも推論でも、中心となるのはデータ計算です。コンピューティング効率を加速するために、トレーニングと推論は通常、GPU などの異種アクセラレーション チップを通じて実行されます。
また、ディープラーニングモデルの開発履歴から判断すると、モデル精度の上限を突破し続けるために、モデルパラメータの数は実際に拡大しています。急速に。ただし、パラメーターの数が増えると、計算の複雑さが増します。
下図の左側は公開論文から抜粋したものですが、この概要を見ると、2010年以前はモデルの計算量が約20か月で2倍になっていることが分かります。 2010 年から 2015 年まで、従来のモデルの計算は 5 ~ 6 か月ごとに 2 倍になりました。 2015年以降、大規模モデルのトレーニングの傾向が現れ、計算量は10倍から100倍に増加しました。
モデルのトレーニングでは、コンピューティング能力とインフラストラクチャに対する要件がますます高まっています。トレーニングにはより多くのコンピューティング能力が必要であり、時間がかかるため、リソースのコストも増加します。ここでは、いくつかの論文や研究で開示されているコスト データをリストします。これは、モデルのトレーニングのコストが非常に高いことを反映しています。
したがって、モデルのトレーニングをいかに安定的に行うか、継続的にコストを削減し効率を高めるかが実は重要です。
このような背景に対して、Baidu Intelligent Cloud は、AI シナリオ向けの統合されたソフトウェアとハードウェア ソリューションを提供することを目的として、Baidu Baige·AI ヘテロジニアス コンピューティング プラットフォームを立ち上げました。 AI コンピューティング、AI ストレージ、AI アクセラレーション、AI コンテナーの 4 層のテクノロジー スタックを通じて、上位レベルのビジネス シナリオのニーズを満たします。
- AI コンピューティング層は、高性能 GPU、Kunlun などの異種チップ リソース、高性能 RDMA または IB ネットワーク、自社開発のスーパー AI コンピューター X-MAN などを提供します。
- AI ストレージ レイヤー (データ レイク ストレージのニーズを満たすオブジェクト ストレージ BOS と、AI 用に特別に設計された高性能並列ファイル システム PFS を含む)、
- AI アクセラレーション レイヤー (データ レイク ストレージを含む)アクセラレーション スイート RapidFS、AI トレーニング アクセラレーション スイート AIAK-Training、AI 推論アクセラレーション スイート AIAK-Inference;
- AI コンテナ レイヤー、つまりリソース スケジューリング レイヤーは、クラウド ネイティブの技術機能を使用して、GPU の柔軟なスケジューリングに対応します。 AIの仕事などのニーズ。前回の技術公開授業ではクラウドネイティブAIの内容を特別に公開しました。
#パフォーマンスの高速化について考えるとき、最初に思い浮かぶのは、より優れたハードウェアを使用することかもしれません。
これにより、一定のパフォーマンスの向上がもたらされますが、ほとんどの場合、ハードウェアの計算能力が十分に活用されていない可能性があります。主な理由は、トレーニング コードの実行効率が最適以上に調整されていないことです。 。 州。
- まず第一に、より多くのニーズに対応するために、フレームワークは通常、使いやすさ、環境に配慮した構築などにさらに注意を払い、より一般的な最適化機能を提供します。 , アルゴリズムエンジニア アルゴリズムを設計する際、モデルの精度をいかに高めるかが中心となり、パフォーマンス効率への配慮が不十分となり、フレームワークが提供する一般的な最適化機能の一部が活用されない場合があります。
- したがって、特定のモデル アルゴリズムを使用することを決定した場合、リソース効率とトレーニング効率を向上させるために、意識的に最適化する必要があります。ただし、ここには多くの技術的な課題もあります:
- パフォーマンス最適化のニーズ エンジニアリング実装の原則を理解します。たとえば、ヘテロジニアス チップ コンピューティングの最適化を行う場合、それを実行するには専門的な異種混合の研究開発経験が必要であり、技術的な敷居は高くなります。
- 分散トレーニングを行う場合には、分散トレーニング シナリオでのスケーラビリティの問題を最適化するために、クラスター ハードウェアとネットワーク トポロジを組み合わせる必要がある場合もあります。
- これらの課題は、モデル トレーニングのパフォーマンスのチューニングに大きな影響を与えているため、抽象的で使いやすいインターフェイス、およびソフトウェアとハードウェア コラボレーション Baidu スマート クラウドでの顧客のモデル トレーニング パフォーマンスを完全に加速する最適化手法。
2. トレーニング パフォーマンスのオーバーヘッド分析と加速計画
AIAK トレーニングの具体的な効果を紹介する前に、まず次のトピックで重要な問題を紹介します。トレーニングの加速化 技術的なアイデアとプログラムの原則は何ですか?
モデル トレーニングの最適化自体はソフトウェアとハードウェアの包括的な作業であり、テクノロジ スタックは比較的複雑であるため、今日の内容では詳細をすべてカバーすることはできません。重要な部分をカバーできるように最善を尽くします。アイデア。
まず、現在のモデルのトレーニング スキームを見てみましょう。これまでの開発段階で、モデル トレーニング ソリューションには 2 つの重要な変更がありました。1 つはシングル カード トレーニングから分散トレーニングへの変更、もう 1 つはデータ並列トレーニングから多次元ハイブリッド並列トレーニングへの変更です。ここで重要なポイントは、トレーニング データの量とモデル パラメーターの量です。
シングルカード トレーニング方法: 実際にこのモードを使用する場合、モデルのパラメーターとデータの量は一般に比較的少なく、シングル カードのトレーニング時間は許容範囲内です。モデル パラメーターのスケールでは、トレーニング プロセス中に 1 枚のカードのビデオ メモリがストレージの上限を満たすことができるようにする必要があります。新しい GPU カードのビデオ メモリ容量構成によると、配置できる最大サイズは通常 10 億パラメータです。- データ セットのサイズが比較的大きい場合は、データ セット全体を配置する必要があるためです。トレーニング プロセス中に複数回実行されるため、単一カードのトレーニングには比較的長い時間がかかりますが、現時点では、分散アプローチを通じてトレーニングを高速化するために、単一カードから複数カードに拡張できます。
- ここで最も広く使用されているのはデータ並列処理です。データ並列スキームでは、データセットが複数の部分に均等に分割され、完全なモデルが各カードに保存され、分割されたサブデータセットが独立して並列処理されます。
たとえば、モデル パラメーターの数が十分に大きい場合、パラメーターの数は数百億または数千億に達し、1 枚のカードでは完全なモデルを保持できなくなります。ここでも、モデルの並列性、またはデータ並列性とモデル並列性を同時に利用するハイブリッド並列方式が登場。
モデル並列処理では、モデルを異なるカードに分割し、各カードにモデルの一部を配置します。ここでは、層内分割または層間分割、Tensor 並列処理など、分割方法が異なります。とパイプライン並列処理はさらに細分化されます。
一般的なモデルのトレーニングではデータ並列処理がよく使用されるため、パフォーマンス最適化のアイデアを紹介する例としてデータ並列処理に焦点を当てます。
# まず、ソフトウェアとハードウェアの全体的な観点から、シングルカード トレーニング中に存在するパフォーマンスのオーバーヘッドを理解しましょう。
下の図の左側は、ソフトウェアの観点から見たトレーニング プロセスです。シングルカードトレーニングのプロセスには、主にデータの読み取り、データの前処理、順計算出力と損失計算、損失関数による逆計算を行って各層パラメータの勾配を取得し、最後に勾配に応じてモデルパラメータを更新することが含まれます。トレーニングが収束するまでこのプロセスを続けます。
以下の図の右側は、簡略化されたノードのハードウェア トポロジ図です。一番上はデータ ストレージで、ローカル ストレージまたはネットワーク ストレージを使用できます。次に CPU とメモリです。0 から 7 までの番号が付けられた複数の PCIe スイッチを介して 8 枚の GPU カードが CPU に接続されており、8 枚のカードは NVSwitch を介して相互接続されています。コンピューティング インスタンスが異なれば、ハードウェア トポロジも異なります。
- トレーニングが開始されると、最初にデータが読み取られます。これには、ストレージ メディアからメモリへのデータの読み取りが含まれます (主にストレージ I/O オーバーヘッド)。ストレージ メディアに応じて、読み取られるデータの量が異なり、この部分にかかる時間コストも異なります。
- 次のステップはデータ前処理で、主に読み取りに対していくつかのデータ拡張操作を実行します。画像処理、サイズ変更、コントラスト、彩度調整などのデータ この部分の作業は主に CPU で行われます。 CPU 上でデータの前処理操作が完了したら、データをホスト メモリから GPU メモリにコピーする必要がありますが、これにはホストとデバイス間のメモリ コピーのオーバーヘッドが伴います。
- 次に、順方向計算を開始します。逆算やパラメータの更新など、この部分のその他の操作は主に GPU を通じて実行され、主な時間は GPU の計算に費やされます。このプロセスには CPU 上の一部の操作が散在する場合があり、ホストとデバイスのメモリ間のコピーが必要になる場合もあります。
したがって、単一カードの観点から見ると、主に I/O、CPU の前処理、CPU と GPU 間のデータのコピー、GPU の計算などのオーバーヘッドがあります。
次に、データ並列処理のプロセスを見てみましょう。
下図の左側は依然としてトレーニングのメイン プロセスであり、右側は 3 台のマシン 24 枚のカードのトレーニング クラスターのハードウェア トポロジを示しており、3 台のマシンはネットワークを通じて相互接続されています。
データ並列処理では、各デバイスが順方向および逆方向の計算プロセスを並列かつ独立して実行することも前編で紹介しましたので、各トレーニング プロセスでも上記のシングル カード トレーニングが発生します。問題。
データの並列化が単一カードのトレーニングと数学的に同等であることを保証するには、各カードのモデル パラメーターが反復プロセス中に常に一貫していることを確認する必要があります。一方で、各 GPU カードのモデル パラメーターの初期化ステータスを一貫させる必要があり、これは通常、トレーニングを開始する前に最初のカードのパラメーター ステータスを他のカードにブロードキャストすることで行われます。
学習時には、各デバイスで処理するデータが異なるため、順計算で得られるモデルの損失値も異なるため、各デバイスで傾きを逆計算した後に傾きを計算することも必要です。 、反復プロセス中に各カードのモデル パラメーターの一貫性が保たれるように、平均勾配値でモデル パラメーターを更新します。
勾配平均には、ノード内のカード間の通信やノード間のネットワーク通信オーバーヘッドなどの通信プロセスが含まれます。ここでの通信には同期通信と非同期通信が含まれますが、モデル学習の収束性を確保するために、一般的には同期通信ソリューションが使用され、その後の最適化作業も同期通信に基づいて行われます。
上記のことから、単一カードのトレーニングと比較して、データの並列処理により主に追加の通信オーバーヘッドが追加されることがわかります。
上記の分析を通じて、AI トレーニングの高速化は作業の特定の側面だけではなく、データの読み込み、モデルの計算、そして分散コミュニケーション。ここでいうデータロードには、データの入出力、前処理、メモリコピー等の処理が含まれます。
特定の最適化実践では、最適化対象のモデルが与えられた場合、モデル トレーニングを高速化することは、トレーニングの全体的なスループット (1 秒あたりにトレーニングできるサンプル数) を継続的に向上させることを意味します。このプロセスでは、通常、最初に 1 枚のカードのトレーニング スループットを分析できます。1 枚のカードのトレーニング スループットが向上したら、次に 1 枚のカードから複数のカードへの拡張を検討して、カードのトレーニング加速率を向上させる方法を確認できます。複数のカード。
まず、シングルカード トレーニングの最適化です。最終的な最適化目標は、すべての時間を GPU コンピューティングに費やし、アクセラレータの使用率を 100% にすることです。もちろん、実際にこの状態を完全に達成することは困難ですが、この指標を使用して作業をガイドしたり測定したりすることができます。
シングル カードのパフォーマンス最適化の鍵には 2 つの部分が含まれます。
- まず、データの読み込み効率を最適化します。ストレージ システムからは、より高性能のストレージ メディア、これらの高速ストレージ メディアに基づく並列ファイル システム、または一部のキャッシュ アクセラレーション システムを使用できます。前述したように、Baidu Baige は、PFS、RapidFS などの対応するストレージ システム ソリューションも提供しています。さらに、フレームワーク データローダーでデータ読み取りプロセスを最適化する必要があります。
- 2 つ目は、モデルの計算効率の最適化です。計算実装を最適化する方法と計算ユニットの利用効率を向上させる方法が主な考慮事項であり、これにはモデルと組み合わせた詳細な分析が必要になる場合があります。
次に、1 枚のカードから複数のカードに拡張し、線形加速率を達成する方法を目標とします。直線加速率という指標は、単純にトレーニングを1枚から2枚に拡張したときに、トレーニングパフォーマンスが1枚のカードの2倍になるかどうかを意味します。
ここでの核心は、分散通信の効率を最適化することであり、ハードウェアレベルの最適化である一方で、実際の通信においてどのように活用するかを考える必要があります。ネットワークの帯域幅リソースの量、または通信プロセスを非表示にできるかどうか。
以下では、これらの側面について詳しく説明します。
1 つ目は、データ読み込みの最適化です。
データローダーをインスタンス化した後、引き続きデータローダーを反復処理して、モデルのトレーニング用にデータのバッチを読み取ります。
ここで最適化を行わなかった場合、下図の上部に示すように、実際には各バッチのデータ読み込み処理と各バッチのモデル学習処理が直列に実行されます。 GPU の観点から見ると、データの読み込みによって計算ギャップが発生し、コンピューティング リソースの時間が無駄になります。
データ読み取りの効率を直接向上させるためにより優れたハードウェアを使用するという前述のことに加えて、他にどのように最適化できるでしょうか?
実際、AI トレーニング プロセス中に、データ アクセスには 2 つの重要な機能があります。
- データ セットがシャッフルされた後、各ラウンドに必要なバッチ データが作成されます。トレーニングとアクセス シーケンスは既知です;
- データ間に依存関係がないため、任意の 2 つのバッチのデータ読み取りを並行して実行できます。
したがって、ハードウェア レベルの変更に依存しない場合に実行できる最適化作業の 1 つは、データのプリフェッチです。データの最初のバッチをトレーニングするときに、データの次のバッチを事前にロードできます。 . I/O プロセスと GPU 上の計算を完全に並列化します。
まず、データローダーの既存の最適化ソリューションを有効に活用する必要があります。まず、num_workers ハイパーパラメーターを適切に設定し、複数のプロセスを通じてデータを読み取ります。このステップは、ストレージ システムからホスト メモリへのデータ プリフェッチを実現できます。 2 つ目は、ホスト メモリから GPU メモリにコピーすることで、固定メモリ メカニズムを通じて高速化できます。
ピン メモリ アクセラレーションの主原理の簡単な紹介: メモリ データには 2 つのタイプがあります: ページ可能メモリとピン メモリです。ページ可能メモリ内のデータはディスクにスワップ アウトできます。この場合、H2D を実行するときに、最初にディスクからメモリに読み取り、次にメモリからビデオ メモリにコピーする必要がある場合があります。さらに、ページャブル メモリ データを GPU メモリにコピーする場合は、最初に一時的な固定メモリ バッファを作成し、ページャブル メモリから固定メモリにデータをコピーしてから、それを GPU に転送する必要があります。これには追加のデータ転送操作も必要です。
ただし、上記のソリューションを有効にすると、ストレージ システムからホスト メモリへのプリフェッチのみが実装され、ホストからデバイスへのデータ コピー速度が向上します。ただし、ホストからデバイスへのメモリのコピーと実際の計算カーネルは依然として GPU 上でシリアルに実行されます。つまり、GPU 上にはまだわずかな時間ギャップが存在します。
AIAK は、この問題に対処するためにさらなる最適化を行い、H2D と前方計算のオーバーラップを可能にしました。
#データ並列シナリオでは、データを均等に分割する必要があることに注意する必要があります。
各学習プロセスに割り当てられるデータが偏ると計算量が異なり、各プロセスの順計算と逆計算の完了時間が異なり、先に計算が完了したプロセスが先に計算を完了することになります。処理中はまず勾配通信リンクに入りますが、Allreduce通信は同期通信であるため、すべてのプロセスが同時に開始・終了する必要があるため、開始するプロセスは最初の通信は、他のすべてのプロセスも AllReduce を開始するのを待ちます。通信操作は一緒に完了します。速度の違いによってリソースのアイドル状態の問題が発生する可能性があります。
この問題を解決するには、各プロセスが同じバッチサイズを使用してデータを読み取る必要があり、各バッチ内のデータ量のバランスをとる必要があります。画像データは通常、トレーニング用に固定サイズですが、NLP モデルは可変長ステートメントを処理する必要があるため、特別な処理が必要になる場合があります。たとえば、データを同じ長さにパディングしたり、サンプルの長さをソートすることで均等に分散したりすることができます。
次に、計算効率の最適化について紹介します。
計算には、順方向、逆方向、およびパラメーターの更新が含まれます。計算の最適化の目標は、異種ハードウェアの計算能力を最大限に活用することであり、理想的な状況は、GPU チップの実際の計算パフォーマンスが理論上のピークに達することです。
まず、単一のオペレーターの観点から分析してみましょう。GPU で計算操作を実行する準備をするとき、簡略化されたプロセスには 4 つのステップがあります。
- 最初に GPU 計算カーネルを CPU 上で非同期に起動します;
- カーネルの実行をスケジュールするときは、まず計算に必要なデータを CPU 上のグローバル メモリから読み取る必要があります。 GPU;
- 計算の実行を開始;
- 計算が完了したら、計算結果をグローバル メモリに書き戻す必要があります。
コンピューティングとメモリ アクセスのオーバーヘッドの割合に応じて、オペレータは一般にコンピューティング ボトルネックまたはメモリ アクセス ボトルネックに分類されます。
オペレーターから完全なモデルのトレーニングに拡張する場合、多くのカーネル計算を継続的に実行する必要があるため、カーネル起動によるカーネル計算と中間結果の読み取りおよび書き込みの間に多くのエラーが発生します。ギャップ問題を計算します。
上記のことから、モデルの計算効率を最適化するには、メモリ アクセスの最適化、計算の最適化、その他のオーバーヘッドの最適化を総合的に考慮する必要があることがわかります。
- メモリ アクセスの最適化では、主にビデオ メモリとコンピューティング ユニット間のデータ転送時間を短縮する方法を考慮します。オペレーター実装の観点からは、データを共有メモリなどのより高速なストレージに移動し、グローバル メモリへのアクセスを減らし、それによってメモリ アクセス時間を節約するなど、GPU ストレージ階層アーキテクチャをうまく活用する必要があります。または、計算命令とメモリアクセス命令をうまくオーバーラップさせて、計算メモリアクセス率を向上させます。単一の演算子から複数の演算子に拡張する場合は、中間結果の読み取りと書き込みを減らす方法も考慮する必要があります。この問題は通常、演算子の融合によって最適化できます。
- 計算の最適化、計算のボトルネックのほとんど問題点 タスクがブロックに正しく分割されていないか、GPU 並列計算の利点が十分に活用されておらず、並列性が低いことが考えられます。また、統合命令セットが使用されずに演算効率が低下したり、Tensor Core などの高性能演算ユニットが使用されずにリソースが無駄になったりする可能性もあります。さまざまな問題にはさまざまな最適化方法も対応しており、
- カーネルの起動やその他のオーバーヘッド、メモリアクセスや計算に多くの時間がかかること、演算子融合、Cuda Graph などの最適化方法が考えられます。
#1 つ目は演算子融合です。オペレーターが基盤となる GPU で実行されると、1 つ以上のカーネル起動が開始され、カーネル間のインタラクティブ データもビデオ メモリを通過する必要があります。オペレーター フュージョンは、複数の GPU カーネルを 1 つの大きなカーネルに融合して、統合された開始と実行。
- 実行する必要のあるオペレータの数が減るため、カーネルのスケジューリングと開始のオーバーヘッドを削減できます;
- フュージョンを通じて、中間結果をレジスタを通じて転送できます。メモリの前後の転送により、ビデオ メモリの待ち時間が大幅に短縮されます。
- 一部のシナリオでは、オペレータ フュージョンを使用して、コンピューティング リソースを最大限に活用し、リソースとコンピューティングの効率を向上させることができます。
#演算子融合を具体的に実装するにはどうすればよいですか?
専門家の経験に基づいた手書きの融合演算子を使用して、モデル内の非効率な操作を分析する方法。 GPU では主に CUDA オペレーターの研究開発が行われますが、ここには一定のしきい値があります。 AIAK-Training は、典型的なモデル構造や顧客のニーズに基づいて、効率的で最適化されたオペレーターの実装を提供します。
もう 1 つの方法は、ソリューションをコンパイルして最適化することです。計算の最適化はコンパイルによって実行され、コードが自動的に生成されるため、さまざまなハードウェアでの手動最適化のコストが削減されます。ただし、現在のコンパイル ソリューションの多くは推論に対してより最適化されており、トレーニング ソリューションは依然として急速な進化の過程にあります。しかし、究極のパフォーマンスという観点から考えると、今後もしばらくは手書き融合オペレーターの仕事が不可欠となるでしょう。
以下では、演算子融合の実際的な事例をいくつか紹介します。 1 つ目は、典型的なモデルのネットワーク構造の最適化です。
次の図は、SwinTransformer モデルのコア モジュール WindowAttend に対する計算融合の最適化を示しています。
WindowAttend 構造体、コアの演算式を次の図に示します。計算プロセスでは、7 つの計算カーネルを順番に実行する必要があります。いくつかの再形成およびその他の変換操作と組み合わせると、合計 10 個のカーネルを起動する必要があります。パフォーマンス分析を通じて、起動カーネルの間隔冗長オーバーヘッドが実際の実行プロセス中のエンドツーエンド時間の 80% 以上を占め、その結果、このモジュールに大きな最適化スペースが生じることが判明しました。
これらのカーネルを 1 つに融合することで、モジュール全体の実行時間が 392 マイクロ秒から 13 マイクロ秒に短縮され、単一のオペレーターは 30 倍高速化されます。モデル全体のトレーニング効率がエンドツーエンドで 20% 以上高速化されました。
この最適化の中心となるアイデアには 3 つの主要なポイントがあります:
- GPU の 3 レベルのメモリ アクセス パイプライン (ビデオ メモリ、共有メモリ、レジスタ;
- ブロッキング戦略を通じて、2 つの行列乗算とソフトマックスを融合;
- 前方中間結果の最適化には、Tensor コアを最大限に活用し、逆計算での再読み込みの代わりに再計算を使用します。 、メモリアクセスのオーバーヘッドが大幅に削減されます。
次は、Tensor Core コンピューティング ユニットを最大限に活用するための最後の計算最適化方法です。
通常、GPU には複数の SM が含まれており、各 SM にはさまざまなデータ型のコンピューティング コアとさまざまなストレージ リソースが含まれています。以下の図の左側は、NVIDIA A100 SM の概略図を示しており、SM には 64 個の FP32 CUDA コアと 4 個の Tensor コアが含まれています。
モデルをトレーニングする際、デフォルトでは FP32 CUDA Core が主に計算に使用され、Tensor Core は Volta シリーズの GPU から導入された特別なハードウェア実行ユニットで、主に行列や畳み込みの高速化に使用されます。効率。
一度に 2 つのスカラーの計算しか実行できない FP32 CUDA コアと比較して、Tensor コアは一度に 2 つの行列の計算を実行できるため、Tensor コアの計算スループットは FP32 の計算スループットよりもはるかに高くなります。 CUDAコア。
A100 では、Tensor コアはさまざまな浮動小数点データ型をサポートしており、深層学習トレーニングの場合は、FP16、BF16、および TF32 モードが含まれる場合があります。
TF32 は主に単精度トレーニング シナリオで使用され、FP32 トレーニングと比較して、同じメモリ アクセス帯域幅要件を維持しながら、理論上のコンピューティング スループットが 8 倍増加します。
FP16/BF16 は主に混合精度のトレーニング シナリオで使用され、FP32 トレーニングと比較してメモリ アクセス要件が半分に減り、理論上の計算スループットが 16 倍増加します。
Tensor Core を使用すると、基礎となる cublas または cuda インターフェイスをプログラミングに使用できます。アルゴリズム開発者にとっては、フレームワークで提供される TF32 トレーニング ソリューションまたは混合精度トレーニング ソリューションを使用する方が簡単です。
1 つ目は TF32 トレーニング モードです。TF32 は Ampere によって導入されました。
TF32 浮動小数点数の式には、8 つの指数ビット、10 の仮数ビット、1 つの符号ビットがあります。指数ビットはFP32と同じ、つまりデータ表現範囲は同じですが、仮数ビットはFP32より下位でFP16と同じです。
TF32 はオープンな数値型ではなく、Tensor Core の計算モードであるため、ユーザーが TF32 型の浮動小数点数を直接作成することはできないことに注意してください。
TF32 が有効な場合、Tensor コアは行列の計算または畳み込み演算時に FP32 を TF32 に自動的に変換します。計算が完了した後も、出力データ型は FP32 型のままです。
TF32 トレーニングは、一部のフレームワーク バージョンではデフォルトで有効になっています。一部のフレームワーク バージョンでは、環境変数またはパラメータ設定を通じて手動で有効にする必要がある場合があります。詳細については、フレームワークのユーザー マニュアルを参照してください。
ただし、TF32 は FP32 に比べて精度範囲が狭いため、実際のトレーニング時はモデルの収束精度への影響に注意する必要があります。
- オペレーターのブラックとホワイト リストのメカニズム、フレームワークはブラックとホワイトのリストを使用して、オペレーターの精度を自動的に選択しますモデルのトレーニング プロセス中に、開発者の介入なしに、型変換のためのキャスト操作が自動的に挿入されます。数値精度に敏感な計算には、引き続き FP32 が使用されます。行列の乗算など、数値的に安全な計算には、FP16 が使用されます。
- トレーニング プロセス中に、FP32 の重みパラメータのコピーが保存されますトレーニング中にパラメータを更新し、丸め誤差の問題を最適化するために使用されます;
- FP16 の簡単なオーバーフローの問題を解決するには、Loss を n 倍に拡大するなど、Loss スケーリング ソリューションが使用されます。連鎖律、勾配も同様にしてFP16の表現範囲に収まるようにn倍に拡大する具体的な処理を下図の左側に示します。
現在、すべてのフレームワークは混合精度をサポートしています。 AIAK トレーニング コンポーネントでは、NVIDIA Apex に AMP O2 混合精度モードがさらに導入され、より多くの計算をより積極的に FP16 に転送してトレーニングを加速します。デフォルトの O1 モードと比較すると、速度はさらに向上しますが、精度が影響を受ける可能性があるため、特定のモデルで検証する必要があります。
AIAK-Training は、トーチアンプのネイティブな使用法と互換性のある使用法を提供し、O2 モードを簡単に有効にすることができます。
#次に、コミュニケーションの最適化について紹介します。これも非常に大きなトピックであり、多くの内容が含まれます。
前述したように、1 枚のカードから複数のカードに拡張するには複数のカード間のデータ同期が必要となるため、通信は主に分散トレーニングで導入され、これらの同期操作は通信によって実装されます。
次の図は、通信最適化のための全体的なアーキテクチャを示しています。
- 最下層は、従来の TCP ネットワークを含むネットワーク プロトコル層であり、トレーニング シナリオでますます使用されています。 RoCE または IB 用の RDMA ネットワーク。 Baidu Baige は、これらの基盤となるネットワーク ソリューションのサポートも提供します。明らかに、ハードウェア インフラストラクチャを改善してネットワーク帯域幅を増やし、遅延を短縮することが、通信パフォーマンスを最適化する最も直接的かつ効果的な方法です。
- 次に、通信ライブラリ層があります。通信には基礎となるネットワーク プロトコルを使用する必要があり、実際のアプリケーションにはポイントツーポイント通信、集団通信などの複数の通信プリミティブが含まれる可能性があるため、高度にカプセル化され最適化された通信ライブラリもいくつか登場しています。 GPU トレーニング シナリオでは、通常、より優れたパフォーマンスを持つ NCCL 通信ライブラリを使用します。
- 基礎となる通信ライブラリに基づいて、上位層フレームワークは分散トレーニング通信アーキテクチャをより簡単に構築できます。一般的なものには、パラメータ サーバー アーキテクチャと集団通信アーキテクチャがあります。現在、CV/NLP などのモデルは主に集合通信アーキテクチャを採用しています。
- 通信戦略層では、主にアプリケーション層の通信効率を最適化するため、通信の隠蔽、通信の融合、通信の圧縮、通信頻度の削減などの工夫が行われており、これらの手法の多くは重ね合わせて使用することも可能です。 。
# まず、コミュニケーション戦略レベルでの最適化のアイデアを見てみましょう。1 つ目は、コミュニケーションの隠れた最適化です。
データ並列処理では、学習の逆方向に勾配同期通信を行い、逆方向に勾配を計算した後、グローバル勾配平均を行うことができます。
機構の最適化を行わないと、逆算と通信がシリアルに行われるため、計算に時間差が生じます。
逆プロセスでは、前の勾配の通信と次の勾配の計算の間にデータの依存関係がないため、前の勾配の通信と次の勾配の計算を並列化でき、 2 対 2 つのユーザーの時間が重なることで、通信に時間がかかる部分が隠蔽されます。
実装レベルでは、通信演算子と計算演算子は通常、異なる cuda ストリームにスケジュールされます。通信演算子は通信ストリームにスケジュールされ、計算演算子は計算ストリームにスケジュールされ、異なるストリームでの計算はサブステップとして実行できます。並行して起動および実行されるため、勾配通信と逆方向の計算の並行オーバーラップが実現します。
現在、この最適化機能はフレームワークでデフォルトで有効になっています。
2 つ目は、通信統合の最適化です。
デフォルトでは、モデル内の各グラデーションは通信操作を開始する必要があります。単一の勾配のサイズが比較的小さい場合、小さなデータ パケットが実際に通信されると、ネットワーク帯域幅の使用率が非常に低くなり、通信パフォーマンスが低下します。
通信融合とは、1 つの通信に対して複数の勾配を融合することであり、通信オーバーヘッド モデルの分析から、帯域幅の使用率を向上させるだけでなく、通信の初期化遅延期間を短縮することもできます。
現在、多くの分散トレーニング フレームワークは、デフォルトで勾配融合戦略もサポートしています。さまざまなフレームワークの実装方法には特定の違いがあります。最初に通信シーケンスを決定するために勾配ネゴシエーションが必要な実装もあれば、静的通信を直接使用する実装もあります。バケット。
フレームワークはデフォルトで通信フュージョンをサポートしていますが、勾配フュージョンのサイズは一般にパラメータを通じて設定できます。ユーザーは物理環境とモデルのニーズに応じて適切なフュージョンしきい値を調整でき、次のことができるはずです。より良い利益を達成します。
低帯域幅の TCP 環境など、ネットワーク帯域幅が狭いトレーニング シナリオの場合、勾配同期の遅延がトレーニングの主なパフォーマンスのボトルネックになる可能性があります。
- この場合、考えられる最適化方法の 1 つは通信の圧縮です。通信圧縮には、主に 3 つの異なる圧縮アイデアがあります。
- 量子化圧縮。勾配を表すために低精度を使用するなど、この方法は圧縮率が低く、32 ビットから最大 1 ビットまで圧縮できます。最大圧縮32倍です。
- スパース圧縮、DGC アルゴリズムなどの一般的なアルゴリズムの中心的な考え方は、各反復で重要な勾配、つまり勾配値が設定されたしきい値を超えるだけを送信し、同時に情報を削減することです。重要でない勾配はローカルに蓄積されますが、十分な時間がある限り、蓄積された勾配は最終的に設定されたしきい値を超え、勾配の交換が実行されます。このようにして、通信データ量が削減され、ネットワーク帯域幅の需要が削減されます。同時に、モデルの収束への影響を軽減するために、運動量補正、勾配クリッピング、運動量係数マスキング、予熱トレーニングなどのさまざまな方法によっても軽減されます。このソリューションは現在、主に SGD オプティマイザーをサポートしています。
- 低ランク行列圧縮方式、PowerSGD などの代表的なアルゴリズムの中心となるアイデアは、大きな勾配行列を複数の小さな勾配行列に分解し、小さな行列を送信することで通信量を削減することです。
# 通信頻度削減の最適化、最も単純なアイデアは、バッチ サイズを増やし、反復ごとにデータを増やし、反復数を減らす、つまり通信を減らすことです。量。
ただし、バッチサイズは大きいほど良いため、バッチサイズを大きくすると、モデルの収束精度が低下したり、収束速度が遅くなる可能性があります。同様の問題に対応して、業界は、同様の問題を軽減するために層を通じて学習率を適応的に調整する LARS や LAMB などの最適化アルゴリズムも提案しており、AIAK-Training のサポートも追加されています。
バッチサイズを増やすために、ビデオ メモリが十分であれば、バッチサイズ スーパー パラメータを直接調整できます。ビデオ メモリが不足している場合は、勾配の蓄積によっていくつかの勾配通信をスキップすることもできます。これは実際にはバッチ サイズを増やすことと同じです。
次に、通信トポロジの最適化ソリューションである階層トポロジ通信を紹介します。これは、マシン間のネットワーク帯域幅が比較的低い状況も対象としています。
階層通信により、マシン内の高い相互接続帯域幅を最大限に活用しながら、マシン間の低いネットワーク帯域幅の影響を弱めることができます。
この通信ソリューションは AIAK にも実装されています。25Gbps TCP 環境で、32 枚のカードを備えた 4 台のマシンで SwinTransformer トレーニングがテストされました。階層化された allreduce により、パフォーマンスは 85% 高速化できます。
最後に、基盤となる通信ライブラリ レベルでの最適化である GPU Direct RDMA 通信テクノロジを導入します。このテクノロジには、RDMA ネットワークをサポートするハードウェア環境が必要です。
RDMA 通信を使用すると、ローカル アプリケーションがリモート アプリケーションのユーザー モード仮想メモリを直接読み書きできるようになります。CPU の参加が必要な送信リクエストを送信する最初のステップを除く通信プロセス全体は、ネットワーク カード ハードウェアによって完了し、メモリのコピー、システムの割り込み、ソフトウェア処理を必要としないため、非常に低い遅延と高帯域幅を実現できます。
GPU シナリオでは、GPU Direct RDMA テクノロジにより、GPU ビデオ メモリに直接アクセスするための RDMA のサポートがさらに追加され、通信中に GPU ビデオ メモリとホスト メモリの間でデータが往復コピーされることが回避され、クロスマシン通信がさらに削減されます。遅れます。
しかし、実際のケースでは、一部のユーザーが RDMA 環境を購入したが、実際には GDR テクノロジーを使用せず、その結果、通信効率が低下していることが判明しました。ここにはいくつかの主要な構成項目がリストされています。同様の問題が発生した場合は、トラブルシューティングを行って順番に設定できます。
現在の主なパフォーマンス最適化のアイデアとソリューションのいくつかを紹介しましたが、全体として、I/O の最適化、コンピューティングの最適化、通信の最適化に関係なく、最も単純な最適化のアイデアは主に次のようなものです。操作自体を最適化するか、操作の回数を減らすことができるか、操作を他のプロセスと並列化してオーバーヘッドを隠すことができるかなど。
3. AIAK トレーニング アクセラレーション キットの実践
これまでに多くの最適化作業が導入されてきましたが、これを正しく有効にするには、各ユーザーが AIAK トレーニング アクセラレーション キットのエンジニアリング実装原則を明確に理解する必要があります。フレームワーク。トレーニング最適化のコストを簡素化するために、AIAK-Training 高速化パッケージを構築しました。
AIAK-Training は、データ読み込み、モデル計算、通信などを中心としたフルリンク最適化機能を構築します。同時に、この最適化機能をシンプルで使いやすいインターフェイスにカプセル化し、ユーザーは数行のコードを挿入できるため、統合的に使用するとさらに便利になります。同時に、ユーザーが効果的な最適化戦略を自動的に選択できるように、戦略の組み合わせを自動化して最適化するメカニズムも構築しています。
特別に使用する場合、アクセラレーション ライブラリ コンポーネントを個別にインストールしてデプロイすることも、提供されているコンテナー イメージを直接使用することもできます。
以上がAIトレーニング加速原理分析とエンジニアリング実践の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











クロスチェーントランザクションをサポートする交換:1。Binance、2。Uniswap、3。Sushiswap、4。CurveFinance、5。Thorchain、6。1inchExchange、7。DLNTrade、これらのプラットフォームはさまざまな技術を通じてマルチチェーン資産トランザクションをサポートします。

Binanceは、グローバルデジタルアセット取引エコシステムの大君主であり、その特性には次のものが含まれます。1。1日の平均取引量は1,500億ドルを超え、500の取引ペアをサポートし、主流の通貨の98%をカバーしています。 2。イノベーションマトリックスは、デリバティブ市場、Web3レイアウト、教育システムをカバーしています。 3.技術的な利点は、1秒あたり140万のトランザクションのピーク処理量を伴うミリ秒のマッチングエンジンです。 4.コンプライアンスの進捗状況は、15か国のライセンスを保持し、ヨーロッパと米国で準拠した事業体を確立します。

WorldCoin(WLD)は、独自の生体認証とプライバシー保護メカニズムを備えた暗号通貨市場で際立っており、多くの投資家の注目を集めています。 WLDは、特にOpenai人工知能技術と組み合わせて、革新的なテクノロジーを備えたAltcoinsの間で驚くほど演奏しています。しかし、デジタル資産は今後数年間でどのように振る舞いますか? WLDの将来の価格を一緒に予測しましょう。 2025年のWLD価格予測は、2025年にWLDで大幅に増加すると予想されています。市場分析は、平均WLD価格が1.31ドルに達する可能性があり、最大1.36ドルであることを示しています。ただし、クマ市場では、価格は約0.55ドルに低下する可能性があります。この成長の期待は、主にWorldCoin2によるものです。

暗号通貨市場での突入は投資家の間でパニックを引き起こし、Dogecoin(Doge)は最も困難なヒット分野の1つになりました。その価格は急激に下落し、分散財務財務(DEFI)(TVL)の総価値が激しく減少しました。 「ブラックマンデー」の販売波が暗号通貨市場を席巻し、ドゲコインが最初にヒットしました。そのdefitVLは2023レベルに低下し、通貨価格は過去1か月で23.78%下落しました。 DogecoinのDefitVLは、主にSOSO値指数が26.37%減少したため、272万ドルの安値に低下しました。退屈なDAOやThorchainなどの他の主要なDefiプラットフォームも、それぞれ24.04%と20減少しました。

2025年のレバレッジド取引、セキュリティ、ユーザーエクスペリエンスで優れたパフォーマンスを持つプラットフォームは次のとおりです。1。OKX、高周波トレーダーに適しており、最大100倍のレバレッジを提供します。 2。世界中の多通貨トレーダーに適したバイナンス、125倍の高いレバレッジを提供します。 3。Gate.io、プロのデリバティブプレーヤーに適し、100倍のレバレッジを提供します。 4。ビットゲットは、初心者やソーシャルトレーダーに適しており、最大100倍のレバレッジを提供します。 5。Kraken、安定した投資家に適しており、5倍のレバレッジを提供します。 6。Altcoinエクスプローラーに適したBybit。20倍のレバレッジを提供します。 7。低コストのトレーダーに適したKucoinは、10倍のレバレッジを提供します。 8。ビットフィネックス、シニアプレイに適しています

仮想通貨価格の上昇の要因には、次のものが含まれます。1。市場需要の増加、2。供給の減少、3。刺激された肯定的なニュース、4。楽観的な市場感情、5。マクロ経済環境。衰退要因は次のとおりです。1。市場需要の減少、2。供給の増加、3。ネガティブニュースのストライキ、4。悲観的市場感情、5。マクロ経済環境。

暗号通貨の賑やかな世界では、新しい機会が常に現れます。現在、Kerneldao(Kernel)Airdropアクティビティは多くの注目を集め、多くの投資家の注目を集めています。それで、このプロジェクトの起源は何ですか? BNBホルダーはそれからどのような利点を得ることができますか?心配しないでください、以下はあなたのためにそれを一つ一つ明らかにします。

Aavenomicsは、Aaveプロトコルトークンを変更し、Aavedaoの定足数を実装したToken Reposを導入する提案です。 Aave Project Chain(ACI)の創設者であるMarc Zellerは、これをXで発表し、契約の新しい時代をマークしていることに注目しました。 Aave Chain Initiative(ACI)の創設者であるMarc Zellerは、Aavenomicsの提案にAave Protocolトークンの変更とトークンリポジトリの導入が含まれていると発表しました。 Zellerによると、これは契約の新しい時代を告げています。 Aavedaoのメンバーは、水曜日の週に100でした。
