还在用Github管理机器学习项目?你早该了解这些更专业的新工具!
我们将特别讨论两个工具,MLFlow和DVC。当然,还有很多其他软件可以取得类似的效果。 机器学习项目中的数据与模型存储 我们的讨论可以归结为:
总的来说,我们需要一个数据跟踪系统来透明地审计、或者复现结果。我们也需要一个数据共享系统来将项目团队扩展到多个同事。 就如我们先前讨论的一样,使用Git或其他SCM(源代码管理系统)来存储机器学习项目中使用的数据文件是不切实际的。 一些库提供了API来简化远程存储上的文件处理,并管理向远程存储上传或获取文件。虽然这有利于远程数据集的共享访问,但却对我们面对的问题没有帮助。 首先,它是嵌入式配置的一种形式,因为文件名被嵌入到软件中。在源代码中嵌入配置设置的任何程序在其他情况下都更难以被重新使用。其次,它没有将脚本版本和其使用的数据文件关联起来。 下面,然后我们看一下MLFlow的示例代码:
这支持多种文件访问“方案”,包括S3这样的云存储系统。这里的示例从“run”区域加载一个文件,在本例中是一个经过训练的模型。每次执行一段代码时,MLFlow都会生成一个“run”。你需要配置一个存储“run”数据的位置,并且显然会为每个用于索引到数据存储区域的运行生成一个“run ID”。 这种方式有效地将数据与对应SCM源码管理库中的代码和配置文件的commit提交版本关联起来。此外,MLFLow API有多种实现语言,并不局限于 Python语言。 DVC采用的则是另一种方式。对比上面将文件API集成到ML脚本中,你的脚本可以简单地使用普通文件系统的API实现输入和输出文件。例如:
通过上述代码,路径名称将通过这条命令传入。你无需特别修改代码,因为DVC可以通过外部传递训练代码或验证模型代码需要的值。 DVC让这一切变得透明——数据文件版本与代码的Git版本是相匹配的。 通过下述命令,你可将文件或文件夹加入DVC的版本管理:
数据存储在你的工作目录中。浏览各项运行的结果也很简单,只需要浏览你的Git历史即可。查看特定结果就像git checkout一样简单,DVC将被调用,并确保将正确的数据文件连接到workspace。 一个”DVC文件”将被创建,用于追踪每个文件及目录,并将被添加到workspace中。这样做有两个目的,一是可以追踪数据和模型文件,另一个则是记录工作流程中的命令。我们将在下一节中介绍这部分。 这些DVC文件记录文件和目录的MD5总和校验码(MD5 checksum)。他们被提交到git workspace上,因此DVC文件记录了每次git提交的每个文件的总和校验码。DVC使用了“DVC缓存目录”来存储每个文件的多个实例。文件实例通过总和校验码进行索引,并使用reflinks或symlinks链接到workspace。当DVC响应git checkout命令时,它能够根据DVC文件中的总和校验码快速地重排链接文件。 DVC支持远程缓存目录,用于共享文件和模型。
DVC remote是一个存储池,可以进行数据共享。它支持许多存储服务,包括S3、HTTP和FTP等。创建一个DVC remote非常简单。dvc push和dvc pull命令高度模拟了git push 和git pull命令。dvc push用于将数据发送到远程DVC的缓存中,dvc pull用于从远程DVC缓存中拉取数据。 机器学习项目中的工作流描述 接下来,我们将讨论如何更好地描述机器学习项目的工作流。我们应该一股脑将所有东西堆成一个程序吗?还是应该使用多种工具? 为了尽可能地创造灵活性,我们可以将工作流通过pipeline或有向无环图(DAG),并采用命令行参数作为配置选项的方式来实现。这有点类似Unix哲学中的小而精巧的工具——小巧但可以很好地协同工作。其行为可由命令行选项或环境变量指定,并且可以根据需要任意搭配使用。 相比之下,很多ML框架采用不同的方式。他们编写单独的程序来驱动特定项目的工作流。程序第一步先将数据拆分为训练集和验证集,然后训练模型并验证模型。这种整套的单独程序可带来重用代码的机会有限。 将ML项目构建pipeline可带来如下好处
在MLFlow中,你需要编写一个“驱动程序”。这个程序包含了所需的执行逻辑,例如处理及生成机器学习模型。在程序背后,MLFlow API发送请求给MLFlow 服务器,通过该服务器生成指定的命令。 (编辑:甘孜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |