用途
TileLang Developer 技能用于使用 TileLang 编写、优化和调试高性能 AI 计算内核。TileLang 是一种基于 tile 的编程模型,旨在弥合 CUDA 底层控制与高层抽象之间的差距。该技能适用于以下场景:
- 为 AI 操作(矩阵乘法、注意力机制等)实现自定义 GPU 内核
- 针对现代 GPU(NVIDIA Ampere/Hopper、AMD MI300X、华为昇腾 NPU)优化性能关键算子
- 调试 TileLang 代码或解决性能问题
- 在不同硬件平台之间移植内核
- 理解或修改现有 TileLang 实现
主要能力
该技能提供完整的 TileLang 内核开发工作流程,涵盖以下能力:
-
需求分析:收集张量形状(M、N、K 维度)、数据类型(float16、float32、bfloat16、int8)、内存布局(行主序、列主序)、硬件目标(NVIDIA GPU、AMD GPU、华为昇腾 NPU)以及性能目标(目标吞吐量或延迟、内存带宽约束、对比基线如 cuBLAS)。
-
内核结构搭建:使用
@tilelang.jit(target="cuda", out_idx=[2])和@T.prim_func创建内核脚手架,支持 cuda、hip、cpu 目标,可指定输出参数索引和块维度。 -
网格与内存层次定义:使用
T.Kernel定义网格维度,通过T.alloc_shared分配共享内存,通过T.alloc_fragment分配寄存器片段,并使用T.annotate_layout和T.make_swizzled_layout应用 swizzle 布局以避免 bank 冲突。内存层次包括全局内存(HBM)、共享内存(L1 缓存)和寄存器。 -
计算逻辑实现:使用 TileLang 原语进行数据移动和计算,包括
T.copy(智能数据传输,自动选择 cp.async、TMA 等)、T.gemm(使用 Tensor Core 的矩阵乘法)、T.Pipelined(软件流水线,重叠计算和内存传输)、T.Parallel(逐元素并行操作)。流水线阶段推荐 num_stages=3(三缓冲)。 -
验证与测试:生成测试代码,与参考实现(如 PyTorch 的矩阵乘法)进行对比,使用
torch.testing.assert_close验证正确性。 -
性能优化:块大小调优(A100 推荐 128×128×32 或 64×64×32,H100 可使用 256×128×32,MI300X 可能需要更小的块)、流水线深度调整、warp 策略(FullRow 用于注意力,FullCol 用于 MLA 解码)、块级 swizzle(
T.use_swizzle(panel_size=10)提高 L2 缓存命中率)。 -
常见内核模式:矩阵乘法(GEMM)、FlashAttention(在线 softmax 的内存高效注意力)、DeepSeek MLA(带 KV 压缩的多头潜在注意力)。
-
硬件特定注意事项:NVIDIA GPU(Ampere 使用 cp.async,Hopper 可使用 TMA)、AMD GPU(MI300X 使用 target="hip",64KB 共享内存限制)、华为昇腾(实验性后端)。
-
代码质量标准:为非显而易见的优化添加解释性注释、注明硬件假设、包含使用示例、记录块大小选择依据、提供性能预期。
-
故障排查:编译错误(共享内存超限、形状不匹配)、运行时错误(结果全零、NaN/Inf)、性能问题(低吞吐量、低占用率、bank 冲突)的快速参考。
使用方式
该技能以内核开发工作流的方式使用,用户提出内核请求后,按照分析需求、搭建结构、定义网格与内存、实现计算、验证测试、优化性能的步骤进行。技能内部引用 API_REFERENCE.md(API 细节)、EXAMPLES.md(完整代码示例)、DEBUGGING.md(故障排查)等参考文档。
适用场景
- 需要为 AI 算子实现自定义 GPU 内核的开发者
- 需要优化性能关键算子以匹配或超越厂商库(如 cuBLAS)的场景
- 需要跨硬件平台(NVIDIA、AMD、昇腾)移植内核的场景
- 需要调试 TileLang 代码或性能问题的场景
限制
资料未提供该技能的收费、价格、平台兼容性细节。部分信息(如昇腾后端的成熟度)标注为实验性。具体 API 细节、完整代码示例和故障排查方案需查阅对应的参考文档。