特征平台(Feature store)
等级 1 机器学习流水线自动化的一个可选附加组件是特征平台。特征平台是一个集中式存储区,您可以在其中对特征的定义、存储和访问进行标准化处理,以方便训练和提供服务。特征平台需要为特征值提供高吞吐量批量服务和低延时实时服务的 API,以及支持训练和服务工作负载。
特征平台可帮助数据科学家执行以下操作:
- 发现并重复使用可用于实体的特征集,而不是重新创建相同或类似的特征集。
- 通过保留特征及其相关元数据来避免使用具有不同定义的类似特征。
- 从特征平台提供最新的特征值。
- 通过将特征平台用作实验、持续训练和在线服务的数据源,避免训练-模型服务偏差。此方法可确保用于训练的特征与模型服务期间使用的特征相同:
- 对于实验,数据科学家可以从特征平台中提取离线数据以运行实验。
- 对于持续训练,自动化机器学习训练流水线可以提取用于训练任务的数据集的一批最新特征值。
- 对于在线预测,预测服务可以提取与所请求实体相关的一批特征值,例如:客户受众特征、产品特征和当前的会话聚合特征。
元数据管理
系统会记录有关机器学习流水线每次执行情况的信息,以帮助实现数据和制品血缘、可重现性以及比较。这些信息还有助于您调试错误和异常情况。每次执行流水线时,机器学习元数据存储区都会记录以下元数据:
- 执行的流水线和组件版本。
- 开始和结束日期、时间以及流水线完成每个步骤所花费的时间。
- 流水线的执行者。
- 传递给流水线的参数。
- 指向流水线每个步骤生成的制品的指针,例如:准备好的数据的位置、验证异常情况、计算的统计信息以及从分类特征中提取的词汇。跟踪这些中间输出有助于您在流水线因某个步骤失败而停止时,从最近的步骤继续执行流水线,而不必重新执行已完成的步骤。
- 指向之前训练的模型的指针(如果您需要回滚到之前的模型版本,或者需要在流水线在模型验证步骤中获得新的测试数据时为之前的模型版本生成评估指标)。
- 在模型评估步骤中为训练集和测试集生成模型评估指标。这些指标可帮助您在模型验证步骤中将新训练的模型的性能与之前模型的记录性能进行比较。
机器学习流水线触发器
您可以自动执行机器学习生产流水线,以根据您的用例使用新数据重新训练模型:
- 按需:临时手动执行流水线。
- 按时间表:系统每天、每周或每月向机器学习系统提供带有标签的新数据。重新训练的频率还取决于数据模式的更改频率以及重新训练模型的费用。
- 根据新训练数据的可用性:新数据不会系统地提供给机器学习系统,而是在系统收集新数据并在源数据库中提供新数据时临时提供给机器学习系统。
- 在模型性能下降时:模型在性能明显下降时会重新训练。
- 在数据分布发生重大变化(概念偏移**)时。您很难评估在线模型的完整性能,但会注意到用于执行预测的特征的数据分布发生重大变化。这些变化表明您的模型已过时,需要使用新数据重新训练。
挑战
假设流水线的新实现不会频繁部署,并且您只管理几条流水线,则您通常需要手动测试流水线及其组件。此外,您需要手动部署新的流水线实现。您还需要将经过测试的流水线源代码提交给 IT 团队,以部署到目标环境。如果您根据新数据(而不是新的机器学习理念)部署新模型,则此设置是合适的。
但是,您需要尝试新的机器学习理念,并快速部署机器学习组件的新实现。如果您在生产环境中管理多条机器学习流水线,则需要设置 CI/CD 以自动构建、测试和部署机器学习流水线。
MLOps 等级 2:自动化 CI/CD 流水线
如需在生产环境中快速、可靠地更新流水线,您需要一个可靠的自动化 CI/CD 系统。此自动化 CI/CD 系统可让您的数据科学家快速探索有关特征工程、模型结构和超参数的新想法。他们可以实现这些想法,并自动构建、测试新的流水线组件,以及将其部署到目标环境。
下图显示了使用 CI/CD 进行机器学习流水线的实现,它具有自动化机器学习流水线设置以及常规的自动化 CI/CD 的特性。
此 MLOps 包含以下组件:
- 源代码控制
- 测试和构建服务
- 部署服务
- 模型仓库(Model registry)
- 特征平台(Feature store)
- 机器学习元数据存储
- 机器学习流水线编排
特性
下图展示了机器学习 CI/CD 自动化流水线的各个阶段:
流水线包括以下阶段:
- 开发和实验:在编排了实验步骤的阶段,您可以反复尝试新的机器学习算法和新的建模。此阶段的输出是机器学习流水线步骤的源代码,该源代码随后会被推送到源代码库。
- 流水线持续集成:您可以构建源代码并运行各种测试。此阶段的输出是要在后续阶段部署的流水线组件(软件包、可执行文件和制品)。
- 流水线持续交付:您可以将 CI 阶段生成的制品部署到目标环境。此阶段的输出是已部署的流水线,其中包含模型的新实现。
- 自动触发:流水线会根据时间表或响应触发器而自动在生产环境中执行。此阶段的输出是已推送到模型注册表并且经过训练的模型。
- 模型持续交付:您可以将经过训练的模型用作预测服务。此阶段的输出是已部署的模型预测服务。
- 监控:您可以根据实时数据来收集模型性能的统计信息。此阶段的输出是用于执行流水线或执行新实验周期的触发器。
在流水线开始实验的新迭代之前,数据分析步骤仍然是数据科学家手动执行的过程。模型分析步骤也是手动执行的过程。
持续集成
在此设置中,当新代码提交或推送到源代码库时,您会构建、测试和封装流水线及其组件。除了构建软件包、容器镜像和可执行文件之外,CI 过程还可以包含以下测试:
- 对特征工程逻辑进行单元测试。
- 对模型中实现的不同方法进行单元测试。例如,您有一个接受分类数据列的函数,并将该函数编码为独热(One-hot)功能。
- 测试您的模型训练是否会收敛(即模型的损失会因迭代而下降,并且会过拟合一些示例记录)。
- 测试模型训练是否不会因为除以零或者处理小值或大值而产生 NaN 值。
- 测试流水线中的每个组件都会生成预期的制品。
- 测试流水线组件之间的集成。
持续交付
在此等级中,您的系统会向目标环境持续交付新的流水线实现,从而交付新训练的模型的预测服务。如需快速、可靠地持续交付流水线和模型,您应考虑以下事项:
- 在部署模型之前,验证模型与目标基础架构的兼容性。例如,您需要验证模型所需的软件包是否已安装到服务环境中,以及内存、计算和加速器资源是否可用。
- 测试预测服务,方法是:使用预期输入调用服务 API,并确保获得预期响应。此测试通常会捕获您在更新模型版本时,可能会出现的问题,它需要您提供不同的输入。
- 测试预测服务性能,包括对服务进行负载测试以捕获每秒查询次数 (QPS) 和模型延迟时间等指标。
- 验证数据以便重新训练或者进行批量预测。
- 在部署模型之前,验证其是否达到预测性能目标。
- 自动部署到测试环境,例如,通过将代码推送到开发分支而触发的部署。
- 半自动部署到预生产环境,例如,通过在审核者批准更改后将代码合并到主分支而触发的部署。
- 在预生产环境中多次成功运行流水线后,手动部署到生产环境。
总结
总而言之,在生产环境中实现机器学习并不仅仅意味着将模型部署为用于预测的 API。相反,它意味着部署可自动重新训练和部署新模型的机器学习流水线。
通过设置 CI/CD 系统,您可以自动测试和部署新的流水线实现。此系统可让您应对数据和业务环境的快速变化。您不必立即将所有过程从一个等级迁移到另一个等级。您可以逐步实现这些做法,以帮助改进机器学习系统的开发和生产自动化。