昨天 DeepSeek 开源的 TileLang Ascend 很有意思。抽象层次跟我 2019 年在昇腾里做的 AKG 里面的 isl schedule 很类似,都是把 L0 A/B/C(矩阵计算的输入输出缓冲)、UB(向量计算的缓冲)等显式分配出来,然后编排数据搬移和计算。
一直有不少人说,昇腾难编程;架构是为 CNN 定制的,不适合 Transformer。我认为这两个说法都站不住脚。
首先,随便写个 CUDA 算子确实是不用关心片内的缓存层次,也不用做矩阵和向量计算单元之间的同步,也不用让数据按照 16 的倍数对齐。但是要把性能优化到极致,还是必须考虑 GPU microarchitecture 的。不想自己折腾数据搬移和同步的可以试用我们开源的 AKG 自动生成算子,写 Python 总比写 CUDA 简单。
其次,昇腾跟 TPU 等很多加速器类似,都是考虑到 Transformer 等神经网络的计算特征(QK 矩阵计算 -> Softmax 向量计算 -> PV 矩阵计算这样交错进行),使用专用缓冲区甚至 950 中的专用数据通路来降低数据搬移开销。Img2col 这些为 CNN 定制的指令也换成了为 Transformer 定制的 NDDMA 数据重排指令。要知道,950 的制程跟 A100 是相当的,但性能可达 H100,就是靠架构优化。
截图出自我的开源书《深入理解 AI Infra》
显示更多