有人指出,虽然开发辅助工具的不充分,难以保证完全Cadours机器学习数学模型的结果,机器学习领域正「陷入经济危机」。那个经济危机能透过为机器学习专业人士提供更好的开发辅助工具来化解。
可Cadours性痛点非常重要,每年一度的 NeurIPS 会议也将其列入 NeurIPS 2019 讨论的主要议程。
所谓的经济危机是即使人类学家难以Cadours南埃尔普或科学家们的组织工作,这阻碍了他们在彼此之间组织工作基础上进一步取得进展。虽然机器学习和其他形式的人工智慧应用软件在学术研究和企业研究中得到应用,因此可拷贝性或可Cadours性是一个亟待化解的关键点。
他们可能将指出这能透过典型的计算机科学辅助工具来化解,即使机器学习开发与普通计算机科学类似。在这两种情况下,他们会聚合某种校对开发辅助工具,以便在计算机软件上继续执行,并获得准确的结论。为什么他们无法利用丰富的开发辅助工具和质量极好的应用软件来为机器学习项目组构筑可Cadours业务流程呢?
惋惜的是,传统的计算机科学辅助工具并无法较好地满足机器学习人类学家的需求。
关键点是体能训练统计数据。通常,体能训练机器学习数学模型需要大量的统计数据,例如影像、音频或文档。而体能训练统计数据无此任何人一种源码掌控监督机制下,即使像 Git 这样的系统无法较好地处置小型统计数据文档,并且用于聚合 delta 文档文档的源码掌控信息系统无法较好地处置对小型十进制文档的更动。
任何人经验丰富的计算机科学师单厢告诉你,没有源码掌控的项目组只是「镰叶蚯蚓」。更动文档不会一直被历史记录,项目组成员经常会忘掉继续执行过的操作。
而当体能训练结束时,你可能将难以Cadours用该体能训练统计数据体能训练的数学模型,即使体能训练统计数据季全季以未明方式发生改变。如果没有应用软件产品历史记录有次的统计数据集状态,那么有什么监督机制能历史记录这一切呢?
Git-LFS 是化解方案吗?
他们首先想到的化解方案可能将是简单地采用 Git-LFS (Git Large File Storage),顾名思义,它在构筑 Git 时处置大文档。Git-LFS「用 Git 内部的文档指针替换小型文档,如音频、音频、统计数据集和图形,同时将文档内容存储在 GitHub.com 或 GitHub Enterprise 等远程服务器上。」
我仿佛还能听到机器学习项目组说「听起来很棒,开始吧」。它能够处置数千兆字节的文档,加快远程存储库的出库速度,并采用同样舒适的组织工作流。这肯定符合标准了,对吧?
并没这么简单,项目经理没有告诉你要三思而后行吗?就像另一个宝贵的人生意见一样:过马路之前要左右看看。
你应该首先考虑的是 Git-LFS 需要一个 LFS 服务器,并且该服务器不是透过每个 Git 托管服务都可用。三巨头(Github、Gitlab 和 Atlassian)都支持 Git-LFS,但也许你天生爱 DIY。相比采用第三方 Git 托管服务,你可能将更愿意自己托管 Git 服务。例如,Gogs 是一个功能强大的 Git 服务器,你能随心所欲地在自己的硬件上运行,但它没有内置的 Git-LFS 支持。
根据你的统计数据需求,下一步可能将会有点「致命」:Git-LFS 允许的存储文档最大为 2 GB。这是 Github 带来的限制,而非 Git-LFS,但是似乎所有的 Git-LFS 实现都受到各种限制。Gitlab 和 Atlassian 都有各种 Git-LFS 限制。想想 Github 的那个 2GB 限制:Git-LFS 有个应用案例是存储音频文档,但是音频的大小经常超过 2GB。因此,Github 上的 GIt-LFS 可能将不适用于机器学习统计数据集。
不仅仅是 2GB 的限制,Github 对 Git-LFS 采用的免费层也设置了严格的限制,采用者必须购买涵盖统计数据和带宽采用的统计数据计划。
与带宽相关的一个痛点是,当你采用托管的 Git-LFS 化解方案时,体能训练统计数据会存储在远程服务器中,必须透过 Internet 下载统计数据。而下载过程严重影响用户体验。
另一个痛点是,在运行基于云的 AI 应用软件时,通常需要将统计数据文档放置在云存储系统(AWS、GCP 等)上。而来自 Git 服务器三巨头的主要 Git-LFS 产品将 LFS 文档存储在它们的服务器上,一般不支持云存储。
有一个 DIY 的 Git-LFS 服务器能在 AWS S3 上存储文档,网址是 https://github.com/meltingice/git-lfs-s3,但是设置自定义的 Git-LFS 服务器需要额外的组织工作。
而且,如果需要将文档放在 GCP 而不是 AWS 基础架构上时,该怎么办?是否有 Git-LFS 服务器能够将统计数据存储在自主选择的云存储平台上?是否有采用简易 SSH 服务器的 Git-LFS 服务器?换句话说,GIt-LFS 限制了用户对统计数据存储位置的选择。
采用 Git-LFS 化解了所谓的机器学习Cadours经济危机吗?
采用 Git-LFS 后,你的机器学习项目组能更好地掌控统计数据,即使它现在是版本掌控的。这是否意味着痛点已化解?
先前他们说过「关键点是体能训练统计数据」,但这是一个小谎言。是的,统计数据能在版本掌控下就是一个很大的改进。但是缺乏对统计数据文档的版本掌控是整个痛点所在 吗?并不。
什么决定了体能训练数学模型或其他活动的结论?决定因素包括但不限以下内容:
体能训练统计数据——体能训练数学模型时采用的影像统计数据库或任何人统计数据源
体能训练数学模型采用的脚本
体能训练脚本采用的库
处置统计数据采用的脚本
处置统计数据采用的库或其它辅助工具
操作系统和 CPU/GPU 硬件
生产系统标识符
生产系统标识符采用的库
显然,体能训练数学模型的结论取决于各种条件。虽然存在多方变量,所以很难准确描述,但一般的痛点是缺少所谓的配置管理。计算机科学师已经认识到能够指定部署系统时采用的精确系统配置十分重要。
机器学习可Cadours性的化解方案
人类是一个富有创造力的群体,为那个「经济危机」提出了很多可能将的化解方案。
R Studio 或 Jupyter Notebook 等环境提供了一种交互式 Markdown 文档,能配置用来继续执行统计数据科学或机器学习组织工作流。这对于历史记录机器学习组织工作以及指定采用哪些脚本和库来说非常有用。但是这些系统不提供管理统计数据集的化解方案。
同样,Makefile 和类似的组织工作流脚本辅助工具提供了一种重复继续执行一系列命令的方法。继续执行命令是透过文档系统时间戳确定的。这些辅助工具也不提供统计数据管理化解方案。
另一方面,像 Domino Data Labs 或 C3 IoT 这样的公司提供了统计数据科学和机器学习的托管平台。两者都将基于大量统计数据科学辅助工具的产品打包在一起。在某些情况下,如 C3 IoT,用户采用专用语言编码,并将统计数据存储在专用统计数据存储中。「一站式备齐」可能将真的很便捷,但它能提供足够的灵活性吗?
本文接下来的部分将介绍 DVC。它的设计充分利用了大多数人对 Git 的熟悉程度,旨在与 Git 功能紧密匹配,但它具有适用于机器学习环境中的组织工作流和统计数据管理的功能。
与 Git-LFS 或其他几种可能将的化解方案相比,DVC 承担并化解了机器学习Cadours性的大部分痛点。它的方式是在 DVC 和像 Git 这样的源码信息系统(SCM)中混合管理标识符(脚本和程序)以及大统计数据文档。此外,DVC 管理处置机器学习实验中采用的文档所需的组织工作流。
DVC 文档中描述了统计数据文档和要继续执行的命令,他们将在接下来的小节介绍这些文档。最后,采用 DVC 能随心所欲地将统计数据存储在许多存储系统上,像本地磁盘、SSH 服务器或云系统(S3、GCP 等)。DVC 管理的统计数据能很容易地与其他采用此存储系统的用户共享资源。
图源:http://dvc.org/
DVC 采用与 Git 类似的命令结构。正如他们看到的,就像 git push 和 git pull 用于共享资源标识符和配置一样,dvc push 和 dvc pull 用于共享资源统计数据。所有这些都将在后面的章节详细介绍,或者如果你想学习 DVC,请参阅教程:https://dvc.org/doc/tutorial。
DVC 能精确历史山香点和采用的文件
DVC 的核心是为存储和版本掌控大文档而优化的统计数据存储(DVC 缓存)。项目组能选择将哪些文档存储在 SCM(如 Git)中,哪些存储在 DVC 中。存储由 DVC 管理的文档,这样 DVC 能维护每个文档的多个版本,并采用文档系统链接快速更换正在采用的文档版本。
从概念上讲,SCM(如 Git)和 DVC 都有存储库,其中包含每个文档的多个版本。如果查看「版本 N」,相应的文档将出现在组织工作目录中,然后查看「版本 N + 1」,文档将会匹配新版本。
图源:http://dvc.org/
在 DVC 端,这在 DVC 缓存中处置。存储在缓存中的文档透过内容校验和(MD5 哈希值)进行索引。随着 DVC 管理的各个文档发生变化时,其校验和会发生变化,并会创建相应的缓存条目。缓存将保存每个文档的所有实例。
为了提高效率,DVC 采用多种链接方法(取决于文档系统支持)将文档插入组织工作区而无需拷贝。这样,DVC 能在请求时快速更新组织工作目录。
DVC 采用所谓的「DVC 文档」来描述统计数据文档和组织工作流步骤。每个组织工作区将有多个 DVC 文档,每个文档都用相应的校验和描述一个或多个统计数据文档,每个文档都要描述在组织工作流中继续执行的命令。
cmd: python src/prepare.py data/data.xmldeps:- md5: b4801c88a83f3bf5024c19a942993a48 path: src/prepare.py- md5: a304afb96060aad90176268345e10355 path: data/data.xmlmd5: c3a73109be6c186b9d72e714bcedaddbouts:- cache: true md5: 6836f797f3924fb46fcfd6b9f6aa6416.dir metric: false path: data/preparedwdir: .
示例的 DVC 文档来自 DVC 入门示例(https://github.com/iterative/example-get-started),并显示了组织工作流的初始步骤。在下一节,他们会详细介绍组织工作流。现在,请注意此命令有两个依赖项 src/prepare.py 和 data/data.xml,以及一个名为 data/prepared 的输出统计数据目录。这些单厢产生 MD5 哈希值,并且随着文档更动,MD5 哈希值将发生变化,更动后的统计数据文档的新实例将存储在 DVC 缓存中。
DVC 文档被检入 SCM 管理(Git)存储库。当存入 SCM 存储库时,每个 DVC 文档单厢采用每个文档的新校验和来更新(如果适用)。因此,采用 DVC 能精确地重新创建每个提交的统计数据集,项目组也能精确地重新创建项目的每个开发步骤。
DVC 文档类似于 Git-LFS 中采用的「指针」文档。
DVC 项目组建议在每个实验中采用不同的 SCM 标签或分支。因此,访问适合该实验的统计数据文档、标识符和配置就像切换分支一样简单。SCM 将自动更新标识符和配置文档,DVC 将自动更新统计数据文档。
这意味着你不用再绞尽脑汁去记住哪些统计数据文档用于什么实验了。DVC 会为追踪这一切。
DVC 会记住某一时间点采用命令的确凿次序
DVC 文档不仅能记住某一继续执行阶段采用的文档,还能记住在该阶段继续执行的命令。
Cadours机器学习结论不仅需要采用相同的统计数据文档,而且需要相同的处置步骤和相同的标识符/配置。一般创建数学模型的步骤,首先要准备在后续步骤中采用的样本统计数据。你可能将会利用 Python 脚本 prepare.py 来拆分统计数据,并且在 data/data.xml 文档中输入统计数据。
$ dvc run -d data/data.xml -d code/prepare.py \ -o data/prepared \ python code/prepare.py
他们用该语句使 DVC 历史记录该处置步骤。DVC「run」命令根据命令行选项创建 DVC 文档。
-d 选项定义依赖项,在本例中,他们看到 XML 格式的输入文档以及 Python 脚本。-o 选项历史记录输出文档,这里列出了输出统计数据目录。最后,继续执行的命令是一个 Python 脚本。
因此,他们输入的统计数据、标识符和配置以及输出统计数据,都被事无巨细地历史记录在聚合的 DVC 文档中,该文档对应上一节中显示的 DVC 文档。
如果 prepare.py 从本次提交更动为下一次提交,则 SCM 将自动跟踪更动。同样,对 data.xml 的任何人更动单厢在 DVC 缓存中产生新实例,DVC 将自动跟踪该实例。如果结论统计数据目录发生更动,DVC 也会跟踪它们。
DVC 文档也能简单地引用文档,如下所示:
md5: 99775a801a1553aae41358eafc2759a9outs:- cache: true md5: ce68b98d82545628782c66192c96f2d2 metric: false path: data/Posts.xml.zip persist: falsewdir: ..
这是 dvc add file 命令得到的结论,该命令仅在只有一个统计数据文档时采用,并且其他命令不会产生那个结论。例如,在 https://dvc.org/doc/tutorial/define-ml-pipeline 中会显示,结论会立刻出现在前面的 DVC 文档:
$ wget -P data https://dvc.org/s3/so/100K/Posts.xml.zip$ dvc add data/Posts.xml.zip
退一步讲,他们要明确这些是更小型组织工作流中的单个步骤,或者在 DVC 中称之为管道的步骤。透过 dvc add 和 dvc run,能将多个阶段串联起来,每个阶段都采用 dvc run 命令创建,且由 DVC 文档描述。
这意味着每个组织工作目录将包含多个 DVC 文档,其中一个用于该项目业务流程的每个阶段。DVC 扫描 DVC 文档,构筑Cadours业务流程所需命令的有向非循环图(Directed Acyclic Graph DAG)。
每个阶段都像一个 mini-Makefile,只有当依赖关系发生变化时,DVC 才会继续执行命令。它也有所不同,即使 DVC 不会像 Make 那样只考虑文档系统时间戳,而是考虑文档内容是否已更动,这由 DVC 文档中的校验和与文档的当前状态确定。
最重要的是,这意味着不需再费尽周章记住每个实验采用哪个版本的脚本。DVC 会跟踪所有内容。
图源:http://dvc.org/
DVC 使项目组成员之间随心所欲实现统计数据和标识符共享资源
机器学习研究人员可能需要与同事合作,需要共享资源统计数据、标识符和配置。或者需要将统计数据部署到远程系统,例如在云计算系统(AWS、GCP 等)上运行应用软件,这意味着将统计数据需要上传到相应的云存储服务(S3、GCP 等)上。
DVC 组织工作空间的标识符和配置端存储在 SCM 中(如 Git)。采用普通的 SCM 命令(如 git5 clone),你能随心所欲地与同事共享资源标识符和配置。但是如何与同事共享资源统计数据呢?
DVC 具有远程存储的概念。DVC 组织工作空间能将统计数据传输到远程存储中或从远程存储中提取统计数据。远程存储池能存在于任何人云存储平台(S3、GCP 等)以及 SSH 服务器上。
因此,要与同事共享资源标识符、配置和统计数据,首先要定义远程存储池。保存远程存储定义的配置文档由 SCM 跟踪。接下来,将 SCM 存储库传送到共享资源服务器,该服务器附带 DVC 配置文档。当你的同事克隆存储库时,他们就能立即从远程缓存中提取统计数据。
这意味着你的同事不用再费心思量如何运行你的标识符。他们能随心所欲Cadours你的确凿步骤,充分利用精确统计数据来聚合结论。
图源:http://dvc.org/
结论
Cadours结论的关键是,不仅要确保统计数据的正确版本,还要保证标识符和配置文档的正确版本,并自动继续执行各个步骤。成功的项目有时需要与同事协作,而这能透过云存储系统更随心所欲地实现。有些组织工作要求在云计算平台上运行 AI 应用软件,因此需要将统计数据文档存储在云存储平台上。
借助 DVC,机器学习研究项目组可以确保他们的统计数据、配置和标识符全部同步。它是一个易于采用的系统,能有效地管理共享资源统计数据存储库和 SCM 系统(如 Git),以存储配置和标识符。