ByteNoteByteNote
写一次 CUDA 内核,也能顺手跑在昇腾上
字

字节笔记本

2026年10月4日 · 约 3 分钟读完

写一次 CUDA 内核,也能顺手跑在昇腾上

API中转
¥120

高性能内核开发一直是硬核技能:同一份 GEMM 或注意力算子,CUDA 写一遍、ROCm 再写一遍,换张国产卡又得重来。北大团队的 TileLang 一直在推进另一条路:用一门 Python 风格的领域专用语言写一次,编译到多张卡上跑。仓库 tile-ai/tilelang,8.3k stars,编译器基于 TVM 构建,定位是流畅开发 GPU、CPU、NPU 内核(GEMM、反量化 GEMM、FlashAttention、LinearAttention 都在示例射程内)。

TileLang 仓库卡片

项目简介

TileLang 的写法是瓦片级的抽象:T.copy 搬数据,T.gemm 做矩阵乘,T.Pipelined 管流水线,T.Parallel 管并行,共享内存与寄存器片段的分配显式可控。编译器侧配齐了自动调参、warp 特化、TMA 支持与瓦片调度器;调试工具有 Pass 可视化与 IR 下放轨迹,写崩了能看到是哪一步变形。LSP 也已开源,编辑器里能补全。

核心能力

后端矩阵图解

  • 后端矩阵:主力覆盖 NVIDIA CUDA(SM70 至 SM120)与 AMD ROCm/HIP,苹果 Metal 在支持列表;实验性后端含 LLVM CPU、CuTe DSL 与 WebGPU。
  • 国产算力接入:华为昇腾 950 后端 9 月 30 日刚开源,摩尔线程 MUSA、海光、MetaX 等通过生态适配器接入。一份代码跨中外多张加速卡,这在当前的开源内核 DSL 里覆盖面少见。
  • 版本节奏:最新版本 v0.1.13(8 月 3 日)带多后端方言与诊断定位,文档站 tilelang.com,社区在 Discord。

快速上手

bash
pip install tilelang

一段 FP16 矩阵乘加 ReLU 的内核长这样:

python
@tilelang.jit
def matmul_relu(A, B, block_M=128, block_N=128, block_K=32):
    M, N, K = T.const("M, N, K")
    A: T.Tensor((M, K), T.float16)
    with T.Kernel(T.ceildiv(N, block_N), T.ceildiv(M, block_M), threads=128) as (bx, by):
        for k in T.Pipelined(T.ceildiv(K, block_K), num_stages=3):
            T.copy(A[by * block_M, k * block_K], A_shared)
            T.gemm(A_shared, B_shared, C_local)

适合谁用

要给自研算子做多卡适配的推理引擎团队是第一受众,昇腾后端刚开源,国产算力上做内核迁移的同学可以直接上手对照。做 ML 系统研究的学生与工程师,这门 DSL 的瓦片抽象本身就是 Triton 之外的另一条技术路线,读源码加写示例的收货都不小。

相关文章

分享: