MLOps之路

刚加入机器学习小组那一年,我们的架构师在一次学习交流会的时候,给我们讲解了谷歌的一篇关于机器学习中技术债务问题的论文(Hidden Technical Debt in Machine Learning Systems),当时不明觉厉。如今,回看这篇文章,觉得都是实实在在的经验之谈,信息量相当大。后来谷歌又有了一篇谈如何保证机器学习模型质量的论文(The ML Test Score: A rubric for ML Production Readiness and technical debt deduction)。几次和同事讨论关于机器学习债务问题的时候,大家都要谈到MLOps上来。我们是没有一个成熟的可借用的mlops模式,所以积累了越来越多的技术债务问题。为什么模型rollback有时候不能像软件rollback一样简单呢,为什么我们对要上线的模型的质量不是那么信心满满呢(可以搜索一下Amazon price error,据说错误的模型导致亚马逊一上午损失几百万美刀) 
该如何定义MLOps呢?问答这个问题之前,我们不烦可以想想什么是devops呢。我的脑海中马上联想出了版本控制,自动测试,night test,CI/CD, 打包,部署。但还是不能抽象出一个定义来。
 
 
于是我问家里那位搞devops的,你来说说,你们devops干什么的吧,人家迅速抛出两词”quick feedback”, “automation”。
 
有一种茅舍顿开的感觉,MLOps不也是奔着这两条来的吗?
 
既然目的都是一样,为什么还要发明出新词来呢。噱头总是要搞的嘛。不发明出新词,谁来重视。
 
其实也不然。机器学习虽然看上去也是成天在写代码,跑程序,做测试,但是与传统的软件开发有明显的不同。
 
 
 
比如说,非常重要的一点是,对于数据的依赖。数据的改变,直接影响着输出模型,因此数据管理是一个重要的环节。data lake, data warehouse也成了MLOps的重要部分。如何跟踪数据的变化,可视化数据的各种属性都需要被考虑。当然如何简单,方便,不出错地pull所需要的数据更是关系到数据工程师的工作效率。如何方便的删除不需要不能用的数据也是必不可少的功能。想想GPDR,个人数据可是随时可以说要撤掉的,如果人家说要撤了,由于工具原因撤不了,那就麻烦了。
 
机器学习的输出是模型,这个和传统的软件行业的输出是软件有不同。如何保证模型的质量呢?传统的软件行业说到质量保证(Quality Assurance )的时候,当然就是测试,单元测试,功能测试,集成测试,性能测试。。。各种各样的测试。但是对于机器学习中的质量或测试问题呢?
 
两年前,team里决定搞个meetup来招QA。既然要招QA,就必须知道职责是什么,期望是什么。结果研究几天发现太难了。模型怎么测?我们给模型打分(有兴趣的话,可以参考我之前写过的关于如何给模型打分的文章),分数高低不是已经说明了模型好坏吗?分数如果不高,需要回头继续分析数据,分析网络, 重新训练网络的迭代过程,貌似机器学习的工程师自己都搞定了。经过一番讨论,我们大致分工了一下,实验室的模型迭代到满意分数的结果,由机器学习工程师负责。产品中模型表现如何由QA负责。
 
于是乎又引出了两个问题,机器学习工程师如何快速迭代出一个高分的,可解释的模型以及QA如何在产品中测试这个模型。
 
前者的问题已然相当复杂。经常遇到这样的场景,终于得到高分模型,但是需要一番分析才知道模型的来龙去脉,用了什么数据,选了那些特征值,做了什么预处理,用了什么算法。刚开始接触模型训练,可能不存在这样的问题,但是多了就可能乱,人工管理这些属性,必然引入人为错误。谷歌估计也是从血淋淋的教训中发明出来了Model Card的概念。一个模型必然带着一个card,来龙去脉全部在那, 模型的生产过程全部自动记录在card上了。非常必要的Automation。
 
一个高分模型移到产品中,必然和某个版本的代码打包一起出去。这时候除了传统的测试,需要什么特殊处理吗。当然模型预测出来的东西不能是垃圾吧,参考亚马逊例子。不能看绝对的对与错,可以看看与上个版本的diff吧。对于mlops来说,便是全力以赴使用自动化,快速得到反馈。
 
机器学习的模型生产伴随着无数的实验。如何有效的管理这些实验数据,实验报表,优化曲线等也是mlops区别于devops的新东西。比如说data scientist最喜欢的Jupyter Notebook。如何保证notebook始终可以运行?也许你认为这是一个小问题,实际不然。Notebook可大可小。可以只是简单的plot几个曲线,即使这样,曲线背后的数据是不是还available?Notebook也可以包含End2End的算法。对于notebook的ops该怎么做? Open question 🙂
 
或许我们可以看看mlops的dashboard需要包含哪些内容。或者是哪些增量内容。
  • 包含代码版本,数据版本,网络结构,特征总结,以及模型得分的ModelCard
  • 包含访问权限,数据来源,数据归类,采集时间等信息的DataCard
  • 最新publish的notebook
  • data lake,data warehouse, 实验数据的上次备份时间
  • 模型预测变化报警
  • 模型预测速度检测
  • 。。。
 
 
MLOps的内容很多,实际上有MLOps工程师的公司不是太多。所以对于data scientist的一个挑战,就是学习一些MLOps吧。
 
 
(插图均来自网络)
 
 
更多文章,关注Dagis的微信公众号:)
 
posted @ 2020-08-30 03:36  dagis  阅读(1117)  评论(0编辑  收藏  举报