LIVM/TORCH-MLIR 使用简要介绍

1,713 阅读3分钟

Torch-MLIR项目

Torch-MLIR项目旨在从PyTorch生态系统向MLIR生态系统提供一流的编译器支持。

该项目正在参与LLVM孵化器进程:因此,它不是任何LLVM官方版本的一部分。虽然孵化状态不一定反映代码的完整性或稳定性,但它确实表明该项目尚未被认可为LLVM的一个组成部分。

PyTorch一个开源的机器学习框架,加速了从研究原型到生产部署的路径。

MLIRMLIR项目是一种建立可重复使用和可扩展的编译器基础设施的新方法。MLIR旨在解决软件碎片化问题,改善异构硬件的编译,大幅降低构建特定领域编译器的成本,并帮助将现有的编译器连接在一起。

Torch-MLIR多个供应商使用MLIR作为中间层,从PyTorch、JAX和TensorFlow等平台框架映射到MLIR,然后逐步降低到他们的目标硬件。我们已经看到了半打从PyTorch到MLIR的定制降低。从PyTorch生态系统到MLIR生态系统的规范性降低将为硬件供应商提供急需的缓解,使其专注于自己的独特价值,而不是为MLIR实施另一个PyTorch前端。我们的目标是类似于目前的硬件供应商增加LLVM目标支持,而不是每个供应商都实施Clang/C++前端。

Release Build

从PyTorch到Torch MLIR方言的所有道路

我们有几条路径可以降低到Torch MLIR方言。

  • TorchScript 这是通往Torch MLIR方言的最经得起考验的路径,而且PyTorch生态系统正趋向于使用TorchScript IR作为一种通用语言。
  • LazyTensorCore在这里阅读更多细节。

项目交流

  • #torch-mlir LLVMDiscord上的频道 - 这是最活跃的交流频道
  • 这里的Github问题
  • torch-mlir LLVM Discourse的部分
  • 每周一次的会议,时间是北京时间周一上午9点。更多信息请看这里
  • 每周的开放办公时间为北京时间周四上午8:30-9:30。更多信息请见这里

安装Torch-mlir快照

这将安装一个预先构建的用于Linux和macOS上的Python 3.7/3.8/3.9/3.10的touch-mlir的快照。

python -m venv mlir_venv

演示

TorchScript ResNet18

将PyTorch ResNet18模型转换为MLIR并在CPU后端运行的独立脚本。

# Get the latest example if you haven't checked out the code

Lazy Tensor Core

在此查看示例。

急切模式

TorchMLIR的急切模式是通过torch-mlir框架为PyTorch提供的一个非常实验性的急切模式后端。实际上,这种模式的工作方式是在NN被PyTorch急切地执行时,逐个运算符进行编译。如果Torch-mlir编译过程中出现任何问题(例如不支持的操作符),该模式将回退到传统的PyTorch。一个简单的例子可以在eager_mode.py找到。一个ResNet18的例子可以在eager_mode_resnet18.py找到。

资源库布局

该项目遵循典型的基于MLIR的项目惯例。

  • include/torch-mlir,lib 结构,用于C++ MLIR编译器方言/通道。
  • test 用于存放测试代码。
  • tools 用于 等。torch-mlir-opt
  • python 顶层目录用于存放Python代码

开发人员

如果你想从源代码中开发和构建torch-mlir,请看开发说明