设计哲学¶
总览¶
Matx 旨在将机器学习生产系统中的训练和推理一体化,具体目标为:
在部署模型时不需要 Python 解释器。
已有的前后处理代码可直接使用在推理中。
自动生成比 Python 更快的代码。
为实现这些目标,我们将 Matx 设计为一个 Python 代码的预编译器,将 Python 代码自动编译成 C++。目前 Matx 主要支持机器学习相关的应用,但我们预期未来也会将 matx 推广到更多对灵活性和性能敏感的业务中。
顶层设计¶
编译 (Script)¶
Script 可将 Python 函数/类 编译为 C++ 函数/类, 并支持在 Python 或者 C++ 中直接调用。预期他们将会获得一致的行为。
算子 (Op)¶
算子是编译后的 C++ 函数,包括普通函数和类成员函数,是用于通过跟踪构建计算图的基本组件。
自动成图 (Trace)¶
自动成图(Trace)用于自动生成由用户代码所组成的计算图。请注意,我们要求计算图必须是有向无循环图。生成的计算图不仅可以直接在 Python 中执行,也可以在保存后由 C++ 引擎从磁盘加载执行。
Python 优先¶
我们选择 Python 是因为它是深度学习中的主要编程语言,并且拥有大量现有代码库。请注意,出于性能考虑,我们只支持 Python 语法的子集。
快速执行¶
由于在经过编译(script) 后,我们将用户的 Python 代码转换为了 C++,在与使用 Python 解释器运行的代码相比,生成的 C++ 代码为我们带来了几个数量级的性能提升。除此之外,我们还要求用户对其 Python 代码进行类型标注,这样可以进一步提升性能。
轻松扩展¶
用户编写的 C++/Python 算子可以轻松集成到 Matx 中。
机器学习支持¶
前后处理¶
数据的前后处理是机器学习生产系统中的两个关键组件。现有的大部分代码库是用 Python 编写的。使用Matx,开发人员可以轻松地将数据预处理代码集成到神经网络推理代码中。
Pytorch/TensorFlow 集成¶
Matx 可以轻松地集成现有的 Pytorch/TensorFlow 模型,加上预处理/后处理,得到一个端到端的应用。