MLIR的Fault Tolerance(容错)与冗余计算
从一次凌晨三点的崩溃说起
去年做AI加速器编译器的时候,遇到一个诡异的bug。芯片在高温环境下跑推理任务,偶尔会出现个别计算单元输出全零——不是每次都复现,但一旦出现,整个推理结果就崩了。当时团队里有人提议“加ECC”,有人建议“做三模冗余”,但问题是我们的硬件资源已经吃紧,每条指令的延迟都卡在纳秒级。
后来我翻到MLIR的Dialect设计文档,突然意识到:容错不一定是硬件的事,编译器层面可以做很多“软”的事情。MLIR的多层次IR结构天然适合插入冗余计算、校验逻辑和故障恢复路径。今天这篇笔记,就聊聊我在MLIR里做容错的一些实战经验。
冗余计算的两种“姿势”
1. 数据级冗余:重复计算 + 比较
最朴素的想法:把关键计算做两遍,结果不一致就标记异常。在MLIR里,这可以通过在Linalg或Affine Dialect层面插入“影子计算”实现。
// 原始计算:一个简单的矩阵乘
%result = linalg.matmul ins(%A, %B: tensor<8x8xf32>, tensor<8x8xf32>)
outs(%C: tensor<8x8xf32>) -> tensor<8x8xf32>
// 插入
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/m0_50546716/article/details/166688146




