Loading...
在本篇文章中,我们展示了如何将 MATLAB 的机器学习能力与 Amazon SageMaker 结合,进行故障分类的预测维护示例。主要要点如下: 计算资源:利用 SageMaker 提供的高性能计算环境加速机器学习训练。 协作:MATLAB 和 SageMaker 打造了强大的平台,团队可以共同构建、测试和部署机器学习模型。 部署与可访问性:模型可作为 SageMaker 实时端点进行部署,方便其他应用处理实时数据流。
这篇文章由 Brad Duncan、Rachel Johnson、Richard Alcock、Ramesh Jatiya 和 Shun Mao 合作撰写于 2023 年 11 月 21 日,主要探讨 MATLAB 在机器学习中的应用,特别是在 Amazon SageMaker 平台中的整合。
MATLAB 是一种广泛应用于数据处理、并行计算、自动化、仿真、机器学习和人工智能的编程工具,广泛用于汽车、航空、通信和制造等多个行业。近年来,MathWorks 将许多产品投放云端,特别是在 Amazon Web Services (AWS) 上。有关 MathWorks 云产品的更多信息,请参见 MATLAB 和 Simulink 在云端 或者 联系 Mathworks。
在本篇文章中,我们将 MATLAB 的机器学习能力与 Amazon SageMaker 结合,具体好处包括:
好处描述计算资源使用 SageMaker 提供的高性能计算环境可以加速机器学习训练。协作MATLAB 和 SageMaker 为团队提供了有效的协作平台。部署与可访问性模型可以作为 SageMaker 实时端点进行部署,便于其他应用访问。我们将演示如何将 MATLAB 机器学习模型作为 SageMaker 训练任务进行训练,并将其部署为 SageMaker 实时端点,以便处理实时数据流。
我们将通过一个预测维护的示例进行说明,该示例涉及对实时传感器数据流的操作泵故障进行分类。我们可以使用一大批标记数据,这些数据来自于具有三种故障类型的 Simulink 仿真例如,健康状态和七种故障状态的组合。由于我们有系统模型,并且在运行中故障较少,因此可以利用仿真数据来训练我们的算法。该模型可使用 MATLAB 和 Simulink 中的参数估计技术进行调优,以匹配实际泵的操作数据。
我们的目标是展示 MATLAB 和 Amazon SageMaker 在故障分类示例中的联合能力。
我们首先在桌面上使用 MATLAB 训练分类器模型。首先,我们使用 Diagnostic Feature Designer 工具从完整数据集中提取特征,然后使用 MATLAB 决策树模型在本地运行模型训练。一旦对参数设置满意,我们利用 MATLAB 函数生成该模型并将其与数据集一起发送至 SageMaker,这样可以扩展训练过程以适应更大的数据集。在训练完成后,我们将模型部署为一个实时端点,可集成到下游应用或仪表板中,诸如 MATLAB Web App。
这个示例将总结每个步骤,帮助用户理解如何利用 MATLAB 和 Amazon SageMaker 执行机器学习任务,所需的完整代码和示例描述可以找到在这个 代码库。
bash git clone https//githubcom/mathworks/MachineLearningwithMATLABandAmazonSagemakerDemogit
检查代码库文件夹权限。如果没有写权限,请运行以下 shell 命令:bash sudo chmod R 777
构建 MATLAB 训练容器并将其推送到 Amazon ECR。进入 docker 文件夹。使用 AWS CLI 创建一个 Amazon ECR 存储库用您选择的 AWS 区域替换 REGION:bash aws ecr createrepository repositoryname sagemakermatlabtraining imagescanningconfiguration scanOnPush=true region
运行以下 docker 命令:bash docker build t sagemakermatlabtrainingr2023a docker tag sagemakermatlabtrainingr2023a ACCOUNTdkrecrREGIONamazonawscom/sagemakermatlabtrainingr2023alatest aws ecr getloginpassword region REGION docker login username AWS passwordstdin ACCOUNTdkrecruseast1amazonawscom docker push ACCOUNTdkrecrREGIONamazonawscom/sagemakermatlabtrainingr2023alatest
打开 MATLAB,打开文件夹 examples/PumpFaultClassification 中的实时脚本 PumpFaultClassificationMATLABSageMakermlx,并使该文件夹成为您在 MATLAB 中的当前工作文件夹。任何机器学习项目的第一步是准备数据。MATLAB 提供了多种工具,用于导入、清理和从数据中提取特征:
matlabload SensorDatamat
SensorDatamat 数据集中包含 240 条记录。每条记录有两个时间表:flow 和 pressure。目标列是 faultcode,它是泵中三种可能故障组合的二进制表示。对于这些时间序列表,每个表有 1201 行,模拟 12 秒泵流量和压力测量,时间增量为 0001 秒。
接下来,Diagnostic Feature Designer 工具允许您从数据中提取、可视化和排名多种特征。在这里,您可以使用 Auto Features,它可以快速从数据集中提取广泛的时域和频域特征,并为模型训练排名前列的候选特征。然后,您可以导出一个 MATLAB 函数,重新计算来自新输入数据的前 15 个排名特征。我们将这个函数称为 extractFeaturesTraining。该函数可以配置为以批处理或流数据输入。
此函数生成一个包含故障代码的特征表,如下图所示:
接下来,您需要以 SageMaker 可用于机器学习训练的方式组织数据。通常,这涉及将数据拆分为训练集和验证集,并将预测数据与目标响应分离。
在这个阶段,可能需要其他更复杂的数据清理和过滤操作。在这个例子中,数据已经清晰。如果数据处理非常复杂且耗时,则可以使用 SageMaker 处理作业在 SageMaker 训练以外运行这些作业,以便将其分为两个步骤。

matlabtrainPredictors = trainingData(2end)trainResponse = trainingData(1)
在转移到 SageMaker 之前,在 MATLAB 中本地构建和测试机器学习模型是个好主意。这允许您快速迭代和调试模型。您可以在本地设置和训练一个简单的决策树分类器。
matlabclassifierModel = fitctree( trainPredictors trainResponse OptimizeHyperparameters=auto)
这里的训练任务应在不到一分钟内完成,并生成一些图表以指示训练进度。训练结束后,生成一个 MATLAB 机器学习模型。可以使用 Classification Learner 工具,尝试多种分类模型,并为最佳性能进行调优,然后生成所需的代码,以替换上面的模型训练代码。
在检查了本地训练模型的准确性指标之后,我们可以将训练转移到 Amazon SageMaker。
在您对模型满意后,可以利用 SageMaker 进行大规模训练。要开始调用 SageMaker SDK,您需要初始化一个 SageMaker 会话。
matlabsession = sagemakerSession()
指定一个 SageMaker 执行 IAM 角色,该角色将用于训练作业和端点托管。
matlabrole = arnawsiamACCOUNTrole/servicerole/AmazonSageMakerExecutionRoleXXXXXXXXXXXXXXX
从 MATLAB 中,将训练数据保存为 csv 文件到 Amazon S3 桶中。
matlabwritetable(trainingData pumptrainingdatacsv)trainingDataLocation = s3// sessionDefaultBucket /coolingsystem/input/pumptrainingcopyfile(pumptrainingdatacsv trainingDataLocation)
接下来,您需要创建一个 SageMaker 估算器,并传递所有必要的参数,例如训练 Docker 镜像、训练函数、环境变量、训练实例大小等。训练镜像的 URI 应为您在前提条件步骤中创建的 Amazon ECR URI,格式为 ACCOUNTdkrecruseast1amazonawscom/sagemakermatlabtrainingr2023alatest。训练函数应在 MATLAB 实时脚本底部提供。
matlabtrainingImage = ACCOUNTdkrecruseast1amazonawscom/sagemakermatlabtrainingr2023alatest
est = sagemakerMATLABEstimator( role Image=trainingImage Session=session BaseJobName=PumpDecisionTreeMatlab Environment=loadenv(fullfile(rootFolder trainingenv)) TrainingFunction=@trainingFunction HyperParameters=struct() InstanceType=mlm5large MaxRunTime=minutes(10) MaxWaitTime=minutes(20) UseSpotInstances=true)
通过调用估算器的 fit 方法将训练作业提交到 SageMaker。
matlabestfit(training=struct(Location=trainingDataLocation ContentType=text/csv))
您还可以从 SageMaker 控制台检查训练作业状态:
训练作业完成后,选择作业链接可以进入作业描述页面,查看存储在专用 S3 桶中的 MATLAB 模型:
训练后,您可以将模型部署为实时 SageMaker 端点,以便实时进行预测。为此,从估算器调用 deploy 方法。在此,您可以根据工作负载设置所需的托管实例大小。
matlabpredictor = estdeploy(role ClassificationTreeInferenceHandler uint8(1) mlm5large)
在后台,此步骤将构建一个推理 Docker 镜像并将其推送到 Amazon ECR 存储库,用户无需进行推理容器的构建。这一映像包含提供推理请求所需的所有信息,例如模型位置、MATLAB 身份验证信息和算法。之后,Amazon SageMaker 创建一个 SageMaker 端点配置,最终部署实时端点。可以在 SageMaker 控制台监控该端点,如果不再使用可以随时终止它。
鲸鱼加速器官方版下载现在端点已上线,您可以通过给它一些记录来测试该端点进行预测。使用以下代码从训练数据中选择 10 条记录并发送到端点进行预测。预测结果将从端点返回,显示如下图像。
matlabinput = trainPredictors(1019) prediction = predictorpredict(input)
SageMaker 端点可以被许多本地 AWS 服务调用。如果与 AWS Lambda 函数和 API 网关一起部署,还可以作为标准 REST API,集成到任何网络应用中。对于这个特定用例,您可以使用 Amazon SageMaker 特征存储和 Amazon 管理的 Apache Kafka 流处理,以近实时做出机器学习支持的决策。另一种可能的集成是结合 Amazon Kinesis、SageMaker 和 Apache Flink 来构建一个托管、可靠、可扩展且高可用的应用程序,能够对数据流进行实时推断。
在将算法部署到 SageMaker 端点后,您可能想通过仪表板可视化它们,显示实时的流预测。在接下来的自定义 MATLAB 网络应用