HPC-AI-Optimization-Lab 是一个教育性和生产级的 CUDA 内核库,专为 AI 推理工作负载设计。它提供了关键 GPU 操作的渐进式优化实现,从基础的逐元素操作到高级的 Tensor Core 矩阵乘法。
| 特性 | HPC-AI-Lab | cuBLAS | CUTLASS |
|---|---|---|---|
| 学习导向 | ✅ 渐进式优化 | ❌ 黑盒 | |
| 生产就绪 | ✅ 已测试和基准测试 | ✅ 高度优化 | ✅ 优化 |
| 易于使用 | ✅ 简单 API + Python | ✅ API | |
| 教育价值 | ✅ 7步GEMM之旅 | ❌ 无 | |
| 现代AI | ✅ FlashAttention, RoPE, FP8 | ✅ 支持 | ✅ 支持 |
适合人群:
- 🎓 学生:从第一性原理学习 CUDA 优化
- 🔬 研究员:原型化新的内核优化
- 🏭 工程师:AI 工作负载的生产级内核
# 克隆、构建和测试
git clone https://github.com/LessUp/hpc-ai-optimization-lab.git
cd hpc-ai-optimization-lab && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release && cmake --build . -j$(nproc)
ctest --output-on-failure| 需求 | 版本 | 说明 |
|---|---|---|
| CUDA Toolkit | 12.4+ | 下载 |
| CMake | 3.24+ | pip install cmake 或系统包 |
| C++ 编译器 | GCC 11+ / Clang 14+ | 需要 C++20 支持 |
| NVIDIA GPU | 计算能力 7.0+ | Volta, Turing, Ampere, Hopper |
# 基础构建(仅核心库)
cmake .. -DCMAKE_BUILD_TYPE=Release
# 带示例和 Python 绑定
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DBUILD_EXAMPLES=ON \
-DBUILD_PYTHON_BINDINGS=ON
# 目标 GPU 架构
cmake .. -DCMAKE_CUDA_ARCHITECTURES="80;90" # A100 + H100# ReLU 示例(逐元素操作)
./examples/elementwise/relu_example
# GEMM 基准测试(全部 7 个优化步骤)
./examples/gemm/gemm_benchmark
# Python 使用(如果启用绑定)
python examples/python/basic_usage.py| 步骤 | 技术 | 性能 | 提速 |
|---|---|---|---|
| 1 | 朴素实现 | 0.5 TFLOPS | 1×(基准) |
| 2 | 共享内存分块 | 2.0 TFLOPS | 4× |
| 3 | 双缓冲 | 3.5 TFLOPS | 7× |
| 4 | 寄存器分块 | 6.0 TFLOPS | 12× |
| 5 | Tensor Core WMMA | 50+ TFLOPS | 100× |
| 6 | Tensor Core MMA PTX | 60+ TFLOPS | 120× |
| 7 | 软件流水线 | 70+ TFLOPS | 140× |
💡 关键洞察:Tensor Core 加速相比朴素实现提供 100× 提速!
| 模块 | 操作 | FP32 性能 | 状态 |
|---|---|---|---|
| 逐元素 | ReLU, Sigmoid, 转置 | 内存受限 | ✅ 稳定 |
| 归约 | Softmax, LayerNorm, RMSNorm | 已优化 | ✅ 稳定 |
| GEMM | 矩阵乘法 | 70+ TFLOPS | ✅ 稳定 |
| 注意力 | FlashAttention, RoPE | IO感知 | ✅ 稳定 |
| 卷积 | 隐式 GEMM | 有竞争力 | ✅ 稳定 |
访问我们 comprehensive 的文档站点:https://lessup.github.io/hpc-ai-optimization-lab/
| 主题 | 英文文档 | 中文文档 |
|---|---|---|
| 入门指南 | Installation | 安装指南 |
| 快速开始 | 5-min Guide | 快速入门 |
| GEMM 优化 | 7-Step Journey | GEMM优化 |
| 访存优化 | Guide | 访存优化 |
| FlashAttention | Guide | FlashAttention |
| 性能调优 | Guide | 性能调优 |
| API 参考 | C++/Python API | API参考 |
🌱 初学者(1-2 周)
├── 安装与快速入门
├── 访存优化(合并访问、向量化)
├── 归约操作(warp洗牌、在线算法)
└── GEMM 步骤1-4(共享内存到寄存器分块)
🚀 进阶(2-4 周)
├── GEMM 步骤5-7(Tensor Core WMMA、MMA PTX、流水线)
├── FlashAttention(IO感知的注意力机制)
└── 性能分析与调优
🏆 高级(持续学习)
├── CUDA 13 Hopper 特性(TMA、Clusters、FP8)
├── CUTLASS 源码研究
└── 论文实现
hpc-ai-optimization-lab/
├── src/ # CUDA 内核实现
│ ├── common/ # 共享工具(Tensor、Timer、CUDA检查)
│ ├── elementwise/ # ReLU、Sigmoid、VectorAdd、转置
│ ├── reduction/ # Softmax、LayerNorm、RMSNorm
│ ├── gemm/ # 7步GEMM优化(旗舰!)
│ ├── convolution/ # 隐式GEMM、Winograd
│ ├── attention/ # FlashAttention、RoPE、TopK
│ ├── quantization/ # INT8/FP8 量化
│ └── cuda13/ # Hopper特性(TMA、Clusters、FP8)
│
├── tests/ # 综合测试套件
│ ├── common/ # 工具测试
│ ├── elementwise/ # 逐元素测试
│ ├── gemm/ # GEMM测试(基于属性)
│ └── ... # 所有模块都已测试
│
├── examples/ # 独立示例
│ ├── elementwise/ # ReLU示例
│ ├── reduction/ # Softmax基准测试
│ ├── gemm/ # GEMM基准测试
│ ├── convolution/ # 卷积示例
│ ├── attention/ # FlashAttention示例
│ ├── quantization/ # 量化示例
│ ├── cuda13/ # CUDA 13示例
│ └── python/ # Python使用示例
│
├── python/ # Python绑定(nanobind)
│ ├── bindings/ # C++绑定代码
│ └── benchmark/ # Python基准测试
│
├── docs/ # 文档(VitePress + Doxygen)
│ ├── en/ # 英文文档
│ ├── zh-CN/ # 中文文档
│ └── .vitepress/ # VitePress配置
│
├── docker/ # Docker环境
│ ├── Dockerfile
│ └── docker-compose.yml
│
└── .github/ # CI/CD 工作流
└── workflows/
├── ci.yml # 持续集成
└── pages.yml # 文档部署
#include "gemm/gemm.cuh"
#include "common/tensor.cuh"
// 分配 GPU 张量
auto A = hpc::common::make_tensor<float>(hpc::common::Device, {M, K});
auto B = hpc::common::make_tensor<float>(hpc::common::Device, {K, N});
auto C = hpc::common::make_tensor<float>(hpc::common::Device, {M, N});
// 启动优化的 GEMM 内核
hpc::gemm::gemm<float, hpc::gemm::OptLevel::Advanced>(
A.data(), B.data(), C.data(), M, N, K, stream);import hpc_ai_opt
import numpy as np
# 创建输入数据
A = np.random.randn(1024, 1024).astype(np.float32)
B = np.random.randn(1024, 1024).astype(np.float32)
# 执行优化的 GEMM
C = hpc_ai_opt.gemm(A, B)
print(f"结果形状: {C.shape}")
print(f"性能: {hpc_ai_opt.last_tflops:.1f} TFLOPS")单元测试(GoogleTest)
# 运行所有测试
ctest --output-on-failure
# 运行特定测试套件
./tests/gemm/test_gemm基于属性的测试(RapidCheck)
- 自动生成边界情况
- 测试所有输入尺寸组合
- 发现数值稳定性问题
| 模块 | 单元测试 | 属性测试 | 覆盖率 |
|---|---|---|---|
| 逐元素 | 12 | 48 | 95%+ |
| 归约 | 9 | 36 | 90%+ |
| GEMM | 15 | 60 | 98%+ |
| 注意力 | 8 | 32 | 92%+ |
| 总计 | 60+ | 200+ | 95%+ |
使用我们预配置的 Docker 环境进行无忧开发:
# 启动开发环境
cd docker && docker-compose up -d
docker exec -it hpc-ai-lab bash
# 容器内:所有内容已预装!
cmake -S . -B build && cmake --build build -j$(nproc)
ctest --test-dir build欢迎贡献!本项目遵循规范驱动开发(SDD)。
# 1. Fork 并克隆
git clone https://github.com/LessUp/hpc-ai-optimization-lab.git
cd hpc-ai-optimization-lab
# 2. 创建特性分支
git checkout -b feature/my-optimization
# 3. 进行修改并添加测试
# 参考 specs/ 目录了解需求
# 4. 确保测试通过
cmake -S . -B build && cmake --build build -j$(nproc)
ctest --test-dir build --output-on-failure
# 5. 提交并推送
git commit -m "feat: optimize GEMM step 3"
git push origin feature/my-optimization
⚠️ 注意:当前 CI 专注于代码格式、一致性和文档。GPU 测试需要本地执行或使用自托管运行器。
详见 CONTRIBUTING.md 指南。
- 逐元素操作(4个内核)
- 归约操作(3个内核)
- GEMM 优化(7个步骤)
- FlashAttention + RoPE + TopK
- INT8/FP8 量化
- CUDA 13 Hopper 特性
- Python 绑定(nanobind)
- 综合文档
- FP8 GEMM(Hopper 原生)
- 多 GPU 支持
- CUTLASS 集成
- 性能回归测试
- MoE(混合专家)支持
- 稀疏 GEMM 优化
- 自动调优框架
- PyTorch 集成
| 模块 | FP32 | FP16 | BF16 | INT8 | FP8 | 状态 |
|---|---|---|---|---|---|---|
| 逐元素 | ✅ | ✅ | ✅ | - | - | 稳定 |
| 归约 | ✅ | ✅ | ✅ | - | - | 稳定 |
| GEMM | ✅ | ✅ | ✅ | ✅ | 🚧 | 稳定 |
| 卷积 | ✅ | ✅ | - | - | - | 稳定 |
| 注意力 | ✅ | ✅ | - | - | - | 稳定 |
| 量化 | ✅ | ✅ | - | ✅ | 🚧 | 稳定 |
| 特性 | 状态 | 说明 |
|---|---|---|
| FP8 GEMM | 演示 | 缩放 FP16 行为 |
| TMA | 回退 | 使用异步复制代替 |
| Thread Block Clusters | 回退 | Block 归约 |
| Winograd 卷积 | 回退 | 隐式 GEMM 路径 |
- NVIDIA CUTLASS - 参考实现
- FlashAttention - 注意力优化
- How to Optimize a CUDA Matmul - 优秀教程
- NVIDIA CUDA Samples - 最佳实践
本项目采用 Apache License 2.0 许可证 - 详见 LICENSE。