张怀政
论文题目:MLModelCI: An Automatic Cloud Platform for Efficient MLaaS
开源代码:https://github.com/cap-ntu/ML-Model-CI
深度学习正在改变生活中的方方面面。手中的APP,快递仓储物流的优化,蛋白质的预测,游戏的AI敌人等等,所谓“见面不谈人工智能,遍读诗书也枉然”。
可是将深度学习模型部署为线上服务,并不是一件简单的事情,君不见无数的报刊和博客都在吐槽人工智能落地的困难。一方面由于线上服务的低延迟等需求,模型需要进行大量的优化,一方面各种各样的硬件加速器,训练软件格式,让每个工程师在对接已有服务的时候,都无比头疼。将训练出来新模型到部署成一个线上服务,可谓路漫漫其修远兮。
我们将整体的流程抽象化为下面几个节点,后面我们一一解释。
图1 模型部署流程抽象
总的来说,这是一个不断优化,不断探究性能极限,不断进行测试,不断去追求在自己的场景下,找到一个最优(速度最优or吞吐最优or花费最优,等等)解的过程。下面简要介绍各个阶段。
1. 模型及其各种运行组件管理
与传统的软件开发不同,模型的开发代码(训练)与上线代码(推理),完全不一样。要保证训练出来的模型可用,用户需要将模型以及对应的预处理,后处理,甚至运行环境全部进行考虑,然后重新编写推理测试代码,以求上线。
2. 模型优化,量化
为了降低服务的存储消耗,缩短延迟,一般都会尽可能的将模型进行优化。大量的剪枝和量化paper,不再多提,始终是机器学习的热门个方向。
3. 模型转换 (重编译)
而为了适配不同的硬件设施或者进一步的提高模型性能,可以优化模型的计算图,从底层算子进行考虑,编译转换模型。这其中的佼佼者自然是TVM。其它的TensorRT和ONNX (配合ONNX Runtime)也非常优秀。最近OSDI 2020有一篇Microsoft的工作,惊为天人。
4. 模型服务系统绑定
当面对用户时,考虑的便不再只是时延这些事情了,吞吐量,长尾延迟,AB test等等,都是非常现实的问题。为了提高模型的服务能力,便需要将其与服务系统绑定,使其在新的硬件集群上高效运行。tensorflow-serving是早期的入局者,clipper是学术圈的代表。如今的trion inference serving还有一些seldon,都越来越出色了。
5. 模型调试及上线
最后就是一系列的模型参数调试了,多大的batch size更合适?部署在哪个硬件更经济?AB test怎么控制,等等。全部搞定才能获得一个高质量的服务。
小总结
可以看出来,完整跑完部署的整套流程是极其恼人的,在任何一步都可能出现问题。例如,训练环境和生产环境打包不一致,模型不支持转换导致长时间在debug,如何选择出一套最优参数配置等等。
MLOps应运而生,越来越多的工作,投入到解决上述问题。
一点微小的工作
最近我们刚开源了一个很初期的的小工作,叫做MLModelCI,期望自动化这个流程。
整体来说,我们通过一个模型管家来让用户发布,管理模型,然后系统自动利用集群闲置资源,将模型进行优化,转化和性能解析,最终自动将其绑定到服务系统上。用户很快便能拿到可用的服务以及在不同情况下的各种性能信息(latency,cost等等),然后对应进行配置、部署和上线。
图2 MLModelCI
这样一系列操作,可以大大减轻用户的负担。我们在开发的过程中,可谓遇到了无数的血泪坑,其中的研究点也确实不少。希望大家能够一起交流。
项目处于萌芽状态,目前的maintainer 还在推进中,大家欢迎提issue。