Nghiên cứuMã nguồn mở 🇺🇸 29.07.2026 23:03

Lập Hồ Sơ Hiệu Năng trong PyTorch (Phần 3): Attention là tất cả những gì bạn cần lập hồ sơ

PyTorchPyTorch NVIDIANVIDIA
Bài viết này lập hồ sơ hiệu năng các cơ chế attention trong PyTorch, so sánh attention naive, tối ưu hóa tại chỗ và các backend của Scaled Dot Product Attention (SDPA). Kết quả cho thấy backend toán học của SDPA chậm hơn attention naive do tận dụng Tensor Core kém, tái tạo mask và chi phí safe softmax.
Bài viết thứ ba trong loạt bài Profiling in PyTorch phân tích cơ chế chú ý (attention mechanisms). Bắt đầu với một module chú ý đơn giản (nhân ma trận, scaling, masking, softmax, nhân ma trận) và dấu vết (trace) của nó cho thấy 5 kernel GPU mỗi lần forward. Thay thế masked_fill (nơi copy tạo mới) bằng masked_fill_ (nơi thay đổi tại chỗ) loại bỏ một kernel copy bộ nhớ, tiết kiệm thời gian và bộ nhớ. Tiếp theo, Scaled Dot Product Attention (SDPA) được giới thiệu; backend toán học của nó, mặc dù an toàn hơn (xử lý các trường hợp NaN) và chính xác hơn (FP32), chậm hơn 3,7 lần so với chú ý đơn giản vì nó khởi động 20 kernel GPU, không sử dụng Tensor Cores (thay vào đó dùng sgemm thay vì nhân ma trận Tensor Core bf16), xây dựng lại mặt nạ nhân quả (causal mask) mỗi lần gọi, và sử dụng _safe_softmax. Bài viết lưu ý rằng SDPA thường tự động chọn backend nhanh nhất.
Nguồn: Hugging Face blog — bản gốc
Bài viết liên quan trước đây ↓
Tin mới