[控场AI]
· 5 分钟阅读· 2,688 字

TileLang原生支持昇腾950:开源算子开发技术拆解

TileLang原生支持昇腾950:开源算子开发技术拆解

TileLang 主仓正式支持昇腾 950,让开发者用 Python 风格语法即可编写并编译高性能昇腾算子。

TileLang 主仓已正式支持为昇腾 950 生成算子代码,这是国产 AI 芯片生态在开发工具层面的一次重要补强。过去在昇腾硬件上编写高性能算子需要手动管理复杂的片上存储层级和数据搬运指令,门槛极高。TileLang 提供 Python 风格的高层语法,通过编译工具链将计算逻辑与数据搬运描述自动转换为昇腾底层代码,开发者无需从零处理所有底层细节。完整开发流程涵盖算子表达、编译生成昇腾代码、硬件运行与性能测试三个阶段,并有主仓、昇腾算子库、LearningHub 课程及 AI 辅助工具等配套资源支撑,覆盖从学习参考到动手实现的完整链条。

TileLang 主仓支持昇腾 950 意味着什么

TileLang 主仓已经正式支持面向昇腾 950 生成算子代码,这对关注国产 AI 芯片生态的开发者是一个值得留意的进展。过去在昇腾硬件上编写高性能算子,往往需要较深的底层知识和繁琐的手写优化。而 TileLang 走的是另一条路线——用 Python 风格的语法来表达计算逻辑与数据搬运,再通过编译工具链映射到昇腾硬件能力上。

这意味着开发者可以用相对接近高层抽象的方式描述一个算子,而不必从头处理所有底层细节。对于想在昇腾 950 上落地自定义算子的团队来说,这降低了入门门槛,也让算子的迭代和调试更加直观。

安排数据搬运

Python 风格代码如何跑上昇腾硬件

一个核心问题是:看起来是 Python 风格的 TileLang 代码,究竟是怎样用上昇腾硬件能力的?答案在于其背后的编译工具链。TileLang 代码经过编译转换,最终生成面向昇腾的底层代码,开发者写下的每一个计算表达和数据搬运操作,都会在这个过程中被翻译成硬件可执行的形式。

整个流程大致可以拆成三步:先用 TileLang 表达计算逻辑和数据搬运安排,再通过工具链编译生成面向昇腾 950 的代码,最后把它放到硬件上运行、检查结果并测试耗时。这种「写高层、跑底层」的模式,是 TileLang 在多种硬件后端上保持一致开发体验的关键。

打开生成的代码查看

打开生成的代码看看发生了什么

理解一个编译型 DSL(领域特定语言)最好的方式,就是打开它生成的代码,看看自己写下的操作最后变成了什么样子。通过对比源码与生成结果,开发者能更清楚地理解数据是如何在片上搬运的、计算是怎样被调度的,从而在后续阅读别人的算子实现或改写自己的算子时更有思路。

这种「可观察性」对性能调优尤为重要——当你知道一行高层代码对应了哪些底层指令,就能更有针对性地做优化。

昇腾 NPU(如 910B、910C 及最新的 950)在硬件架构上与 NVIDIA GPU 差异显著。其核心计算单元称为 Cube Core(负责矩阵乘法)和 Vector Core(负责逐元素操作),片上存储则分为 L0A/L0B/L0C、L1 及 Unified Buffer 等多个层级。数据在这些层级之间的搬运需要通过专用的 DMA 指令(如 copy_gm_to_l1、copy_l1_to_l0a 等)显式编排,这也是手写昇腾算子(通常使用华为的 TBE/TIK 编程框架)门槛较高的主要原因——开发者需要手动管理存储层级和指令流水。TileLang 的编译工具链承担了这一繁琐的映射工作,将高层的计算描述自动翻译为对应的 TBE 原语或 AscendC 代码,同时处理好数据搬运的时序与同步。

DSL(Domain-Specific Language,领域特定语言)是一种针对特定应用领域设计的编程语言,相对于通用编程语言(如 C++、Python),它在表达力上有所取舍,但在目标领域能提供更简洁、更贴近问题本质的语法。TileLang 是一种编译型 DSL:开发者用类 Python 语法编写的程序并不直接解释执行,而是经过前端解析、中间表示优化、后端代码生成等编译阶段,最终产出可在特定硬件上运行的底层代码。与 CUDA 领域的 Triton、或 AI 编译器中的 TVM/TIR 类似,TileLang 试图在「开发效率」与「可生成高性能代码」之间取得平衡。理解生成代码的结构,有助于开发者在编译器未能充分优化时,通过调整高层写法来间接控制底层行为。

配套开发资源与算子库

围绕 TileLang 的昇腾开发,已经有一批配套资源可供参考:

  • TileLang 主仓与 TileKernels:框架本体与算子实现,是理解架构和具体写法的起点。
  • 面向昇腾的算子库:其中包含针对昇腾的算子实现和测试,想找现成代码做参考可以直接查阅。
  • LearningHub 开发课程:系统性的 TileLang 开发教程,结合实例讲解每一步怎么写、为什么这么写,适合边看边动手。
  • AI 辅助开发工具:借助相关的 TileLang 开发助手,可以让 AI 帮忙生成算子和编写测试,进一步提升效率。

查看框架里的实现

这些资源覆盖了从「看别人怎么写」到「自己动手写」再到「让 AI 协助写」的完整链条,对不同阶段的开发者都比较友好。

从例子入手逐步理解

对初学者而言,直接从算子库的实际例子出发,往往比�by读文档更有效。通过观察一个具体算子如何表达计算、如何安排搬运、如何编写测试,再尝试修改参数或逻辑并在硬件上验证,是比较高效的学习路径。

学习每一步怎么写

为什么这件事值得关注

TileLang 原生支持昇腾 950,本质上是国产 AI 芯片生态在开发工具层面的一次补强。高性能算子开发长期是硬件生态的瓶颈之一——有了好的硬件,还需要易用的编程抽象和成熟的工具链,才能让更多开发者参与进来。

TileLang 用统一的高层语法覆盖多种硬件后端,对昇腾来说意味着可以复用社区已有的生态与经验,而不必完全从零构建。对开发者而言,这是一个用熟悉的 Python 风格就能上手昇腾算子开发的机会。感兴趣的朋友可以结合官方主仓、算子库和开发课程,带上自己关心的算子动手试一试。

算子(Operator)是深度学习框架中的基本计算单元,如矩阵乘法(GEMM)、注意力机制(Attention)、激活函数等。当框架提供的标准算子无法满足新模型结构的需求,或标准实现在特定硬件上性能不足时,就需要手写自定义算子。在 CUDA 生态中,Triton 等工具已大幅降低了这一门槛,使研究人员和工程师无需精通 CUDA 汇编也能编写高性能 GPU 算子。昇腾生态此前缺乏类似工具,导致依赖手写 TIK/AscendC 的门槛居高不下,制约了社区自主创新算子的速度。TileLang 对昇腾 950 的支持,在一定程度上填补了这一空白,使「快速验证新算子想法并在昇腾硬件上测试性能」成为可能。

分享:

相关推荐