来源|wandb.ai
翻译|刘志勇
如你所知,PyTorch、TensorFlow、OneFlow等深度学习框架关注的重心是在GPU等硬件上训练模型,但要想将训练的模型部署到手机、物联网设备以及专用加速器(FPGA、ASIC)等不同平台,就需要TVM、XLA、TensorRT等深度学习编译器来解决。
作为目前业界炙手可热的编译器,TVM(Tensor Virtual Machine)于2017年8月由华盛顿大学的Luis Ceze、陈天奇等人开源,利用这一工具,机器学习算法可以被自动编译成可供下层硬件执行的机器语言,从而可以利用多种类型的算力。
TVM主要用于张量计算,提供独立于硬件底层的中间表示,采用各种方式(循环分块、缓存优化等)对相应的计算进行优化。第一代TVM的设计借鉴了传统编译器框架LLVM的设计思路,设计抽象出中间表示层,不同的模型只需要开发相应的前端接口,不同的硬件只需要开发相应的后端。
2019年,华盛顿大学TVM团队成立创业公司OctoML,联合创始人包括华盛顿大学计算机科学教授Luis Ceze(CEO)、前英特尔首席工程师和 AI 负责人Jason Knight(CPO)、华盛顿大学博士陈天奇(CTO)等。他们致力于打造一个可扩展、开放、中立的端到端栈,用于深度学习模型的优化和部署,目标是减少企业为特定硬件开发和深度学习软件部署所花费的成本和时间。截止目前,该项目已在GitHub上获得7800个Star,OctoML累计融资超过1亿美元。
从左到右依次为Jason Knight、Luis Ceze、Josh Fromm、Jared Roesch、Tianqi Chen和Thierry Moreau
其中,担任OctoML CEO 的Luis Ceze此前曾创立Corensic,并于2012被F5 Networks 收购。此外,他还是麦德罗纳风险投资集团的兼职普通合伙人,且领导该公司的技术顾问委员会。
作为使机器学习在各种硬件系统上高效运行的专家,Luis的研究重点是计算机系统结构、编程语言、机器学习、分子生物学的交叉领域,在Lukas Biewald主持的机器学习节目Gradient Dissent上,他介绍了TVM编译器的发展路径、系统优化性能技术细节和模型部署的挑战,并分享了OctoML的创业思路。
以下为对话内容,OneFlow社区做了不改变原意的编译:
1
TVM、OctoML和Octomizer
Lukas:OctoML是一个基于Apache TVM的创业公司,你是这个项目的作者,能为那些不了解这个领域的人做个介绍么?
Luis:我身兼两职,OctoML 的首席执行官和华盛顿大学计算机科学工程的教授。机器学习系统是什么意思?它意味着构建能够让机器学习应用快速、高效地运行的计算机系统,并以尽可能简单的方式实现目标。除了让计算机系统帮助机器学习,我们也经常使用机器学习来改进机器学习系统。
说到Apache TVM,TVM是张量虚拟机(Tensor Virtual Machine)的缩写。大约五年前,它始于我们在华盛顿大学的研究小组。
按照机器学习日新月异的发展速度来算,五年前就像是很久以前一样,已经有越来越多的机器学习模型受到人们关注。在模型集合越来越快的增长过程中,软件生态系统已经出现碎片化的迹象,如 TensorFlow、PyTorch、MXNet和Keras等。其次是硬件方面,那时候CPU占主导地位,GPU 才刚刚起步,当时还出现了另外一些加速器。
软件生态碎片化正在变得越来越严重。一个软件栈要么特定于希望部署模型的硬件;要么特定于像计算机视觉或自然语言处理等用例。我们希望创建一个简洁的抽象统一解决这些问题,希望用一个干净、统一的管理平台把所有的系统和硬件都清晰地抽象出来,以便能够部署模型,并最大限度地利用好目标硬件。这样数据科学家和机器学习工程师就不用再为模型部署而发愁,只须将精力集中在模型的统计特性上。
就像大家都知道的那样,机器学习代码对性能十分敏感,需要使用大量内存带宽,这意味着重度依赖内存和计算引擎之间搬运数据的能力,同时还需要大量的原始计算能力。这也是为何如今适用于机器学习的硬件看起来越来越像以前的超级计算机。比如向量处理、矩阵、张量核心等等,充分利用这些非常困难。现在的代码优化工作已经很困难了,如果你去优化诸如机器学习之类性能敏感的代码,那么是非常艰难的。但不管怎样,我都会试着去做,虽然这条路还很漫长,但希望这些都是值得的。
因此,在开始TVM项目时考虑的问题是,我们是否可以根据用户要部署的目标硬件,来自动地调整机器学习模型和实际代码,而不需要依靠人工优化的库,也不需要依靠大量的人工编码来提高模型的速度。
其工作原理是,TVM通过运行一系列的小实验,来建立目标硬件行为的特征,或者说个性,然后利用它来指导如何在一个非常大的观察空间来调整模型和代码。从用户角度来看,最终的结果就是,把所有的这些输入都集中在TVM里,并选择一个目标硬件,TVM会为你的模型找到合适的调优方式,并且在目标硬件上编译成一个非常高效的二进制文件。
Lukas:创办OctoML的动机是什么?
Luis:TVM已经变得相当流行,大约两年前我们就开始创办公司。那是一个群星闪耀的时刻。当时TVM的应用非常广泛,而且我们发现,有更多的硬件厂商开始将TVM作为首选软件栈。当我们在西雅图举行第二次开发者会议时,我看见屋里坐满了人。我想这是一个机会,要广泛地普及TVM能够做的事情。
而在那之前的几年里,我已经成为了正教授,TVM的许多核心成员博士都即将毕业。TVM的主要倡导者之一的Jason Knight,当时在Intel工作,他也希望寻找新的起点,于是这一刻“群星闪耀”,他成了联合创始人。我很庆幸有这么一批人准备创办公司,而且我们有很好的合作关系。
这里面有许多的协同作用,但它和“群星闪耀”的一段是一样的。从技术角度来讲,我们大家都很清楚已经拥有了这种模型和硬件的交叉产品,有如此巨大的机会去创建一个干净的抽象,同时自动消除使机器学习真正有用和可部署的难题。
说实话,我并不喜欢MLOps这个术语,因为它意味着很多东西,但从数据到部署模型,很显然创建模型的工具已变得很好用了,现在有很多人可以创建很好的模型,有大量可用的模型库。
但经过与一些潜在的客户的访谈,我们意识到,事实上,人们在模型部署方面遇到了许多困难,需要解决软件工程、性能要求和成本要求才行。所以,我们创办了OctoML,实质就是让TVM更易于获取,或让更多的模型构建者能够使用,并且让其成为一种流程。
让我来简要介绍一下Octomizer。Octomizer是一种用于加速机器学习的平台,其核心是TVM。只需几个调用操作,“上传模型、选择、下载模型、优化模型”,然后选择想要的目标硬件。Octomizer会调用 TVM,或者也可以使用 ONNX-Runtime,我们将继续添加更多类似的运行时后端。同样,我们想为用户提供一个抽象的概念,就是你可以把模型上传,这样就可以获得最快速的模型,并可以在硬件上以完全自动化的方式进