利用历史数据、Ray 和 Amazon SageMaker 优化设备性能 | 亚马逊网络服务

利用历史数据、Ray 和 Amazon SageMaker 优化设备性能 | 亚马逊网络服务

有效的控制政策使工业企业能够最大限度地提高生产率,同时减少计划外停机和能源消耗,从而提高盈利能力。 寻找最佳控制策略是一项复杂的任务,因为化学反应器和风力涡轮机等物理系统通常很难建模,而且过程动态的漂移可能会导致性能随着时间的推移而恶化。 离线强化学习是一种控制策略,允许工业公司完全根据历史数据构建控制策略,而不需要显式的过程模型。 这种方法不需要在探索阶段直接与流程交互,这消除了在安全关键型应用中采用强化学习的障碍之一。 在这篇文章中,我们将构建一个端到端解决方案,仅使用历史数据来找到最优控制策略 亚马逊SageMaker 使用雷的 图书馆 图书馆。 要了解有关强化学习的更多信息,请参阅 将强化学习与 Amazon SageMaker 结合使用。

用例

工业控制涉及复杂系统的管理,例如生产线、电网和化工厂,以确保高效可靠的运行。 许多传统的控制策略基于预定义的规则和模型,通常需要手动优化。 在一些行业中,当设备开始退化或环境条件发生变化时,监控性能并调整控制策略是标准做法。 重新调整可能需要数周时间,并且可能需要在系统中注入外部激励,以通过试错法记录其响应。

强化学习已成为过程控制的新范式,通过与环境的交互来学习最优控制策略。 此过程需要将数据分为三类:1) 物理系统中可用的测量值,2) 可以对系统采取的一组操作,以及 3) 设备性能的数值度量(奖励)。 训练策略是为了在给定的观察中找到可能产生最高未来回报的行动。

在离线强化学习中,人们可以在将策略部署到生产中之前对历史数据进行训练。 这篇博文中训练的算法称为“保守Q学习”(CQL)。 CQL 包含“参与者”模型和“批评者”模型,旨在在采取建议的操作后保守地预测其自身的表现。 在这篇文章中,通过一个说明性的车杆控制问题演示了该过程。 目标是训练智能体平衡推车上的杆子,同时将推车移向指定的目标位置。 训练过程使用离线数据,允许代理从预先存在的信息中学习。 这个推杆案例研究展示了培训过程及其在潜在的实际应用中的有效性。

解决方案概述

本文中介绍的解决方案可自动部署端到端工作流程,以利用历史数据进行离线强化学习。 下图描述了此工作流程中使用的架构。 测量数据由一台工业设备在边缘产生(此处由一个工业设备模拟) AWS Lambda 功能)。 数据被放入一个 亚马逊Kinesis Data Firehose,将其存储在 亚马逊简单存储服务 (亚马逊 S3)。 Amazon S3 是一种耐用、高性能且低成本的存储解决方案,可让您为机器学习训练过程提供大量数据。

AWS胶水 对数据进行编目并使其可使用以下方式进行查询 亚马逊雅典娜。 Athena 将测量数据转换为强化学习算法可以摄取的形式,然后将其卸载回 Amazon S3。 Amazon SageMaker 将此数据加载到训练作业中并生成经过训练的模型。 然后,SageMaker 在 SageMaker 端点中提供该模型。 然后,工业设备可以查询该端点以接收操作建议。

图 1:显示端到端强化学习工作流程的架构图。

图 1:显示端到端强化学习工作流程的架构图。

在这篇文章中,我们将按以下步骤分解工作流程:

  1. 阐述问题。 决定可以采取哪些行动,根据哪些衡量标准提出建议,并以数字方式确定每个行动的执行情况。
  2. 准备数据。 将测量表转换为机器学习算法可以使用的格式。
  3. 根据该数据训练算法。
  4. 根据训练指标选择最佳训练运行。
  5. 将模型部署到 SageMaker 端点。
  6. 评估模型在生产中的性能。

先决条件

要完成本演练,您需要有一个 AWS账户 和一个命令行界面 已安装 AWS SAM。 请按照以下步骤部署 AWS SAM 模板来运行此工作流程并生成训练数据:

  1. 使用命令下载代码库
    git clone https://github.com/aws-samples/sagemaker-offline-reinforcement-learning-ray-cql

  2. 将目录更改为存储库:
    cd sagemaker-offline-reinforcement-learning-ray-cql

  3. 构建存储库:
    sam build --use-container

  4. 部署存储库
    sam deploy --guided --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

  5. 使用以下命令调用 bash 脚本,该脚本使用 AWS Lambda 函数生成模拟数据。
    1. sudo yum install jq
    2. cd utils
    3. sh generate_mock_data.sh

解决方案演练

提出问题

在这篇博文中,我们的系统是一辆顶部有一根平衡杆的推车。 当杆子直立且小车位置接近目标位置时,系统表现良好。 在先决步骤中,我们从该系统生成了历史数据。

下表显示了从系统收集的历史数据。

推车位置 推车速度 极角 极角速度 球门位置 外部压力 积分 时间
0.53 -0.79 -0.08 0.16 0.50 -0.04 11.5 5:37:54 PM
0.51 -0.82 -0.07 0.17 0.50 -0.04 11.9 5:37:55 PM
0.50 -0.84 -0.07 0.18 0.50 -0.03 12.2 5:37:56 PM
0.48 -0.85 -0.07 0.18 0.50 -0.03 10.5 5:37:57 PM
0.46 -0.87 -0.06 0.19 0.50 -0.03 10.3 5:37:58 PM

您可以使用 Amazon Athena 通过以下查询查询历史系统信息:

SELECT *
FROM "AWS CloudFormation Stack Name_glue_db"."measurements_table"
ORDER BY episode_id, epoch_time ASC
limit 10;

该系统的状态由小车位置、小车速度、杆角度、杆角速度和目标位置定义。 每个时间步采取的动作是施加到小车上的外力。 当小车越接近目标位置并且杆子越直立时,模拟环境输出的奖励值越高。

准备数据

要将系统信息呈现给强化学习模型,请将其转换为 JSON 对象,其中的键将值分类为状态(也称为观察)、操作和奖励类别。 将这些对象存储在 Amazon S3 中。 下面是根据上表中的时间步生成的 JSON 对象的示例。

{“obs”:[[0.53,-0.79,-0.08,0.16,0.5]], “action”:[[-0.04]], “reward”:[11.5] ,”next_obs”:[[0.51,-0.82,-0.07,0.17,0.5]]}

{“obs”:[[0.51,-0.82,-0.07,0.17,0.5]], “action”:[[-0.04]], “reward”:[11.9], “next_obs”:[[0.50,-0.84,-0.07,0.18,0.5]]}

{“obs”:[[0.50,-0.84,-0.07,0.18,0.5]], “action”:[[-0.03]], “reward”:[12.2], “next_obs”:[[0.48,-0.85,-0.07,0.18,0.5]]}

AWS CloudFormation 堆栈包含一个名为 AthenaQueryToCreateJsonFormatedData。 在 Amazon Athena 中运行此查询以执行转换并将 JSON 对象存储在 Amazon S3 中。 强化学习算法使用这些 JSON 对象的结构来了解建议所基于的值以及在历史数据中采取操作的结果。

火车代理

现在我们可以开始训练工作来生成经过训练的动作推荐模型。 Amazon SageMaker 可让您快速启动多个训练作业,以了解各种配置如何影响最终的训练模型。 调用名为的 Lambda 函数 TuningJobLauncherFunction 启动超参数调整作业,在训练算法时使用四组不同的超参数进行实验。

选择最佳训练运行

要找出哪些训练作业产生了最佳模型,请检查训练期间产生的损失曲线。 CQL 的评论家模型在采取建议的行动后估计演员的表现(称为 Q 值)。 批评者损失函数的一部分包括时间差异误差。 该指标衡量批评者的 Q 值准确性。 寻找具有高平均 Q 值和低时间差误差的训练运行。 这张纸, 离线无模型机器人强化学习的工作流程,详细介绍了如何选择最佳训练运行。 代码存储库有一个文件, /utils/investigate_training.py,这会创建一个描述最新训练作业的 html 图。 运行此文件并使用输出来选择最佳的训练运行。

我们可以使用平均 Q 值来预测训练模型的性能。 Q 值经过训练,可以保守地预测贴现的未来奖励值的总和。 对于长时间运行的流程,我们可以通过将 Q 值乘以(1-“贴现率”)将该数字转换为指数加权平均值。 该组中的最佳训练运行达到了 539 的平均 Q 值。我们的折扣率为 0.99,因此该模型预测每个时间步的平均奖励至少为 5.39。 您可以将该值与历史系统性能进行比较,以了解新模型是否优于历史控制策略。 在此实验中,历史数据每个时间步的平均奖励为 4.3,因此 CQL 模型预测性能比系统历史上实现的性能提高 25%。

部署模型

Amazon SageMaker 终端节点允许您以多种不同的方式提供机器学习模型,以满足各种使用案例。 在这篇文章中,我们将使用无服务器端点类型,以便我们的端点根据需求自动扩展,并且我们仅在端点生成推理时支付计算使用费用。 要部署无服务器端点,请包含 生产变体无服务器配置 ,在 生产变体 贤者制造者的 端点配置。 以下代码片段显示了如何使用适用于 Python 的 Amazon SageMaker 软件开发工具包部署本示例中的无服务器终端节点。 在以下位置找到用于部署模型的示例代码: Sagemaker-离线强化学习-ray-cql.

predictor = model.deploy( serverless_inference_config=ServerlessInferenceConfig( memory_size_in_mb=2048, max_concurrency=200 ), <…>
)

经过训练的模型文件位于每次训练运行的 S3 模型工件中。 要部署机器学习模型,请找到最佳训练运行的模型文件,并调用名为“ModelDeployerFunction”以及包含此模型数据的事件。 Lambda 函数将启动 SageMaker 无服务器端点来为经过训练的模型提供服务。 调用“时使用的示例事件ModelDeployerFunction

{ "DescribeTrainingJob": { "ModelArtifacts": { "S3ModelArtifacts": "s3://your-bucket/training/my-training-job/output/model.tar.gz"} } }

评估训练后的模型性能

是时候看看我们经过训练的模型在生产中的表现如何了! 要检查新模型的性能,请调用名为“RunPhysicsSimulationFunction” 与事件中的 SageMaker 端点名称。 这将使用端点推荐的操作运行模拟。 调用时使用的示例事件 RunPhysicsSimulatorFunction:

{"random_action_fraction": 0.0, "inference_endpoint_name": "sagemaker-endpoint-name"}

使用以下 Athena 查询将训练模型的性能与历史系统性能进行比较。

WITH sum_reward_by_episode AS ( SELECT SUM(reward) as sum_reward, m_temp.action_source FROM "<AWS CloudFormation Stack Name>_glue_db"."measurements_table" m_temp GROUP BY m_temp.episode_id, m_temp.action_source ) SELECT sre.action_source, AVG(sre.sum_reward) as avg_total_reward_per_episode
FROM sum_reward_by_episode sre
GROUP BY sre.action_source
ORDER BY avg_total_reward_per_episode DESC

这是结果表示例。 我们看到训练后的模型获得的奖励是历史数据的 2.5 倍! 此外,该模型的真实性能比保守的性能预测好 2 倍。

动作来源 每个时间步的平均奖励
trained_model 10.8
historic_data 4.3

以下动画显示了训练数据中的示例情节与使用经过训练的模型来选择要采取的操作的情节之间的差异。 在动画中,蓝色框是购物车,蓝色线是杆子,绿色矩形是目标位置。 红色箭头显示每个时间步施加到小车上的力。 训练数据中的红色箭头来回跳跃很多,因为数据是使用 50% 的专家操作和 50% 的随机操作生成的。 经过训练的模型完全通过观察非专家演示学习了一种控制策略,可以将购物车快速移动到目标位置,同时保持稳定性。

利用历史数据、Ray 和 Amazon SageMaker 优化设备性能 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。 利用历史数据、Ray 和 Amazon SageMaker 优化设备性能 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

 清理

要删除此工作流程中使用的资源,请导航到 Amazon CloudFormation 堆栈的资源部分并删除 S3 存储桶和 IAM 角色。 然后删除 CloudFormation 堆栈本身。

结论

离线强化学习可以帮助工业企业利用历史数据自动搜索最优策略,而不会影响安全性。 要在您的运营中实施此方法,首先要确定构成状态确定系统的测量、您可以控制的操作以及指示所需性能的指标。 然后,访问 这个GitHub仓库 使用 Ray 和 Amazon SageMaker 实施自动端到端解决方案。

这篇文章只是简单介绍了 Amazon SageMaker RL 的功能。 尝试一下,请通过以下方式向我们发送反馈: Amazon SageMaker 论坛 或通过您通常的AWS联系人。


作者简介

利用历史数据、Ray 和 Amazon SageMaker 优化设备性能 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。沃尔特·梅菲尔德 是 AWS 的解决方案架构师,帮助能源公司更安全、更高效地运营。 在加入 AWS 之前,Walt 曾担任 Hilcorp Energy Company 的运营工程师。 他业余时间喜欢园艺和飞钓。

利用历史数据、Ray 和 Amazon SageMaker 优化设备性能 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。费利佩·洛佩斯 是 AWS 的高级解决方案架构师,专注于石油和天然气生产运营。 在加入 AWS 之前,Felipe 曾在 GE Digital 和 Schlumberger 工作,专注于工业应用的建模和优化产品。

利用历史数据、Ray 和 Amazon SageMaker 优化设备性能 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。于英伟 是 AWS Generative AI Incubator 的应用科学家。 他拥有与多个跨行业组织合作进行机器学习各种概念验证的经验,包括自然语言处理、时间序列分析和预测性维护。 业余时间,他喜欢游泳、绘画、徒步旅行以及与家人和朋友共度时光。

利用历史数据、Ray 和 Amazon SageMaker 优化设备性能 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。王浩柱 是 Amazon Bedrock 的一名研究科学家,专注于构建 Amazon Titan 基础模型。 此前,他曾在 Amazon ML 解决方案实验室担任强化学习垂直领域的联合负责人,帮助客户利用强化学习、自然语言处理和图形学习的最新研究成果构建先进的 ML 解决方案。 浩珠在密歇根大学获得了电气与计算机工程博士学位。

时间戳记:

更多来自 AWS机器学习