AIの学習を速くする方法
How to Speed Up Transformer Training Using NVIDIA Apex (FusedAdam, FusedLayerNorm) and Native torch.amp

AIが文章を学ぶ速度を上げるための具体的な技術が紹介されました。これにより、AI開発者はより効率的に高性能なAIを作れます。
このチュートリアルでは、現代のGPUトレーニングワークフローで依然として重要なコンポーネントに焦点を当て、NVIDIA Apexの実装について詳しく説明します。Apexを一般的な混合精度ライブラリとして扱うのではなく、古い部分と依然として有用な部分を分離し、それらを直接テストします。
まず、CUDAランタイムを確認し、必要なCUDAおよびC++拡張機能を使用してApexをビルドし、どのfused kernelsが環境で実際に利用可能かを検出します。これは、PythonのみのApexインストールが成功したように見えても、Apexを有用にする高性能なkernelsが silently に欠落している可能性があるため重要です。
セットアップ後、FusedAdamをPyTorch AdamWと比較し、FusedLayerNormとFusedRMSNormを標準の正規化層と比較し、従来のapex.ampと最新のtorch.ampの両方の例を実行します。
その後、小規模なTransformerトレーニング実験ですべてをまとめ、バニラのFP32 PyTorchパスと、fused ApexとAMPを組み合わせたパスを比較して、スループットへの実際の影響を評価します。
Copy Code Copied Use a different Browser
import os, sys, time, subprocess, importlib
import torch
assert torch.cuda.is_available(), (
"No CUDA GPU found. In Colab: Runtime > Change runtime type > Hardware accelerator = GPU"
)
DEV = torch.device("cuda")
print(f"[env] torch {torch.__version__} | CUDA {torch.version.cuda} | GPU {torch.cuda.get_device_name(0)}")
def _module_present(name: str) -> bool:
try:
importlib.import_module(name)
return True
except Exception:
return False
def _build_apex():
print("[apex] building from source with CUDA + C++ extensions "
"(~10-20 min on first run; grab a coffee)...")
subprocess.run([sys.executable, "-m", "pip", "install", "-q", "ninja", "packaging"], check=True)
if not os.path.isdir("apex"):
subprocess.run(["git", "clone", "--depth", "1", "https://github.com/NVIDIA/apex"], check=True)
env = os.environ.copy()
env["APEX_CPP_EXT"] = "1"
env["APEX_CUDA_EXT"] = "1"
env["MAX_JOBS"] = "4"
env["NVCC_APPEND_FLAGS"] = "--threads 4"
cmd = [sys.executable