架构设计
仓库整体围绕一个小而清晰的公开 API 层构建,下面连接输入校验、Triton kernel 实现、性能工具层和共享数据模型。
模块地图
triton_ops/
├── __init__.py # 根包公开导出
├── performance.py # PerformanceProfile — 派生指标统一接口
├── models.py # dataclass 与指标/结果容器
├── exceptions.py # 自定义异常类型
├── validation.py # 运行时输入校验
├── utils.py # 公共 helper 与常量
├── kernels/
│ ├── rmsnorm_rope.py
│ ├── gated_mlp.py
│ ├── fp8_gemm.py
│ └── fp8_quantize.py
├── compute/ # 纯 NumPy CPU 参考实现
│ ├── rmsnorm.py
│ ├── rope.py
│ ├── gated_mlp.py
│ └── fp8.py
├── autotuner/
│ ├── configs.py
│ ├── tuner.py
│ └── cache.py
└── benchmark/
├── correctness.py
├── report.py
└── suite.py
职责拆分
公开 API 层
triton_ops.__init__ 是唯一的用户入口,导出 kernel、模块封装、量化 helper、benchmark 类、自动调优工具、dataclass、异常类型,以及 PerformanceProfile。
性能指标接口层
triton_ops.performance 提供 PerformanceProfile 对象,封装问题形状上下文,用于计算派生指标(吞吐量 TFLOPS、带宽 GB/s、利用率)。供 BenchmarkSuite 和自动调优器使用。
三种构造器:latency_only()、elementwise(numel, ...)、gemm(M, N, K, ...)。
计算参考层
triton_ops.compute 提供与 Triton kernel 数学等价的纯 NumPy 实现,无需 GPU 即可运行:
- 作为 kernel 正确性验证的参考实现,
- 作为无 GPU 环境下的单元测试目标,
- 作为精确数学公式的文档说明。
校验层
validation.py 统一管理输入契约:
- device 放置,
- dtype 支持,
- contiguous 要求,
- shape 兼容性,
- 标量参数检查。
这样 kernel 入口就不用重复写大量样板校验逻辑,测试和 wrapper 也能复用同一套规则。
Kernel 层
kernels/ 中放的是 Triton 实现,以及用于正确性对照的 PyTorch reference 实现。
每个 kernel 模块通常包含:
- Triton kernel 本体,
- 用户可调用的 Python launcher,
- reference 函数,
- 可选的
nn.Module封装。
支撑工具层
自动调优和 benchmark 都独立于 kernel 运行路径存在。它们的目标是帮助实验、验证和报告,而不是把所有调优逻辑都隐式塞进每次 API 调用里。
架构意图
这个结构偏向于:
- 显式的运行契约,
- 可验证的 reference 路径,
- 小而明确的导出原语集合,
- 可独立复用的支持代码。
关键边界
- 仓库不提供完整的 Transformer 模型栈。
- 这些融合算子更适合作为更大推理系统中的原语组件。
- benchmark 和 autotuning 是伴随工具层,而不是必须进入正常运行路径的中间层。