연구오픈 소스 🇺🇸 29.07.2026 23:03

PyTorch 프로파일링 (3부): 프로필링은 어텐션에 달려 있다

PyTorchPyTorch NVIDIANVIDIA
이 글에서는 PyTorch에서의 어텐션 메커니즘을 프로파일링합니다. 네이티브 어텐션, 인플레이스 최적화, 그리고 Scaled Dot Product Attention(SDPA) 백엔드를 비교합니다. SDPA의 수학 백엔드는 텐서 코어 활용 부족, 마스크 재구성, 안전한 소프트맥스 오버헤드로 인해 네이티브 어텐션보다 느린 것으로 나타났습니다.
PyTorch 프로파일링 시리즈의 세 번째 글에서는 어텐션 메커니즘을 프로파일링합니다. 기본적인 어텐션 모듈(matmul, 스케일링, 마스킹, 소프트맥스, matmul)부터 시작하여, 그 트레이스에서는 순전파당 5개의 GPU 커널이 나타납니다. Out-of-place인 masked_fill을 in-place인 masked_fill_로 대체하면 메모리 복사 커널이 제거되어 시간과 메모리를 절약할 수 있습니다. 다음으로 스케일드 닷 프로덕트 어텐션(Scaled Dot Product Attention, SDPA)을 소개합니다. SDPA의 수학적 백엔드는 NaN 케이스를 처리하는 더 안전하고 FP32로 더 정밀하지만, 기본 어텐션보다 3.7배 느린데, 이는 20개의 GPU 커널을 실행하고, 텐서 코어를 사용하지 않으며(bf16 텐서 코어 matmul 대신 sgemm 사용), 호출할 때마다 인과 마스크를 재구성하며, _safe_softmax를 사용하기 때문입니다. 이 글에서는 SDPA가 일반적으로 가장 빠른 백엔드를 자동으로 선택한다고 언급합니다.
출처: Hugging Face blog — 원문
관련 게시물 ↓
새로운 뉴스