TileLang 是什么:以 Tile 为单位编写 AI 算子
TileLang 底层设计:从 Python Tile 到设备内核
追踪 DSL、JIT 特化与后端,而不把一种 GPU 当成全部
TileLang 底层设计:从 Python Tile 到设备内核知识学习CN编辑简报更新 2026-10-04
你将学会
- 以分块表达工作
- 找到 JIT 边界
- 按层看后端
开始前需要
- 一个目标算子与设备
- 正确的框架参考实现
- 兼容的编译器与运行时
从 README 示例走向真实模型瓶颈的证据
先看结论
- 分块程序显式描述内存搬运。
- JIT 特化可能产生多个二进制。
- 后端列表不代表算子完全等价。
以分块表达工作
程序用 `T.Kernel` 描述网格,把输入块搬到共享内存,在片段中计算后写回。README 的 GEMM 把数据搬运和累加精度明确写在代码里。
这与用 PyTorch 编写完整模型不同:内核作者控制内存局部性和并行形状,编译器负责把操作降低到选定的设备后端。
找到 JIT 边界
`@tilelang.jit` 包装 Python 内核,并按输入形状与编译期参数特化。捕获到的 JIT 模块是了解编译入口和缓存行为的起点。
不同目标架构可能得到不同产物。缓存二进制要与编译上下文匹配,不能假定从一台机器复制到另一台就安全可用。
按层看后端
README 列出多种支持等级和生态路线,安装指南又给出设备特有的依赖。静态 CUDA、ROCm、Metal 方言不能简化成“所有操作在所有设备上完全一样”。
移植时先检查目标算子支持与正确性,再做分析。本次架构阅读没有运行编译 pass,也没有检查生成的汇编。
如何选择
| 比较维度 | 方案 A | 方案 B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
实施步骤
- 1
沿着加载、片段计算和写回追踪一个 Tile。
- 2
列出特化输入和编译目标。
- 3
在每个计划使用的后端验证降低。
可复制示例
text
Python DSL -> 类型化分块操作 -> JIT 特化
TVM 基础的降低 -> 后端代码 -> 设备执行常见问题
TileLang 只是 PyTorch 的 Python 外壳吗?
不是;Python 表达分块程序,再编译成设备后端执行。
CUDA 缓存能随便复用于所有 GPU 吗?
不能假定如此;架构和编译上下文必须符合缓存规则。
资料来源
- TileLang / README.md来源核查 2026-10-04
- TileLang / tilelang/jit/__init__.py来源核查 2026-10-04
- TileLang / tilelang/__init__.py来源核查 2026-10-04
- TileLang / docs/get_started/Installation.md来源核查 2026-10-04