发布于: Oct 10, 2022

本文探索了如何创建无服务器架构的机器学习运营(MLOps)管道,并借此开发及可视化由 Amazon Forecast 构建的预测模型。由于机器学习(ML)工作负载需要规模伸缩,因此我们需要打破不同相关方之间的孤岛,最终获取业务价值。MLOps 模型能够保证数据科学、生产与运营团队最大程度利用自动化工作流进行无缝协作,保证顺利部署预测模型并持续对其实施有效监控。

与软件开发中的 DevOps 模型类似,机器学习中的 MLOps 模型亦有助于跨机器学习工具与框架构建代码与集成。您可以对数据管道进行自动化、运营以及监控,且完全无需重写自定义代码或者重新设计现有基础设施。MLOps 帮助我们扩展了现有分布式存储与处理基础设施,让机器学习模型的大规模部署与管理更加简单易行。此外,MLOps 还能够立足单一中央位置跟踪并可视化组织内所有模型随时间漂移的情况,同时实现自动数据验证策略。

MLOps 通过持续集成、持续部署与持续训练,将 DevOps 与机器学习领域的最佳实践充分结合起来,帮助我们简化生产环境中机器学习解决方案的生命周期。关于更多详细信息,请参阅《机器学习Lens:Amazon Web Services 良好架构框架》白皮书。

在以下各节中,我们将了解如何利用 MLOps 管道(包括 Amazon Forecast、Amazon Web Services Lambda 以及 Amazon Web Services Step Functions)构建、训练及部署时间序列预测模型。为了对所生成的预测结果进行可视化,大家还需要使用 Amazon Web Services 提供的无服务器分析服务,例如 Amazon Athena与 Amazon QuickSight。

在本节中,我们将部署 MLOps 架构,将其作为蓝图以自动执行 Amazon Forecast 的使用与部署。这里提供的架构与示例代码可帮助大家为时间序列数据构建 MLOps 管道,进而生成预测以定义未来业务策略、切实满足客户需求。
您可以使用 Amazon Web Services 托管服务构建这套无服务器架构,意味着您可以直接创建机器学习管道,且无需分神于基础设施管理工作。这不仅降低了数据集的迭代难度,同时也使您得以通过特征与超参数调优实现性能优化。
下图所示,为我们在本文中将要使用的各组件。

在上图中,我们使用一套 Step Functions 工作流进行无服务器MLOps管道部署,其中各 Lambda 函数将被整合起来以编排 Amazon Forecast 的各设置步骤,最终将结果导出至 Amazon Simple Storage Service (Amazon S3)。
这套架构中包含以下组件:

  • 时间序列数据集已被上传至 Amazon S3 云存储下的/train目录(前缀)当中。
  • 文件上传将触发 Lambda,由 Lambda 启动由 Step Functions 状态机构建的 MLOps 管道。
  • 该状态机将一系列 Lambda 函数组合在一起,用于在 Amazon Forecast中构建、训练及部署机器学习模型。我们将在下一节中讨论关于状态机 Lambda 组件的更多详细信息。
  • 在日志分析方面,状态机使用 Amazon CloudWatch 捕捉各项Forecast指标。这里,当源 Amazon S3 存储桶的 /forecast 目录中存在最终预测结果时,我们将使用 Amazon Simple Notification Service (Amazon SNS) 发送邮件通知。这条机器学习管道还将在/history目录中保存所有旧有预测结果。
  • 最后,我们使用 Athena 与 QuickSight 提供当前预测的可视化表示。

在本文中,我们将使用 UCI 机器学习 repo 中的“个人家庭用电量”数据集。这套时间序列数据集汇总了各客户家庭的每小时用电情况,外加工作日的用电量峰值。您可以根据需要替换样本数据,以用于支持其他用例。
现在,大家已经对解决方案的基本架构有所了解,接下来可以探索状态机中各 Lambda 组件的具体情况了。

在上一节中,我们提到 Step Functions 状态机是整个 MLOps 管道自动化架构的核心。下图所示,为使用状态机部署的工作流。

如上图所示,来自 Step Functions 工作流的各 Lambda 函数具体如下(这些步骤还凸显出 Lambda 函数与 Amazon S3 中所保存的params.json文件内参数间的映射):

  • Create-Dataset – 创建一个 Forecast 数据集。关于此数据集的信息将帮助 Forecast 理解如何消费数据以训练模型。
  • Create-DatasetGroup – 创建一个数据集组。
  • Import-Data – 将您的数据导入至数据集组内的某一数据集中。
  • Create-Predictor – 使用参数文件指定的预测范围创建预测器。
  • Create-Forecast – 创建预测并启动一项指向 Amazon S3 的导出作业,包括在参数文件中指定的分位数。
  • Update-Resources – 创建必要的 Athena 资源,并将导出的预测结果转换为与输入数据集相同的格式。
  • Notify Success – 当作业完成时,通过向 Amazon SNS 发出消息发送一条邮件提醒。
  • Strategy-Choice – 根据参数文件,检查 Forecast 各资源是否被删除。
  • Delete-Forecast – 删除预测结果并保留导出数据。
  • Delete-Predictor – 删除预测器。
  • Delete-ImportJob – Forecast 中删除Import-Data 作业。

Amazon Forecast 当中,数据集组属于一种抽象,其中包含特定预测集合所使用的全部数据集。不同数据集组之间不共享信息。要尝试使用各种替代方案,您可以创建一套新的数据集组并在对应的数据集中做出变更。关于更多详细信息,请参阅数据集与数据集组。在本用例中,工作流会面向数据集组导出一套目标时间序列数据集。

完成上述步骤后,工作流将触发预测器训练作业。预测器的实质是一套经过预测训练的模型,负责基于时间序列数据执行预测。

相关文章