PyTorch 프로파일링 시리즈 3편으로, 어텐션을 프로파일러 트레이스로 뜯어보며 최적화를 이끄는 방법을 다룬다. 손으로 짠 나이브 어텐션(matmul·mul·mask·softmax·matmul)에서 out-of-place masked_fill이 숨은 Memcpy 커널을 만드는 것을 발견하고, masked_fill_로 바꿔 커널 하나를 제거한다. F.scaled_dot_product_attention의 math 백엔드는 FP32로 업캐스트해 텐서코어를 쓰지 않고 마스크를 매번 재생성해 순전파당 20개 커널을 띄우며 나이브 대비 3.7배 느린 '정확하지만 느린' 기준 구현임을 보인다. 반면 efficient(xformers fmha_cutlassF)·flash(FlashAttention-2)·cuDNN 백엔드는 bf16을 유지한 채 단일 융합 커널로 압축된다. Flash는 온칩에 타일을 유지해 점유율이 13%로 낮아 보여도 가장 빠르며, cuDNN은 문제별로 커널을 생성하지만 비용이 CPU 쪽으로 옮겨간다. 핵심 교훈은 '먼저 예상하고 트레이스를 열어 불일치를 파고들라'는 것이다.
- •out-of-place masked_fill이 숨은 Memcpy 커널을 만들며, masked_fill_ 인플레이스로 바꿀면 커널 제거
- •SDPA math 백엔드는 FP32 업캐스트·매번 마스크 재생성으로 20개 커널, 나이브 대비 3.7배 느린 기준 구현
- •efficient·flash·cuDNN은 bf16 유지 단일 융합 커널로 압축, 텔서코어 활용
- •FlashAttention-2는 온칩 타일 유지로 점유율 13%로 낮아 보여도 가장 빠름
- •cuDNN은 문제별 커널을 생성해 transpose가 없지만 비용이 CPU 측으로 이동
0단 자동
AI가 규칙대로 쓰고 그대로 게시했습니다. 사람이 따로 보지 않았습니다.
- 규칙 판
- 규칙 판 도입 이전 기사입니다.
- 남기는 것
- 규칙 판 · 모델 · 시각
- 판 기록
- 아직 없습니다.
Profiling in PyTorch (Part 3): Attention is all you profile
- 1.PyTorch 프로파일링 시리즈 3편, 어텐션 구현별 프로파일러 트레이스 차이 분석
- 2.masked_fill을 인플레이스로 바꾸는 한 줄로 forward당 Memcpy 커널 1개 제거
- 3.SDPA math 백엔드는 FP32 업캐스트·마스크 재생성으로 커널 20개, 수기 구현보다 3.7배 느림
- 4.flash·efficient·cuDNN은 단일 융합 커널, flash의 13% 점유율은 의도된 설계
왜 중요한가?
A100 실측 트레이스로 SDPA 백엔드별 커널 동작을 비교 검증해, '점유율 낮음=비효율' 같은 프로파일러 해석 오류를 바로잡고 어텐션 최적화 실무에 바로 쓸 수 있는 가이드를 제공한다.
전체 내용이 궁금하다면?
원문을 직접 읽어보세요
이 글이 만들어진 과정
- 19:58AI 초안

