001、专栏导论:为什么我们需要MLIR与算子中间表示

专栏导论:为什么我们需要MLIR与算子中间表示

去年冬天,我在调试一个AI推理引擎的量化算子时,遇到了一个让我连续加班三天的诡异问题。模型在GPU上跑得好好的,换到自研NPU上,某个卷积算子的输出精度直接崩了——不是差几个比特,而是整个feature map像被泼了硫酸。我翻遍了算子实现、检查了量化参数、甚至怀疑是DMA搬运时地址对齐出了问题。最后发现,问题出在编译器后端把某个中间表示中的“relu”和“clip”合并优化时,把量化scale搞丢了。

那一刻我意识到,我们缺的不是算子实现能力,而是算子中间表示的抽象层次和表达能力。这件事直接促使我开始系统研究MLIR。

从“手写IR”到“IR通胀”

很多做AI芯片的朋友都经历过这个阶段:先手写一套自己的IR,定义几个Op,比如Conv2D、Relu、Add,然后写pass做图优化。一开始很爽,因为IR完全可控,想怎么改就怎么改。但很快你会发现,IR开始“通胀”了——为了支持量化,你得加QConv、QRelu;为了支持稀疏化,你得加SparseConv;为了支持不同精度,你得加FP16Conv、INT8Conv……IR的Op数量呈指数级增长。

更痛苦的是,每个Op背后都跟着一套lowering规则、一套shape推导、一套内存分配策略。当你的IR膨胀到几百个Op时,维护成本已经超过了开发收益。这时候你开始怀念LLVM——至少人家有统一的中间表示,有成熟的pass管理框架。

但LLVM IR是为通用计算设计的,它处理的是load/store、arithmetic、control flow这些底层操作。对于AI算子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值