ByteIR 项目介绍
ByteIR 项目是由字节跳动提供的一种模型编译解决方案。它涵盖了编译器、运行时和前端,提供了一种端到端的模型编译解决方案。虽然这三个组件集成在一个项目中,但技术上,每个组件都能够独立运行。
关于名称 ByteIR
项目名称“ByteIR”来源于内部的遗留用途。值得注意的是,ByteIR 项目并不是一个 IR 规格定义项目。在大多数情况下,ByteIR 直接采用多个上游的 MLIR 方言和 Google Mhlo,并且大多数 ByteIR 编译器的传递也兼容选定的这些上游 MLIR 方言和 Google Mhlo。
为什么选择 ByteIR
-
享受最新的模型:
ByteIR 支持流行的前端,可以将许多最先进的模型转换为 Stablehlo,并提供模型库(即将发布)以供研究或基准测试使用。 -
开箱即用:
ByteIR 采用了上游的 MLIR 方言和 Google Mhlo,并提供兼容的传递、实用程序和基础设施,适用于所有使用上游 MLIR 的编译器构建者。用户可以同时使用 ByteIR 的传递和上游的 MLIR 或 Mhlo 传递,甚至可以使用自己的传递来构建管道。 -
自定义架构:
ByteIR 在 Mhlo 和 Linalg 中提供丰富的通用图、循环、张量级别的优化,这使得深度学习专用集成电路(DL ASIC)编译器可以重用,只需专注于其后端的优化。
项目状态
ByteIR 目前仍处于早期阶段。在这一阶段,项目旨在为广泛的深度学习加速器以及通用 CPU 和 GPU 提供明确、必要的构建模块和基础设施支持。因此,针对特定架构的高度优化内核可能尚未被优先考虑。项目非常欢迎任何关于优先考虑特定架构或相应贡献的反馈。
编译器
ByteIR 编译器是一个基于 MLIR 的编译器,适用于 CPU/GPU/ASIC。
运行时
ByteIR 运行时是一个通用的、轻量级的运行时,能够服务于现有内核以及由 ByteIR 编译器生成的内核。
前端
ByteIR 前端支持 Tensorflow、PyTorch 和 ONNX。
组件通讯接口
虽然每个 ByteIR 组件技术上可以独立运行,但是它们之间有预先定义的通讯接口。
-
Stablehlo:
ByteIR 的前端和编译器通过 Stablehlo 方言进行通信,版本可能会在开发过程中进行更新。这意味着,无论哪个前端生成兼容版本的 Stablehlo,都可以与 ByteIR 编译器一起工作,反之亦然。 -
ByRE:
ByteIR 的编译器和运行时通过 ByRE 格式进行通信,版本同样可能在开发过程中更新。ByRE 方言在 ByteIR 编译器中被定义为一种 ByRE 格式,目前支持为 ByteIR 编译器和运行时生成文本形式或带有版本信息的字节码。
其他 ByRE 格式正在开发中。
出版物与引用
ByteIR 是字节跳动多位优秀研究人员和实习生的成果。以下是我们的一些公开演讲:
- 《Linalg is All You Need to Optimize Attention》 -- C4ML'23
- 《ByteIR: Towards End-to-End AI Compilation》 -- China SoftCon'23
如果您觉得 ByteIR 有用,请考虑引用以下形式:
@misc{byteir2023,
title = {{ByteIR}},
author = {Cao, Honghua and Chang, Li-Wen and Chen, Chongsong and Jiang, Chengquan and Jiang, Ziheng and Liu, Liyang and Liu, Yuan and Liu, Yuanqiang and Shen, Chao and Wang, Haoran and Xiao, Jianzhe and Yao, Chengji and Yuan, Hangjian and Zhang, Fucheng and Zhang, Ru and Zhang, Xuanrun and Zhang, Zhekun and Zhang, Zhiwei and Zhu, Hongyu and Liu, Xin},
url = {https://github.com//bytedance/byteir},
year = {2023}
}
许可协议
ByteIR 项目是在 Apache License v2.0 条款下发布的。