Article
PyTorch Profiling Teil 3: Attention ist alles was du profilierst
![]()
Die Profiling-in-PyTorch-Serie
Hugging Face setzt seine Profiling-Serie fort mit Attention-Mechanismen – dem Herzstück moderner Transformer-Architekturen. Nach den Grundlagen in Teil 1 (Mathe-Operationen) und Teil 2 (Linear Layers und Fused MLPs) geht es nun um die quadratische Zeitkomplexität und wie man sie optimiert.
Serie-Übersicht:
- Part 1: Beginner’s Guide zu
torch.profiler - Part 2: Von
nn.Linearzu Fused MLP - Part 3: Attention Profiling (aktuell)
Attention unter der Lupe
Attention arbeitet mit Queries (q), Keys (k) und Values (v). Die Schritte:
- Attention Scores berechnen:
matmul(q, k.T) - Skalieren:
scores * scale - Causal Mask anwenden:
scores.masked_fill(mask, "-inf") - Softmax-Normalisierung:
softmax(scores) - Values neu gewichten:
matmul(attn, v)
Das Ziel: Nicht jede Optimierung im Detail zu erklären, sondern zu zeigen, wie jede unter dem Profiler aussieht.
Implementierungs-Varianten
Der Blogpost deckt vier Implementierungen ab:
1. Naive Attention
Die direkte Implementation aller fünf Schritte in PyTorch. Zeigt die Baseline-Performance und wo die Bottlenecks liegen.
2. In-Place Operations
Speicheroptimierte Variante mit In-Place-Operationen. Reduziert Memory-Allocation, aber wie sieht das im Profiler aus?
3. SDPA (Scaled Dot-Product Attention)
PyTorch’s eingebaute F.scaled_dot_product_attention – optimiert und fused.
4. Custom Kernels
Handoptimierte CUDA-Kernel wie Flash Attention. Was zeigt der Profiler bei maximaler Optimierung?
Profiler-Insights
Die Profiler-Traces und Tabellen zeigen:
- Memory-Bandwidth vs. Compute – Wo liegt der Engpass?
- Kernel-Fusion – Welche Operationen werden zusammengefasst?
- Quadratic Scaling – Wie verhält sich Attention bei steigender Sequenzlänge?
- Flash Attention Patterns – Wie unterscheidet sich die optimierte Implementation?
Setup für Experimente
Die Scripts laufen auf NVIDIA A100-SXM4-80GB GPUs. Hugging Face bietet zwei Wege zum Reproduzieren:
- Dev Mode with Spaces – Einfache GPU-Umgebung
- Hugging Face Jobs Pipeline – Skalierbare Ausführung
python 04_a_naive_attention.py
python 04_b_inplace_ops_attention.py
python 04_c_sdpa_attention.py
python 04_d_kernels_attention.py
Key-Takeaways für ML-Engineers
- Profiler lesen lernen – Traces zeigen mehr als Scores: Sie zeigen Memory-Patterns
- Attention ist nicht gleich Attention – Naive vs. SDPA vs. Flash Attention haben unterschiedliche Profiling-Signaturen
- Quadratic Complexity verstehen – Der Profiler macht die Skalierungsproblematik sichtbar
- Optimierung validieren – Behauptungen über Performance-Gains sollten im Profiler verifiziert werden
Original-Artikel: Profiling in PyTorch (Part 3): Attention is all you profile
Autoren: Aritra Roy Gosthipaty, Sergio Paniego, Sayak Paul, Rémi Ouazan Reboul
Datum: 10. Juli 2026
Scripts: GitHub Repository