PyTorch'ta Profil Oluşturma (Bölüm 3): Profile Dikkat Etmeniz Gereken Her Şey
PyTorch
NVIDIA
Bu yazı, PyTorch'taki dikkat mekanizmalarını profiller; naif dikkat, yerinde optimizasyon ve Ölçeklenmiş Nokta Çarpımı Dikkat (SDPA) arka uçlarını karşılaştırır. SDPA'nın matematik arka ucunun, Tensor Core yetersiz kullanımı, maske yeniden oluşturma ve güvenli softmax ek yükü nedeniyle naif dikkatten daha yavaş olduğunu ortaya koyar.
Profiling in PyTorch serisinin üçüncü yazısında dikkat mekanizmaları profilleniyor. İlk olarak basit bir dikkat modülü (matmul, ölçekleme, maskeleme, softmax, matmul) ele alınıyor ve ileri geçiş başına 5 GPU çekirdeği görülüyor. Yerinde olmayan masked_fill işleminin yerinde masked_fill_ ile değiştirilmesi, bir bellek kopyalama çekirdeğini ortadan kaldırarak zaman ve bellek tasarrufu sağlıyor. Ardından, Scaled Dot Product Attention (SDPA) tanıtılıyor; matematik arka ucu, daha güvenli (NaN durumlarını yönetme) ve daha kesin (FP32) olmasına rağmen, 20 GPU çekirdeği başlattığı, Tensor Cores kullanmadığı (bf16 Tensor Core matmul yerine sgemm kullandığı), her çağrıda nedensel maskeyi yeniden oluşturduğu ve _safe_softmax kullandığı için basit dikkatten 3.7 kat daha yavaştır. Yazı, SDPA'nın normalde en hızlı arka ucu otomatik olarak seçtiğini belirtiyor.
Kaynak: Hugging Face blog —
orijinal
