tspeterkim/flash-attention-minimal
tspeterkim/flash-attention-minimal has 1,203 GitHub stars and 121 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-09 08:28 UTC. Last push 2024-12-30.
Flash Attention in ~100 lines of CUDA (forward pass only)
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Originalflash-attention-minimal
A minimal re-implementation of Flash Attention with CUDA and PyTorch. The official implementation can be quite daunting for a CUDA beginner (like myself), so this repo tries to be small and educational.
- The entire forward pass is written in ~100 lines in
flash.cu. - The variable names follow the notations from the original paper.
Usage
Prerequisite
- PyTorch (with CUDA)
Ninjafor loading in C++
Benchmark
Compare the wall-clock time between manual attention and minimal flash attention:
python bench.py
Sample output on a T4:
=== profiling manual attention ===
...
Self CPU time total: 52.389ms
Self CUDA time total: 52.545ms
=== profiling minimal flash attention ===
...
Self CPU time total: 11.452ms
Self CUDA time total: 3.908ms
Speed-up achieved!
I don't have a GPU
Try out this online colab demo.
Caveats
- No backward pass! To be honest, I found it a lot more complex than the forward pass, which was enough to show the use of shared memory to avoid large N^2 read/writes.
- In the inner loop, I assign each thread to a row of the output matrix. This differs from the original implementation.
- This thread-per-row simplification makes the matrix multiplications very slow. This is probably why for longer sequences and larger block sizes, this gets slower than the manual implementation.
- Q,K,Vs are in float32, unlike the original implementation which uses float16.
- The block size is fixed at compile time to 32.
Todos
- Add backward pass
- Speed up matmults -> Check out the
tensorcorebranch - Dynamically set block size
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,398 starspublic-apis/public-apis
A collective list of free APIs
497,679 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
447,495 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,261 stars