【编译器工程与 MLIR】与 AI 框架的接口设计

💡 原文中文,约6700字,阅读约需16分钟。
📝

内容提要

本文讨论了AI编译器中框架与MLIR的桥接设计,重点介绍了Torch-MLIR、StableHLO和ONNX-MLIR三种方案。Torch-MLIR将PyTorch计算图转换为MLIR,StableHLO是Google的统一中间表示,ONNX-MLIR则将ONNX图转为MLIR。这三种方案在算子覆盖、降阶复杂度和适用场景上各有特点,StableHLO被视为AI编译器的标准化中间表示。

🎯

关键要点

  • AI 编译器的桥接层设计决定了生成代码的质量和编译器的适用范围。

  • Torch-MLIR 将 PyTorch 的计算图转换为 MLIR,核心流程包括图捕获和翻译。

  • Torch 方言覆盖了 PyTorch 的数百个算子,并通过分类处理进行降阶。

  • StableHLO 是 Google 提出的统一中间表示,旨在成为 AI 编译器的标准化中间表示。

  • ONNX-MLIR 将 ONNX 计算图翻译为 MLIR,并通过多阶段降阶生成 LLVM IR。

  • 三种方案在算子覆盖、降阶复杂度和适用场景上各有特点,StableHLO 被视为标准化中间表示。

  • 桥接层面临算子覆盖不完整、动态形状处理、数值精度差异和控制流翻译等工程挑战。

🔎

延伸解读

桥接层的重要性

AI 编译器的桥接层设计直接影响生成代码的质量和编译器的适用范围。不同框架的入口方言和降阶路径存在本质差异,选择合适的桥接方案可以优化性能和兼容性。

StableHLO 的标准化角色

StableHLO 被视为 AI 编译器的标准化中间表示,旨在实现跨框架的互操作性。它的稳定性和向后兼容性使其成为多个框架共享编译管线的理想选择。

工程挑战与应对

桥接层面临算子覆盖不完整、动态形状处理和数值精度差异等工程挑战。开发者需关注这些问题,以确保不同框架间的操作能够精确转换和优化。

延伸问答

Torch-MLIR 是如何将 PyTorch 计算图转换为 MLIR 的?

Torch-MLIR 通过图捕获和翻译的核心流程,将 PyTorch 的 Eager 模式计算图转换为 MLIR。

StableHLO 的主要特点是什么?

StableHLO 是 Google 提出的统一中间表示,旨在成为 AI 编译器的标准化中间表示,支持跨框架互操作。

ONNX-MLIR 的降阶路径是怎样的?

ONNX-MLIR 将 ONNX 计算图翻译为 onnx 方言,然后通过多阶段降阶生成 LLVM IR。

这三种桥接方案在算子覆盖上有什么区别?

Torch-MLIR 覆盖约 800 个 Aten Op,StableHLO 覆盖约 120 个,ONNX-MLIR 覆盖约 170 个。

桥接层面临哪些工程挑战?

桥接层面临算子覆盖不完整、动态形状处理、数值精度差异和控制流翻译等挑战。

如果我的 AI 模型是用 PyTorch 编写的,应该选择哪个桥接方案?

如果你的 AI 模型是用 PyTorch 编写的,Torch-MLIR 是第一选择,因为它直接消费 torch.fx 计算图。

🏷️

标签

➡️

继续阅读