还在用Github管理机器学习项目?你早该了解这些更专业的新工具!
作者:网友投稿 时间:2019-07-01 21:05

大数据文摘出品
编译:钱天培、胡笳
“太复杂了!机器学习(ML)项目实在太复杂了!”
听到这种抱怨,熟悉软件开发的小伙伴们往往是嗤之以鼻的。
机器学习,不过是和数据和软件打交道。那就应该是是运行代码、迭代算法的简单问题呀?一段时间后,我们就能拥有一个完美的训练有素的ML模型。
有什么复杂的?
然而,当真正着手起机器学习项目,你就会发现:事情可没有那么简单!
在项目进行了一段时间后,你的训练数据或许已经被更改或删除,而你对训练脚本的理解可能也已经十分模糊。
回过头看你训练好的模型,你可能也记不得每一个模型是怎么训练出来的了;再或者,你想要查看先前训练好的模型,却发现模型早已被覆盖。
更可怕的是团队协作,你想要把你的工作分享给你的同事们,他们却怎么也无法复现你的结果,更别提参与协作了。
别慌!今天,文摘菌就来带大家系统地学习一下,如何正确地管理机器学习(ML)项目。
正如一般的软件开发项目一样,你需要更好地管理代码版本和项目资产。在软件开发项目中,人们可能需要重新审视项目先前的状态。在机器学习项目中,我们该如何实现类似的审查呢?与Pull Request相对应的又是什么呢?
就我个人而言,我才刚刚开始接触机器学习工具。在学习过程中,我观看了一些教程视频。老师们提到的一些问题会让我想起我在软件工程职业生涯早期碰到的难题。例如,在1993到1994年,我是一个开发电子邮件用户代理的团队首席工程师。我们没有任何源代码管理(SCM)系统。每天我都会咨询其他团队成员,看看他们那天做了哪些改变,也就是在他们的源树和主源树之间运行一个diff操作,然后手动更改代码。稍后,团队成员从主源树手动更新他们的源树。
在我们发现早期的SCM系统(CVS)之前,这真是一团糟。SCM工具使项目运行得更加顺利。
当我了解到机器学习和数据科学项目中使用的工具时,我发现机器学习过程就如上边所说的那样。即使在今天,机器学习研究人员有时会将实验(数据,代码等)存储在并行目录结构中,以便于进行diff审查,就像我在1993年所做的那样。
那么,理想中的机器学习项目管理应该是怎么样的呢?
ML项目管理原则
让我们从一些简要的ML项目管理原则说起。
在任何ML项目中,程序员们都会进行许多实验,为目标场景开发最佳的训练模型。实验一般包含:
代码和配置:实验中使用的软件,以及配置参数
数据集:任何输入数据的使用——这可以是千兆级别大小的数据,比如语音识别、图像识别项目中所用到的数据
输出:训练后的ML模型和实验的任何其他输出
机器学习项目本质也就是软件运行。但是,与同事共享文件或复制结果,并及时回顾以评估项目通常十分困难。我们需要更全面的管理工具。
解决方案需要涵盖以下几点(从Patrick Ball的题为《原则性数据处理》的演讲中摘录):
(1) 透明性:方便检查ML项目的方方面面
使用什么代码、配置和数据文件
工程项目采用什么工序,工序的次序是什么
(2) 可审核性:方便检查pipeline的中间结果
(3) 可复现性:在开发的任何阶段精确地重新执行项目的能力,以及同事精确地重新执行项目的能力
记录处理步骤,以便任何人都可以自动重新运行这些步骤
在项目进行过程中记录项目的状态。“状态”表示代码、配置和数据集
能够在项目历史的任何时候重新创建可用的精确数据集
(4) 可扩展性:支持多个同事同时处理一个项目的能力,以及同时处理多个项目的能力

为什么不在机器学习项目中使用常规的软件工程工具?
诚然,在常规软件工程项目中使用的许多工具可能对机器学习研究人员有用。
在常规的源代码管理系统(如Git)中可以轻松地管理代码和实验配置,并且可以使用pull request之类的技术来管理对这些文件的更新。CI/CD(Jenkins等)系统甚至可以用于自动化项目运行。
但是,ML项目另有不同之处,使得普通的软件开发工具无法满足所有的需求。下面是几个重要的不同点:



