
HuggingFace、単一nn.Linearでtorch.compileが効かない理由とフュージョンの重要性を解説
HuggingFaceによるPyTorchプロファイリングの第2弾ポストは、nn.LinearからフュージョンされたMLPカーネルまでを解説している。バイアス加算はすでにcuBLAS GEMMのエピローグに組み込まれており、単一レイヤーではtorch.compileがフュージョンする余地が残されていないことを示している。スクリプトと注釈付きのトレースも公開されており、開発者はカスタムカーネルの実装に移行する前に、レイヤーがメモリ帯域幅律速であるかを検証できる。
出典: huggingface.co ↗
モデルが遅いと感じると、すぐに torch.compile に手を伸ばすのが一般的な反射だ。単一の GEMM-with-bias の場合、compile ができることはほとんどない。
HuggingFace
なぜ重要か
- → cuBLAS はバイアスを既に GEMM epilogue に融合しているため、torch.compile は単一レイヤーには何も追加しない。
- → コンパイルは、トレース時に stride を事前計算することで、CPU dispatch のオーバーヘッドを取り除く。
- → カーネルフュージョンの要件を理解すれば、開発者は時期尚早な最適化を避けられる。
フュージョンの神話が暴かれる