乐趣区

关于人工智能:MLOps-体系驱动的预测自动化到底是怎么炼成的

DevOps 是软件开发畛域一种十分热门的实际,而相似的机制也同样实用于机器学习畛域。与 DevOps 模型相似,机器学习中的 MLOps 模型同样有助于跨机器学习工具与框架构建代码与集成。借此,咱们能够对数据管道进行自动化、经营以及监控,且齐全无需重写自定义代码或者从新设计现有基础设施。

MLOps 帮忙咱们扩大了现有分布式存储与解决基础设施,让机器学习模型的大规模部署与治理更加简单易行。此外,MLOps 还能立足繁多地方地位跟踪并可视化组织内所有模型随工夫漂移的状况,同时实现主动数据验证策略。

本文摸索了如何创立无服务器架构的机器学习经营(MLOps)管道,并借此开发及可视化由 Amazon Forecast 构建的预测模型。因为机器学习(ML)工作负载须要规模伸缩,因而咱们须要突破不同相干方之间的孤岛,最终获取业务价值。MLOps 模型可能保证数据迷信、生产与经营团队最大水平利用自动化工作流进行无缝合作,保障顺利部署预测模型并继续对其施行无效监控。

MLOps 通过继续集成、继续部署与继续训练,将 DevOps 与机器学习畛域的最佳实际充沛联合起来,帮忙咱们简化生产环境中机器学习解决方案的生命周期。对于更多详细信息,请参阅《机器学习 Lens:AWS 良好架构框架》白皮书。

在以下各节中,咱们将理解如何利用 MLOps 管道(包含 Amazon Forecast、AWS Lambda 以及 AWS Step Functions)构建、训练及部署工夫序列预测模型。为了对所生成的预测后果进行可视化,大家还须要应用 AWS 提供的无服务器剖析服务,例如 Amazon Athena 与 Amazon QuickSight。

解决方案架构

在本节中,咱们将部署 MLOps 架构,将其作为蓝图以主动执行 Amazon Forecast 的应用与部署。这里提供的架构与示例代码可帮忙大家为工夫序列数据构建 MLOps 管道,进而生成预测以定义将来业务策略、切实满足客户需要。

咱们能够应用 AWS 托管服务构建这套无服务器架构,意味着能够间接创立机器学习管道,且无需分神于基础设施管理工作。这不仅升高了数据集的迭代难度,同时也使咱们得以通过特色与超参数调优实现性能优化。

下图所示,为咱们在本文中将要应用的各组件。

在上图中,咱们应用一套 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 状态机是整个 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 当中,数据集组属于一种形象,其中蕴含特定预测汇合所应用的全副数据集。不同数据集组之间不共享信息。要尝试应用各种代替计划,咱们能够创立一套新的数据集组并在对应的数据集中做出变更。对于更多详细信息,请参阅数据集与数据集组。在本用例中,工作流会面向数据集组导出一套指标工夫序列数据集。

实现上述步骤后,工作流将触发预测器训练作业。预测器的本质是一套通过预测训练的模型,负责基于工夫序列数据执行预测。对于更多详细信息,请参阅预测器。

在预测器训练实现后,工作流会应用该预测器触发创立预测后果。在预测创立期间,Amazon Forecast 会首先托管预测模型、执行推理,而后在残缺的数据集上训练该模型。对于更多详细信息,请参阅 Forecasts。

在预测后果胜利导出之后,状态机将告诉邮件发送至部署过程中指定的地址处。预测后果导出实现后,Update-Resources 步骤将从新格局导出的数据,以便 Athena 与 QuickSight 可能轻松应用这些后果。

大家能够替换 Lambda 函数中各个步骤的算法与数据集,借此重复使用 MLOps 管道以构建、训练以及部署更多其余机器学习模型。

先决条件

在部署这套架构之前,须要首先实现以下筹备工作:

  • 装置 Git。
  • 在零碎上装置 AWS Serverless Application Model (AWS SAM) CLI。对于更多操作阐明,请参阅装置 AWS SAM CLI。请应用以下代码,保障装置的是最新版本:
sam --version

向 AWS 账户部署示例架构

为简化部署流程,本文将通过 AWS CloudFormation 提供残缺的基础设施即代码架构计划,咱们能够在 Forecast Visualization Automation Blogpost GitHub repo 上轻松获取相干代码。另外,咱们还将应用 AWS SAM 部署这套解决方案。

1. 克隆这套 Git repo,详见以下代码:

git clone https://github.com/aws-samples/amazon-forecast-samples.git

大家能够通过 Forecast Visualization Automation Blogpost GitHub repo 获取相干代码。

2. 导航至刚刚创立实现的 amazon-forecast-samples/ml_ops/visualization_blog 目录,并输出以下代码以启动解决方案部署:

d amazon-forecast-samples/ml_ops/visualization_blog
sam build && sam deploy --guided

在这一部分,AWS SAM 将构建一套 CloudFormation 模板变更集。几秒之后,AWS SAM 会提醒部署 CloudFormation 栈。

3. 为栈部署提供参数。本文应用以下参数;咱们也能够间接应用默认参数:A

Setting default arguments for 'sam deploy'
 =========================================
 Stack Name [ForecastSteps]: <Enter Stack Name e.g. - forecast-blog-stack>
 AWS Region [us-east-1]: <Enter region e.g. us-east-1>
 Parameter Email [youremail@yourprovider.com]: <Enter valid e-mail id>
 Parameter ParameterFile [params.json]: <Leave Default>
 #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
 Confirm changes before deploy [Y/n]: y
 #SAM needs permission to be able to create roles to connect to the resources in 
 your template
 Allow SAM CLI IAM role creation [Y/n]: y
 Save arguments to samconfig.toml [Y/n]: n

WS SAM 创立一套 AWS CloudFormation 变更集,并要求确认。

4. 输出 Y。

对于变更集的更多详细信息,请参阅应用变更集更新栈。

在胜利部署之后,将能看到以下输入后果:

CloudFormation outputs from the deployed stack
------------------------------------------------------------
Outputs 
-------------------------------------------------------------
Key AthenaBucketName 
Description Athena bucket name to drop your files 
Value forecast-blog-stack-athenabucket-1v6qnz7n5f13w 
Key StepFunctionsName 
Description Step Functions Name 
Value arn:aws:states:us-east-1:789211807855:stateMachine:DeployStateMachine-5qfVJ1kycEOj 
Key ForecastBucketName 
Description Forecast bucket name to drop your files 
Value forecast-blog-stack-forecastbucket-v61qpov2cy8c 
-------------------------------------------------------------
Successfully created/updated stack - forecast-blog-stack in us-east-1

5. 在 AWS CloudFormation 控制台的 Outputs 选项卡上记录 ForecastBucketName 的值,咱们将在测试步骤中应用该值。

测试示例架构

以下步骤概述了如何测试示例架构。要触发 Step Functions 工作流,大家须要将两个文件上传至新创建的 S3 存储桶:参数文件,以及工夫序列训练数据集。

1. 在克隆 GitHub repo 所在的同一目录中输出以下代码,将其中的_YOURBUCKETNAME_局部替换成咱们之前在 AWS CloudFormation Outputs 选项卡中复制到的值:

aws s3 cp ./testing-data/params.json s3://{YOURBUCKETNAME}

以上命令将复制 Lambda 函数用于配置 Forecast API 调用的参数文件。

2. 输出以下代码,执行工夫序列数据集上传:

aws s3 sync ./testing-data/ s3://{YOURBUCKETNAME}

3. 在 Step Functions 仪表板中,找到名为 DeployStateMachine-_<random string>_的状态机。
4. 抉择该状态机以查看工作流的执行状况。

如以上截屏所示,全副胜利执行的步骤(Lambda 函数)都处于绿色框体当中,蓝色框体示意步骤仍在进行当中,而所有无色彩框体则代表正等待执行的步骤。实现整个工作流中的所有步骤最多可能须要 2 个小时。

在工作流胜利实现之后,咱们能够返回 Amazon S3 控制台并找到蕴含以下目录的 Amazon S3 存储桶:

/params.json # Your parameters file.
/train/ # Where the training CSV files are stored
/history/ # Where the previous forecasts are stored
/history/raw/ # Contains the raw Amazon Forecast exported files
/history/clean/ # Contains the previous processed Amazon Forecast exported files
/quicksight/ # Contains the most updated forecasts according to the train dataset
/tmp/ # Where the Amazon Forecast files are temporarily stored before processing

参数文件 params.json 中保留有从 Lambda 函数中调用 Forecast API 的属性。这些参数配置中蕴含的信息包含预测类型、预测器设置以及数据集设置,此外还有预测域、频率以及维度。对于 API 操作的更多详细信息,请参阅 Amazon Forecast Service。

当初,咱们的数据曾经存在于 Amazon S3 当中,大家能够对后果进行可视化解决了。

应用 Athena 与 QuickSight 剖析预测数据

要实现整个预测管道,咱们还须要对数据进行查问与可视化。Athena 是一项交互式查问服务,可应用规范 SQL 轻松剖析 Amazon S3 中的数据。QuickSight 则是一项基于云的疾速商务智能服务,可通过数据可视化轻松帮忙咱们获取洞见。要开始剖析数据,首先须要应用 Athena 作为数据源并将数据摄取至 QuickSight 当中。

如果刚刚接触 AWS,请设置 QuickSight 以创立一个 QuickSight 账户。如果曾经领有 AWS 账户,请订阅 QuickSight 服务以创立相应的新账户。

如果这是咱们第一次在 QuickSight 上应用 Athena,则须要向 QuickSight 受权权限以应用 Athena 查问 Amazon S3。对于更多详细信息,请参阅配合 Amazon QuickSight 应用 Athena 时的权限有余问题。

1. 在 QuickSight 管制台上,抉择 New Analysis。
2. 抉择 New Data Set。
3. 抉择 Athena。
4. 在 New Athena data source 窗口中的 Data source name 局部,输出一项名称,例如 Utility Prediction。
5. 抉择 Validate connection。
6. 抉择 Create data source。

随后将显示 Choose your table 窗口。

7. 抉择 Use custom SQL。

8. 在 Enter custom SQL query 窗口中输出查问名称,例如:

Query to merge Forecast result with training data.

9. 在查问文本框中输出以下代码:

SELECT LOWER(forecast.item_id) as item_id,
 forecast.target_value,
 date_parse(forecast.timestamp, '%Y-%m-%d %H:%i:%s') as timestamp,
 forecast.type
FROM default.forecast
UNION ALL
SELECT LOWER(train.item_id) as item_id,
 train.target_value,
 date_parse(train.timestamp, '%Y-%m-%d %H:%i:%s') as timestamp,
 'history' as type
FROM default.train

10. 抉择 Confirm query。

至此,咱们能够抉择将数据导入 SPICE 或者间接对数据执行查问了。

11. 抉择任一选项,而后抉择 Visualize。
咱们将在 Fields list 之下看到以下字段:
· item_id
· target_value
· timestamp
· type

导出的预测后果将蕴含以下字段:
· item_id
· date
· 要求的分位数 (P10, P50, P90)

其中的 type 字段蕴含预测窗口的分位数类型(P10, P50, P90),而 history 字段将作为训练数据的分位数。这一过程将通过自定义查问实现,以确保在历史数据与导出的预测后果之间放弃对立的历史界限。

大家能够应用 CreateForecast API 可选参数调用 ForecastType,借此实现分位数自定义。在本文的用例中,能够在 Amazon S3 中的 params.json 文件下实现这项配置。

12. 在 X axis 局部,抉择 timestamp。
13. 在 Value 局部,抉择 target_value。
14. 在 Color 局部,抉择 type。
在参数当中,咱们指定了 72 小时范畴。要对后果进行可视化,须要以每小时一次的频率对工夫戳字段进行聚合。

15. 在 timestamp 下拉菜单中,抉择 Aggregate 与 Hour。

以下截屏所示,为咱们的最终预测后果。图中所示为分位数 P10、P50m 以及 P90 的预测后果,以及与之对应的概率预测。

总结

每个组织都可能从更精确的预测当中受害,从而更好地预测产品需要、优化打算与供应链动静等等。预测需要是一项艰巨的工作,而机器学习技术可能显著放大预测与事实之间的差距。

本文向大家展现了如何创立可反复、基于 AI 的主动预测生成流程。大家还理解到如何应用无服务器技术建设机器学习经营管道,并应用托管剖析服务通过数据查问与可视化以提取重要洞见。

大家也能够应用 Forecast 进行更多经营操作。对于能耗预测的更多详细信息,请参阅应用 Amazon Forecast 进行精确的能耗预测。对于分位数的更多详细信息,请参阅 Amazon Forecast 现已反对以您选定的分位数生成预测。

退出移动版