AI News HubLIVE
サイト内リライト1 分で読了

NVIDIA Apex(FusedAdam、FusedLayerNorm)とネイティブ torch.amp を用いた Transformer トレーニングの高速化方法

NVIDIA Apex をソースからビルドし、融合カーネルを検出し、FusedAdam、FusedLayerNorm、torch.amp を Transformer トレーニングでベンチマークします。

ソースMarkTechPost著者: Sana Hassan

本チュートリアルでは、NVIDIA Apex の実装を詳細に説明し、現代の GPU トレーニングワークフローで依然として重要なコンポーネントに焦点を当てます。まず CUDA 実行環境を確認し、ソースから Apex をビルド(CUDA および C++ 拡張を含む)、環境で実際に使用可能な融合カーネルを検出します。純粋な Python インストールは成功しても高パフォーマンスカーネルがない場合があるため、これは重要です。

ビルド後、FusedAdam と PyTorch AdamW のベンチマーク比較、FusedLayerNorm および FusedRMSNorm と標準正規化層の比較、非推奨の apex.amp と現代の torch.amp の例を実行します。最後に、小規模な Transformer トレーニング実験でこれらを統合し、純粋な FP32 PyTorch パスと融合 Apex+AMP パスを比較してスループットへの実際の影響を評価します。

実験セットアップ:CUDA GPU の可用性確認、依存関係のインストール、Apex ソースのクローンとビルド。amp_C および fused_layer_norm_cuda モジュールの存在を確認してカーネル可用性を判断。

ベンチマーク結果:

  • FusedAdam:AdamW と比較して最適化ステップで約2.67倍高速。
  • FusedLayerNorm:標準 LayerNorm と比較して順方向+逆方向で約1.87倍高速。
  • FusedRMSNorm:FusedLayerNorm と類似、LLaMA スタイルモデルに使用。

混合精度セクションでは、非推奨の apex.amp と推奨される torch.amp の使用法をデモ。エンドツーエンドの Transformer トレーニング(語彙2000、隠れ次元256、4層)では、FusedAdam、FusedLayerNorm、torch.amp(FP16)を使用すると、純粋な FP32 ベースラインと比較してスループットが約1.48倍向上し、損失は同様に収束。

結論:FusedAdam、FusedLayerNorm、FusedRMSNorm は Apex の関連部分;apex.amp は非推奨のため torch.amp を使用;融合カーネルはネイティブ torch.amp と適切に連携;実ワークロードではより大規模なモデルと bf16 自動キャストを推奨。