Profiling no PyTorch (Parte 3): Atenção é tudo que você precisa perfilhar
PyTorch
NVIDIA
Este post faz a perfilhagem de mecanismos de atenção no PyTorch, comparando atenção ingênua, otimização in-place e backends de Atenção de Produto Escalar (SDPA, na sigla em inglês). Revela que o backend matemático do SDPA é mais lento que a atenção ingênua devido à subutilização do Tensor Core, reconstrução de máscara e sobrecarga do softmax seguro.
O terceiro post da série "Profiling in PyTorch" analisa mecanismos de atenção. Começa com um módulo de atenção ingênuo (matmul, escalonamento, mascaramento, softmax, matmul) e seu trace mostra 5 kernels de GPU por forward. Substituir masked_fill por masked_fill_ (in-place) elimina um kernel de cópia de memória, economizando tempo e memória. Em seguida, é apresentada a Scaled Dot Product Attention (SDPA). Seu backend matemático, embora mais seguro (lidando com casos de NaN) e mais preciso (FP32), é 3,7 vezes mais lento que a atenção ingênua porque lança 20 kernels de GPU, não utiliza Tensor Cores (usa sgemm em vez de bf16 Tensor Core matmul), reconstrói a máscara causal a cada chamada e usa _safe_softmax. O post observa que a SDPA normalmente seleciona automaticamente o backend mais rápido.
Fonte: Hugging Face blog —
original
