加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

还在用Github管理机器学习项目?你早该了解这些更专业的新工具!

发布时间:2019-07-01 19:07:27 所属栏目:建站 来源:大数据文摘
导读:大数据文摘出品 编译:钱天培、胡笳 太复杂了!机器学习(ML)项目实在太复杂了! 听到这种抱怨,熟悉软件开发的小伙伴们往往是嗤之以鼻的。 机器学习,不过是和数据和软件打交道。那就应该是是运行代码、迭代算法的简单问题呀?一段时间后,我们就能拥有一个完
副标题[/!--empirenews.page--]

还在用Github管理机器学习项目?你早该了解这些更专业的新工具!

大数据文摘出品

编译:钱天培、胡笳

“太复杂了!机器学习(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) 可扩展性:支持多个同事同时处理一个项目的能力,以及同时处理多个项目的能力

还在用Github管理机器学习项目?你早该了解这些更专业的新工具!

为什么不在机器学习项目中使用常规的软件工程工具?

诚然,在常规软件工程项目中使用的许多工具可能对机器学习研究人员有用。

在常规的源代码管理系统(如Git)中可以轻松地管理代码和实验配置,并且可以使用pull request之类的技术来管理对这些文件的更新。CI/CD(Jenkins等)系统甚至可以用于自动化项目运行。

但是,ML项目另有不同之处,使得普通的软件开发工具无法满足所有的需求。下面是几个重要的不同点:

  • 度量标准驱动(metrics-driven)的开发与特性驱动(feature-driven)的开发:在常规软件工程中,“是否发布”这一决策基于团队是否达完成了一些特征。相比之下,机器学习研究人员研究的是一种完全不同的测量方法——生成的机器学习模型的预测值。研究人员将迭代地生成几十个(或更多)模型,测量每个模型的准确性。由于目标是找到最精确的模型,因此项目由每个实验中实现的度量指标来指导。
  • 机器学习模型需要大量的资源来训练:一个常规的软件项目将文件组织在一起编译一个软件产品,而机器学习项目则训练一个描述AI算法的“模型”。在大多数情况下,编译一个软件产品只需要几分钟,非常快速,因此许多团队遵循持续集成(continuous integration)的策略。训练一个机器学习模型则需要很长时间。除非必要,最好避免持续集成。
  • 庞大的数据集和训练好的模型:机器学习开发阶段几乎总是需要庞大的数据集,此外,训练过的模型也可能是巨大的。普通的源代码管理工具(Git等)不能很好地处理大型文件,而且Git- lfs之类的附加组件也不适合ML项目。
  • 工作流(pipelines):机器学习项目是一系列步骤——如下载数据、准备数据、将数据分离到培训/验证集、培训模型和验证模型。许多人使用pipelines这个词来描述整个过程,意思是用每个步骤的离散命令来构造机器学习项目,而不是把所有东西都塞进一个程序中。
  • 专用硬件:软件开发商可以将其软件基础设施托管在任何类型的服务器设备上。如果他们想要一个云部署,他们可以从他们喜欢的云计算提供商那里租用VPS。然而,机器学习研究人员有巨大的计算需求。高性能GPU不仅可以加速视频编辑,还可以让ML算法加速“飞”起来,大大缩短了训练ML模型所需的时间。

现在,我们已经有了一个机器学习项目开发的原则列表,并了解了ML项目和普通软件开发项目的不同之处。

接下来,让我们看看有哪些开源软件可以帮助我们实现这些原则。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读