If you don't know the provenance or the source of the artifact, it's not science, it's a pretty thing to look at. — Erin McKean
我们都知道在写程序的时候要使用版本控制来追踪、维护程序码,但在机器学习的领域是否需要类似的方法论呢?
在开始今天的文章之前,先来想想看以下问题该怎麽回答:
这些问题看似无关紧要,反正产品可以用就好,何必对模型进行身家调查,但良好的机器学习系统应该要持续地产生一致的结果,而为了确保可再现性,能流畅的回答这些问题便是关键。
但实务上,要厘清这些机器学习生成物 (Artifact) 之间的脉络与连结可远比使用简单的线性日志来记录还要复杂。
因此,我们必须导入被称为资料版本控制 (Data versions control) 的概念。
而且由於资料档案的尺寸通常比程序码大的多,所以资料版控的工具在本质上与我们熟悉的程序码版控 (Git) 以及环境版控 (Docker) 工具有很大的差异。
常被用来进行资料版控的工具有 DVC、 Git LFS (Large Files Storage),以及今天我们要介绍的 ML metadata (MLMD),它可以追踪与回溯资料与模型在训练过程中的改变,进一步帮助我们除错、提昇可再现性以及遵守使用资料的相关法规,那我们就开始吧!
从原始特徵、标签到最终预测,资料会经过很多不同的转换,而这一连串的操作就组合成了 Pipeline。
当我们在训练模型时,资料就在 Pipeline 中随着模型学习映射函数的过程转换与改变,
厘清资料在整个产品生命周期 Pipeline 中的 "旅程" 可以帮助我们了解资料的 "血统关系 (provenance & lineage)",也就是回答前言里那些问题的关键。
因为模型本身就是训练资料的一种表示法,所以可以将模型视为资料的转换。
而产品化最重要的工作就是 "重现" 研发时的前处理 Pipeline,以确保演算法在作为产品时接收的输入资料分布与研发阶段相同,其中两个阶段的工作要点如下:
POC (proof-of-concept):
Production:
以预测某人是否在找工作为例,可能的 Pipeline 如下图:
其中 [资料+ML code] 代表使用该资料训练模型,[模型+资料] 代表使用该模型对资料进行推论。
这种复杂的 Pipeline 在大型商业系统中并不少见 (通常会更复杂),可以想见如果其中某个资料集做了改变势必会牵一发动全身。
为了增加这类系统的可维护性,可以试着追踪以下两个资讯:
而目前的做法就是尽可能纪录各种元资料 (Metadata),也就是资料的资料。
以瑕疵检测为例,可以记录任何与 x、y 有关的资料,像是影像取得的时间、工厂、产线、相机参数,以及标注者的 ID 等。
这麽做的优点在於:
这里整理一下上面出现的名词:
MLMD 为追踪与存取 metadata 的函式库,它可以被整合进 ML Pipeline 中,也可以单独使用。
使用 MLMD 时,我们必须知道资料如何在各个 Pipeline 部件之间流动,其中资料流的每一步都可以用一个实体 (entity) 来描述,这些实体又可以被视为单位 (Unit)。
而每个单位又可以使用性质 (property) 来描述额外的细节资讯,这些性质会储存在相对应的类型 (Types) 中,以下为 MLMD 常用的术语:
最後,Relationships 会储存不同 Unit 之间互动时产生或使用的 Unit,例如 Event 纪录的就是 Artifact 与 Execution 之间的关系。
简单来说,MLMD 纪录各种 Pipeline 部件的相关资讯,这些资讯会被表成 metadata 物件存进後端储存选项中:
*图片来源:MLEP — Introduction to ML Metadata
在 MLMD 的整体架构中,最上层为 ML Pipeline 中的各种部件,它们各自与 MLMD 的集中式元资料管理 MetadataStore 连接,因此每个部件都可以在 Pipeline 的各个阶段独立存取 metadata。
MetadataStore 的核心为 Artifact (以相对应 ArtifactType 描述),它可以作为 Pipeline 部件的输入值,而其如何被 Pipeline 部件使用则纪录进 Execution 中。
而 Artifact 作为某部件的输入会被纪录为 input Event,相对应地该部件产生新的 Artifact 作为输出则会纪录为 output Event。
Artifacts 与 Executions 之间的互动则藉由 Attribution 与 Association Relationships 与 Context 连结在一起。
最後,所有在 MetadataStore 产生的资料都会存进各种不同的後端储存选项中,例如 SQLite、MySQL,而大型物件则存进 file system、block store。
*图片来源:ML Metadata
除了追踪资料的血缘关系以外,使用 MLMD 还有以下好处:
实作我一率推荐官方教学,这里就不重复说明了。
以上就是今天的内容啦,今天也是机器学习产品生命周期资料部分的最後一篇,明天就要再次回朔一步,谈谈 Scoping 罗。
<<: Day23 让你的k8s Pod 具备多介面功能 - 介绍篇
像是React这个框架能够使用Hooks来写出一些function component,可以让前端不...
不知不觉来到了最後一天,虽然每天要挤出时间做动画不容易,但做的时候以及解决一个难题的时候都会很开心地...
老婆:"下班後买十个包子回来,如果看到卖西瓜的就买一个。" 老公:"...
Abstract 我们前面已经讨论了相当多种取得Bean的方法,如:自动注入(@Autowired、...