一、什么是onnx?什么是mlir?
深度学习有tensorflow、pytorch等框架,在onnx之前,各自将深度学习模型保存成不同类型的文件。
深度学习模型要落地到实际硬件执行,第一步就是要解析不同类型的文件。
onnx统一了模型的格式,所有框架最终都保存成onnx格式,之后就只解析onnx这一种文件就可以了。
随着深度学习的爆发以及摩尔定律失效,DSA(领域专用处理器架构)看起来是一个方向。最近也是出现了许多新的硬件架构,新的硬件就需要新的编译器。但不同的编译器又有很多相似的处理流程,各自开发就会有很多重复的工作。
其实一个计算流程的表述方法千变万化,都是正确的。针对表述方式A开发了处理流程a,那对于表述方式B,可以先转换到表述方式A,之后可以直接调用处理流程a。mlir就是这样一个框架,表述方式A、B在mlir中都是一种dialect,不同的dialect可以利用mlir的基础设施方便的转换,从而实现处理流程复用。
二、onnx-mlir的大致流程
看过一篇对原论文的解读,讲的比较清楚:
[论文阅读] 《Compiling ONNX Neural Network Models Using MLIR》_onnx-mlir 架构-CSDN博客
根据官网介绍,onnx-mlir编译的目标硬件有:
Current levels of support for the code generation of ONNX operations are listed here for a generic CPU and IBM's Telum integrated AI accelerator.
三、构建与调试
我拉取的commit id是21423ccae0875a16bd33a09268da9e89abf75579
之后有个文件要修改一下,不然构建测试报错
调试的话,我用的是vscode+docker,感觉不错。windows11的话建议wsl,但个人电脑处理器和内存可能不太够用,我swp开了100G才构建成功,不敢再调试了。
四、学习点
①onnx如何转mlir
②onnx dialect、krnl dialect都做了哪些优化,怎么实现的
③mlir原生支持的dialect做了哪些优化,怎么调用的
④llvm后端做了哪些事情,怎么调用的
⑤思考:如果有一个新的硬件,哪些可以调用?哪些需要开发?