🟡 📦 オープンソース 公開日: · 1 分で読めます ·

PyTorch:torch.compileがカーネルフュージョンにより最大10倍の高速化を実現する仕組み

Urednička ilustracija: Kako torch.compile postiže ubrzanje do 10× kroz kernel fusion

PyTorchコンパイラのtorch.compileは、カーネルフュージョンによってグローバルメモリへの冗長な書き込みを排除することでGPU上で最大10倍の高速化を実現します。各演算に個別のGPUカーネルを使用する代わりに、Inductorコンパイラはプロセッサのレジスタに中間値を保持する単一カーネルに依存関係のある演算を自動的にマージします。

🤖

この記事はAIにより一次情報源から生成されました。

PyTorchのコンパイラtorch.compileはモデルコードを1行も変更せずに最大10倍の高速化を実現します。

GPUメモリがモデルのトレーニングを遅くする理由

GPUカーネルの実行には固定のオーバーヘッドが伴います。フュージョンなしで3つの連続したポイントワイズ演算を行うには8つのテンソルI/O操作が必要です。カーネルフュージョン後は4つの操作で済み、メモリトラフィックを50%削減できます。

torch.compileが自動的にカーネルをマージする仕組み

Inductorコンパイラは以下を適用します:

  • 垂直フュージョン:依存演算をマージし、中間値をGPUレジスタに保持
  • ポイントワイズフュージョンmultiply → add → sigmoidを1つのTritonカーネルに
  • リダクションフュージョン:バッチ正規化向け
  • GEMM + エピローグフュージョン:行列乗算の終わりに直接バイアスと活性化関数を適用
  • 水平フュージョン:独立した演算を並列実行

実際のカーネルで起こること

Tritonカーネルは中間値をGPUレジスタに保持し、最後にのみ結果を書き込みます。カーネルはtriton_poi_fused_*およびtriton_per_fused_*という名前です。

結果と適用

実際のモデルで最大10倍の高速化。必要なのは以下の1行だけです:

model = torch.compile(model)

よくある質問

torch.compileはどのように自動的にカーネルをマージしますか?
Inductorコンパイラは垂直フュージョン(依存演算のマージ、中間値をGPUレジスタに保持)、ポイントワイズフュージョン、リダクションフュージョン、GEMMとエピローグのフュージョン、水平フュージョンを適用します。
実際のモデルでどのような高速化が得られますか?
実際のモデルで最大10倍の高速化が得られます。model = torch.compile(model)の1行で十分です。

📬 AIニュースをあなたの受信箱へ

毎日のダイジェストを自分仕様に——トピック、ソース、頻度を選べます。ワンクリックで解除。