Profil di PyTorch (Bagian 3): Profil adalah yang utama
PyTorch
NVIDIA
Tulisan ini memprofil mekanisme attention di PyTorch, membandingkan attention naif, optimasi in-place, dan backend Scaled Dot Product Attention (SDPA). Hasilnya menunjukkan bahwa backend matematika SDPA lebih lambat daripada attention naif karena pemanfaatan Tensor Core yang kurang maksimal, rekonstruksi mask, dan overhead softmax aman.
Posting ketiga dalam seri Profiling di PyTorch ini memprofil mekanisme atensi. Dimulai dengan modul atensi naif (matmul, scaling, masking, softmax, matmul) dan tracenya menunjukkan 5 kernel GPU per forward pass. Mengganti masked_fill (out-of-place) dengan masked_fill_ (in-place) menghilangkan satu kernel salinan memori, menghemat waktu dan memori. Selanjutnya, Scaled Dot Product Attention (SDPA) diperkenalkan; backend matematikanya, meskipun lebih aman (menangani kasus NaN) dan lebih presisi (FP32), 3,7 kali lebih lambat daripada atensi naif karena meluncurkan 20 kernel GPU, tidak menggunakan Tensor Core (menggunakan sgemm, bukan bf16 Tensor Core matmul), membangun ulang mask kausal setiap panggilan, dan menggunakan _safe_softmax. Postingan ini mencatat bahwa secara normal SDPA memilih backend tercepat secara otomatis.
Sumber: Hugging Face blog —
asli
