寒武纪开源Triton-Linalg编译器前端

2024年5月28日,寒武纪开源了跨平台AI编译器前端Triton-Linalg,以此帮助开发者降低硬件适配成本,提高集成效率。

寒武纪此次发布的Triton-Linalg专为支持Triton语言设计,是国内首个开源的基于Linalg编译技术的全面支持特定领域架构(DSA, Domain-Specific Architectures)指令集的AI编译器前端。Triton-Linalg不仅完备支持Triton编程原语,还能高效处理从复杂的指针操作到张量(Tensor)的转换,大幅降低了AI编程的难度。

通过Triton-Linalg编译器前端,开发者或者硬件厂商可以以极低的开发成本,快速集成支持Triton语言特性的后端指令集,并对接上层AI应用。

↓ GitHub仓库(点击文末“阅读原文”可直接跳转)↓

https://github.com/Cambricon/triton-linalg
01.

Triton-Linalg技术方案

① Triton整体架构

Triton是一个用于编写高效自定义深度学习算子的语言和编译器。相比CUDA,Triton在实现深度学习算子开发中具有更高的生产力和更大的灵活性。

Triton的整体架构如下图所示,其中红色虚线框是寒武纪开源的Triton-Linalg部分。Linalg作为与后端无关的中间表示形式,为多种硬件提供了Triton到Linalg的转换支持。

图片

▲ Triton的整体架构图参考Triton官方文档设计

② Why Triton?
根据官方GitHub仓库的描述,Triton的设计目的是提供一个开放的环境,让开发者更快速和高效地编写代码。相比CUDA,Triton具有以下优势:

1) 快速高效

使用Triton,硬件厂商只需关注如何从Triton层编译到硬件代码,即可高效支持上层的各类AI程序,如PyTorch、JAX等,同时可以兼顾实现质量。

2) 易于上手

CUDA的上手难度较高,要同时做到功能铺量和极限性能优化比较困难。而开发者使用Triton可以更简单地实现功能和性能的目标,编程难度和学习成本更低。

3) 生态兼容性高

使用Triton可以有效减少对于CUDA单一生态的依赖,能解决兼容性、软硬件适配度等问题。

4) 适配度高

Triton支持PyTorch原生框架,输入可以直接接PyTorch Tensor。

③ Why Linalg?

Linalg是当前MLIR社区主推的一个面向CodeGen的方言,提供了一系列高度抽象的功能,以此来简化和优化线性代数运算。选择Linalg方言的决策不仅基于其技术优势,还因为Linalg在行业中有广泛的接受度,并且对支撑未来硬件的发展有极大潜力。Linalg方言具有如下特点和优势:
1)高度抽象

Linalg提供了一个高层次的抽象,让开发者可以专注于线性代数运算的数学性质,而不需要关注底层实现细节。Linalg使用具名的操作来描述常见的线性代数模式,如矩阵乘法(Matmul)、矩阵向量乘法(Matvec)和其他元素级的二元运算。

2)循环抽象

Linalg操作内部自带循环结构的描述,每一个操作都隐式地定义了其迭代空间和迭代方式,从而消除了显式循环控制的需要。这种抽象不仅简化了代码,还为自动循环优化提供了可能。

3)可扩展性

Linalg支持通过泛型操作定义来捕捉更广泛的模式。泛型操作允许用户定义新的线性代数操作,其中包括输入、输出和计算规则的抽象描述。这使得Linalg能够支持超出预定义操作集合的计算模式。

4)硬件无关性

Linalg的设计是硬件无关的,这样相同的高级代码可以映射到不同的目标硬件上,包括 CPU、GPU和其他加速器。这一特性使Linalg成为编写可移植代码的有力工具。

5)编译时优化
Linalg设计上易于集成进不同阶段的编译优化,如循环变换(如Tile、Fusion)和向量化。这是因为其操作的表达方式允许编译器容易地识别出优化机会。
④ Triton to Linalg的转换流程

寒武纪发布的Triton-Linalg由4个部分构成:Analysis、Conversion、Dialect和Transforms。

1)Analysis: 包含指针连续性分析算法、Mask和指针偏移分析算法等;
2)Conversion: 包含Triton/Arith/Math到Linalg的转换;
3)Dialect: 定义了Linalg Extention算子以及Auxiliary辅助算子;
4)Transforms: 扩充了社区方言的标准化以及一些辅助的优化Pass。

图片

▲ Triton-Linalg的转换流程图

目前,社区已在Linalg方言上集成了丰富的基础设施,涵盖Tile、Fuse、Promotion等超过30种不同的变换操作(Transform op)。基于这种方言,可以实现大量基础设施的复用,从而降低集成新硬件的工作量。

在人工智能时代,众多专业硬件应运而生,以满足性能需求。为了优化这些架构的效能,设计者通常会定义一系列较大粒度的算子。这些算子专为特定任务量身定制,使得硬件能够更高效地处理复杂的计算需求。为此,寒武纪的Triton-Linalg仓库在转换过程中遵循几个原则:

1)尽可能使用structure算子,不使用linalg.generic。
  • 例如:tt.reduce转成linalg.reduce;tt.dot转成linalg.matmul等。
2)尽可能早的识别出算子语义。
  • 例如:识别triton reduce算子内部的region的计算逻辑,转到特化的算子。

02.

使用Triton-Linalg的价值
1)降低适配成本

直接使用开源的、硬件无关的Triton-Linalg编译器前端,硬件厂商只需实现Linalg到硬件层的后端集成。这样不仅可以省去学习复杂编程语言的成本,还可以无视指令集差异进行适配。

2)增加成本效益

寒武纪开源的Triton-Linalg可以降低企业和个人的软件采购成本,每个开发者都可以利用寒武纪提供的技术路径来使用所需的硬件后端,而不需要支付昂贵的许可费用。此外,Triton-Linalg还减少了对专有软件的依赖,降低了成本风险。

3)高灵活性与可定制化 

开发者可以根据自己的需求修改寒武纪提供的源码,以适应不同的场景和用途。这种灵活性使得行业解决方案、算法、软件、硬件企业不再是一对一的关系,而可以转变为多对多的关系。所以通过寒武纪开源的Triton-Linalg,任何行业、算法在做自己的开发时,都不用局限于硬件的类型。

4)知识共享与教育
寒武纪开源的Triton-Linalg为学生、初学者和专业人士提供了学习和实践的机会。以前,人们需要使用特定的硬件并学习复杂的编程语言来进行实践。现在,通过Triton-Linalg的开源,开发者可以使用不同的硬件学习到实际的编程技能和协作经验,这对于培养新一代的技术人才非常有益。

03.

寒武纪的技术认知

寒武纪发布Triton-Linalg的初心,一是希望为开发者和硬件厂商提供一个高效、易用的技术方案,简化编程的过程,从而降低开发成本。与此同时,寒武纪也在用实际行动为Triton社区的生态建设贡献力量。

寒武纪Triton-Linalg项目开源负责人表示:“在大模型时代,寒武纪致力于推动行业创新和开放合作。开源Triton-Linalg编译器前端,也是想以寒武纪的技术积累来为行业里的伙伴们做点事情。”

寒武纪相信,推动人工智能领域未来技术进步的核心是开放、协同、共享。开源开放的项目使开发者凝聚起来,通过配合与协作,让技术成果被广泛使用。寒武纪将秉承开放、协同、共享的理念,持续用更多的技术创新来赋能行业、用更多的技术分享来赋能开发者。

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/79562.html

(0)
guozi's avatarguozi
上一篇 2024年5月30日 下午6:58
下一篇 2024年5月30日 下午6:59

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注