
7 月 29 日,2026 夏季 InfiniTensor 训练营 Triton & 九齿方向第四课《九齿二重:渐悟》开讲。
前置课程《九齿一重:初窥》通过“排布-应用”范式,向量加法、GEMM、卷积及 Flash Attention 等实战案例详细讲解九齿。
本节课带领大家通过“动手写代码”的方式掌握九齿,深入理解九齿作为张量级 DSL 的核心设计理念,并通过向量加法与矩阵归约两个案例,彻底搞懂“排布(Arrangement)”与“应用(Application)”编程范式。
🛠️ 课前准备
推荐在 Google Colab 中运行ninetoothed-puzzles.ipynb(GitHub 搜索ninetoothed-puzzles仓库),连接免费 GPU Runtime 即可开始实践。
九齿核心概念:符号张量与可视化
安装与环境配置
九齿仓库及可选工具(debugging, visualization)的安装
符号张量 vs 数值张量

- 九齿张量的本质:编译期符号化表示,非运行时数据存储
- 张量创建方式对比:指定 Shape vs 指定维度数(ndim)
- 为何需要
Tensor.eval()?——将符号转化为可视化的numpy.ndarray

张量求值与替换机制
eval():传入具体 shape 或 subs 字典,生成索引/数值视图subs():符号替换中间产物,保持九齿张量结构(支持嵌套)


元操作与嵌套张量
核心元操作:x.tile

- Tile 的作用:将单层张量拆分为多层嵌套结构
- 可视化:外层 Grid 形状 + 内层 Block 形状
- Dtype 的特殊性:九齿中
dtype本身可以是张量
Flatten 操作

- 对嵌套张量的特定层级进行展平
- 结合 visualize 工具观察结构变化
符号化编程

- 自定义 Symbol 替代硬编码数值(如
block_size_m/n) - 可视化时的符号绑定:subs 字典需包含所有相关符号信息

九齿运行机制:自动推导执行配置
Arrangement(排布)
- 定义多张量的统一分块策略
- 最外层对齐原则:编译器自动推导 Grid 启动配置
程序实例映射原理
- 无需手动指定
<<<grid, block>>>或 Triton grid lambda - 最外层形状决定 Program Instance 数量
- 次外层张量自动映射到对应实例
- 无需手动指定

- Application(应用)函数设计
- 单实例视角编程:只关注当前分配到的 block/tile
- 屏蔽指针运算:编译器自动处理内存访问偏移
- 降低心智负担:排布与计算逻辑解耦

Kernel 构建与自动调优
- Kernel 组装要素
- arrangement, application, tensors

- 自动调优(Auto-tuning)机制

- Symbol 定义:
meta=True可被自动调优机制搜索 - 调优约束参数:
lower_bound,upper_bound,power_of_two - 便捷封装:
ninetoothed.blocksize()函数 - 调用差异:自动调优模式下无需手动传递
block_size
进阶案例:多层 tile 与迭代归约
- 双层 tile 编程技巧
- 适用场景:需要在 Application 内部进行迭代
- 逆向思维:需要循环 → 考虑双层 tile
- 三层嵌套张量的可视化与索引访问


行归约(Row Reduction)实现
- 累加器模式设计
- 硬件限制应对:Block Size 上限与分块累加必要性
- Flash Attention 中的特殊假设 vs 通用算法实现
边界处理:Other 参数
- 非整除场景下的 Mask 机制
- 求和运算中
other=0的语义正确性 - 九齿自动处理 Offset/Mask,用户仅需指定填充值

加入训练营
📺完整课程内容,请观看直播或查看课程回放:
InfiniTensor 官网: https://www.infinitensor.com
B站直播: InfiniTensor 官方直播间
视频号直播: InfiniTensor 视频号预约
答疑交流: 训练营官方社群⬇️

关注与交流

