Skip to content

CuFlash-Attn从零实现的 CUDA FlashAttention

技术白皮书 · O(N) 内存 · FP32/FP16 · 前向与反向

CuFlash-Attn
v0.3.0稳定版
99.9%内存节省
8.9x最大加速
0依赖项

O(N) 内存

通过 FlashAttention 分块技术,在单 GPU 上处理 16K+ token 序列。HBM 中不存储 O(N²) 注意力矩阵。

算法详解 →
📦

零依赖

纯 CUDA C++,无 PyTorch、无 Cutlass、无 Triton。理解每一行代码,修改每一个细节。

Kernel 逐行解读 →
🔄

完整训练支持

前向与反向传播,含梯度重计算。FP32 与 FP16,数值安全累加。

API 参考 →
🎯

多架构覆盖

针对 Volta 到 Hopper(sm_70 → sm_90)优化。支持 V100、A100、H100 及消费级 GPU。

基准测试 →
📐

稳定 C ABI

稳定的 C ABI,便于与 Python、Rust 或任何支持 FFI 的语言集成。

C API 文档 →
🔬

轻量维护

文档、工作流与仓库结构保持精简,并与实际库边界持续对齐。

项目状态 →

⚡ 内存效率

FlashAttention 将内存复杂度从 O(N²) 降至 O(N),支持更长的序列训练。

序列长度标准注意力FlashAttention内存节省
1,0244 MB8 KB99.8%
4,09664 MB32 KB99.95%
16,3841 GB128 KB99.99%
65,53616 GB512 KB99.97%

🚀 吞吐量对比

在 NVIDIA A100 80GB 上测试,FP16 精度,启用因果掩码。

配置FlashAttention标准注意力加速比
Batch=1, Seq=102445.2 tok/s12.1 tok/s3.7x
Batch=8, Seq=1024312.5 tok/s45.3 tok/s6.9x
Batch=32, Seq=1024892.1 tok/s98.7 tok/s9.0x

快速开始

5 分钟内构建并运行:

bash
git clone https://github.com/AICL-Lab/cuflash-attn.git
cd cuflash-attn

cmake --preset release
cmake --build --preset release

ctest --preset release --output-on-failure
cpp
#include "cuflash/flash_attention.h"

auto err = cuflash::flash_attention_forward(
    d_Q, d_K, d_V, d_O, d_L,
    batch_size, num_heads, seq_len, head_dim,
    scale, true, stream
);
python
import ctypes
lib = ctypes.CDLL("./build/release/libcuflash_attn.so")

lib.cuflash_attention_forward_f32(
    q_ptr, k_ptr, v_ptr, o_ptr, l_ptr,
    B, H, N, D, scale, True, None
)

核心参考文献

FlashAttention — Dao et al., NeurIPS 2022.
arXiv:2205.14135
FlashAttention-2 — Dao, ICLR 2024.
arXiv:2307.08691
Online Softmax — Milakov & Gimelshein.
arXiv:1805.02867

Stable v0.3.0 baseline. Lean CUDA FlashAttention reference.