31、利用 MLflow 和 Azure ML 开发机器学习即服务(MaaS)模型

利用 MLflow 和 Azure ML 开发机器学习即服务(MaaS)模型

1. 使用 MLflow 部署模型

首先,我们可以使用以下命令来提供模型服务:

mlflow models serve -m models:/wind_turbine/latest -h 0.0.0.0 -p 5001

最后,我们可以使用以下命令测试模型:

$ curl http://127.0.0.1:5001/invocations -H "Content-Type:application/json" --data '{"inputs": [[9]]}'

预期输出如下:

{"predictions": [105.13453246004944]}
2. 与 Airflow 集成

可以通过开发一个能通过 REST API 调用 MLflow 的操作符,将 MLflow 集成到 Airflow 工作流中。这样,Airflow 可作为各种组件和数据转换操作的编排器,而 MLflow 用于提供 ML 模型服务。

3. 其他开源服务平台 - Kubeflow

Kubeflow(https://www.kubeflow.org/)基于 Kubernetes。与专注于模型生命周期的 MLflow 和处理工作流的 Airflow 不同,Kubeflow 更注重可扩展性,同时也集成了工作流和用于实验的 Jupyter 笔记本。

4. 使用 Azure ML 服务

Azure ML 服务将模型作为容器化应用进行训练和交付,构建好模型后可轻松将其部署为 MaaS,部署到 Azure 云也很简单。它集成了用户友好的界面、计算集群、实验跟踪和使用 MLflow 的服务,以及管道管理。

开发分析模型的基本步骤如下:
1. 准备数据
2. 使用丰富的工具(如 Jupyter Notebook、Visual Studio Code 或 Azure Notebooks)开发模型
3. 利用 Azure ML 的计算能力训练和测试模型
4. 注册模型
5. 将模型部署为微服务

当模型作为 Web 服务时,可以从不同来源(如 Azure Functions、Azure IoT Hub 或 Azure Stream Analytics)调用并集成到业务流程中。

5. 开始使用 Azure ML 服务

要开始使用 Azure ML 服务,需通过 Azure 门户创建工作区:
1. 从 Azure 门户找到 Azure Machine Learning 并创建新的工作区。
2. 为工作区提供名称(如 iiot - book2 - ml - workspace)。
3. 选择标准资源组(如 iiot - book2 - resource)。
4. 点击“Review + create”按钮。

6. 理解 Azure ML 工作区

Azure ML 支持全面的 ML 模型开发,包括数据管理、探索性数据分析(EDA)、模型创建、部署和监控。工作区是 Azure ML 的主要访问点,用户可通过 SDK、CLI 或 UI 与工作区交互,连接到首选的开发环境。Azure ML 还允许管理数据集、构建模块化管道,并分配计算资源(支持或不支持 GPU)用于模型训练和部署,广泛使用 Docker 容器进行部署和训练期间的资源分配。

7. MLOps

Azure ML 支持端到端的持续集成和持续交付(CI/CD)管道以及再训练管道。具体可参考:https://learn.microsoft.com/en - us/azure/architecture/ai - ml/guide/machine - learning - operations - v2。

8. 使用 Azure ML 开发风力涡轮机数字孪生模型

开发步骤如下:
1. 开发基于物理的模型 :使用 Jupyter Notebook 或 Azure Notebooks 等工具。
2. 开发更准确的 ML 模型 :使用 Azure 笔记本。
3. 注册模型
4. 部署模型
5. 测试模型

模型代码
def wind_turbine_model(x):
    # cut-in speed vs cut-out speed
    if x<4.5 or x>21.5:
        return 0.0
    # standard operability
    return 376.936 - 195.8161*x + 33.75734*x**2 - 2.212492*x**3 + 0.06309095*x**4 - 0.0006533647*x**5
reference_power = [wind_turbine_model(x) for x in range(0,30)]

import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.plot(reference_power,'k')
ax.set_xlabel('wind speed (m/s)')
ax.set_ylabel('power (kW)')
plt.show()
9. 使用 Jupyter Notebook 开发模型

步骤如下:
1. 安装 Azure ML SDK v2:

$ pip install azureml - core azureml - sdk[notebooks] jupyter 
$ jupyter notebook

或者使用 Docker 镜像:

$ cd Chapter15/AzureML
$ docker compose up –d --build

然后连接到 http://localhost:8888。
2. 创建新的 Python 3 笔记本。
3. 从工作区下载 config.json 文件并复制到工作目录。
4. 在新笔记本的第一个单元格中执行以下代码:

from azureml.core import Workspace
ws = Workspace.from_config()
  1. 按照 Azure ML 的提示连接到 Azure 门户并提供代码,查看详细信息。在新单元格中添加并执行以下代码:
ws.get_details()
  1. 运行实验:
from azureml.core import Experiment
# create a new experiment
exp = Experiment(workspace = ws, name = 'wind - turbine - experiment')
# start a run
run = exp.start_logging()
  1. 记录模型输出:
run.log_list('Wind Turbine Model', reference_power) # log a list of values
run.complete()
  1. 获取实验的 URL:
print(run.get_portal_url())
  1. 完成后清理资源:
ws.delete(delete_dependent_resources = True)
10. 使用 Azure 笔记本开发模型
  1. 打开 Azure ML Studio 的 Notebooks 选项卡,创建新文件。
  2. 创建计算 ML 资源,设置计算名称,可选择不使用 GPU 支持,选择 6 个核心。
  3. 设置内核,从下拉菜单中选择计算集群,复制并粘贴模型代码,运行单元格。
11. 使用 Azure 笔记本开发更准确的 ML 模型

开发分析模型的步骤如下:
1. 问题陈述和数据集
- 目标是根据风速预测发电数据。
- 从右侧菜单选择“Data | Create data asset”,命名为 wind_turbine_dataset。
- 从本地文件导入数据,上传官方 GitHub 仓库提供的文件,复制存储路径。
2. 探索性数据分析(EDA)
- 在新单元格中执行以下代码:

import pandas as pd
df = pd.read_csv(<storage path of the dataset just created>)
df
  1. 在 Azure ML 笔记本上构建模型
    • 重用之前开发的代码,在 Azure Studio | Notebooks 中创建新文件,复制并粘贴代码,运行单元格。
    • 完成作业后,从左侧菜单选择“Jobs”查看实验,在“Metrics”选项卡中查看实验记录的指标。
  2. 打包和部署
    • 从左侧菜单点击“Models”,选择最新模型并点击“Deploy”将其部署为 Web 服务。
    • 定义要使用的虚拟机(VM)并部署。
    • 测试模型,从左侧菜单点击刚创建的端点和“Test”选项卡,输入以下 JSON:
{
    "input_data": [[9],[9.7]],
    "params": {}
}
- 也可以从“Consume”选项卡构建安全的 Python 代码,查看 URL 并定义外部服务使用的身份验证凭据。
12. 从本地 Jupyter 实例构建模型
  1. 创建包含所有依赖项的环境。
  2. 创建包含训练代码的主文件。
  3. 创建训练命令并发送到计算集群。
    可以克隆 Azure ML Studio | Notebooks 样本文件夹中的 train_model.ipynb 文件,但需要进行一些小的更改:
    - 像之前一样提供对 ML 客户端的访问要求。
    - 更改模型,因为要创建回归器而不是分类器。
    - 提供数据集。
13. 清理资源

完成工作后,访问“Compute”停止所有作业,移除端点以清理资源。

14. 与 IoT Hub 集成

Azure ML 服务可提供通过 REST API 被其他服务消费的 Web 应用程序。可以像将 IoT Hub 服务连接到 Stream Analytics 并定义 JavaScript 自定义函数一样,从“Functions”选项卡添加 Azure ML 函数并提供 URL,然后使用新创建的 Web 服务,例如:

SELECT udf.windturbine(9) INTO output FROM input
15. Azure IoT Edge

在以下情况下,需要直接在边缘部署和运行 ML 分析:
- 离线模型:频繁断开连接时,模型需独立运行,不依赖持续的互联网连接。
- 低延迟:模型需要快速响应,例如与控制器交互时。
- 成本效益:节省云成本并提高可扩展性。
- 隐私、合规和监管:由于数据出口限制或隐私问题(如处理含有人的图像),无法将所有数据发送到云。
- 带宽:处理大量数据(如高频振动)且带宽不足时。

Azure IoT Edge 支持通过 Docker 进行模块集成,建议先通过 Azure ML 将 ML 模型部署到云,保存到共享 blob,然后使用 IoT Hub 的模块孪生下载。

16. 保存模型的格式
  • Pickle :Python 支持的保存对象的格式,但不安全,使用时需谨慎。
  • Joblib :Pickle 的轻量级替代方案(https://joblib.readthedocs.io)。
  • H5 :TensorFlow 支持的保存权重的格式(https://www.tensorflow.org/guide/keras/serialization_and_saving)。
  • PyTorch 原生格式 (https://pytorch.org/tutorials/beginner/saving_loading_models.html)。
  • Open Neural Network eXchange (ONNX) :用于表示 ML 模型的开放标准格式,由众多合作伙伴集成到各种框架和工具中(https://onnx.ai/)。

更多关于在边缘部署分析的信息可参考:https://learn.microsoft.com/en - us/azure/architecture/guide/iot/machine - learning - inference - iot - edge。

利用 MLflow 和 Azure ML 开发机器学习即服务(MaaS)模型

17. 总结与展望

本文详细介绍了使用 MLflow 和 Azure ML 开发机器学习即服务(MaaS)模型的全流程,涵盖了从模型部署、与其他工具集成到在不同环境中开发和优化模型的各个方面。以下是一个简单的流程总结:

步骤 描述
使用 MLflow 部署模型 使用命令提供模型服务并进行测试
与 Airflow 集成 开发操作符将 MLflow 集成到 Airflow 工作流
了解 Kubeflow 一个注重可扩展性的开源服务平台
使用 Azure ML 服务 从准备数据到部署模型的一系列操作
开发风力涡轮机数字孪生模型 基于物理和 ML 的模型开发与测试
不同环境开发模型 在 Jupyter Notebook、Azure 笔记本和本地 Jupyter 实例中开发
资源管理 清理资源和与 IoT Hub 集成

mermaid 流程图如下:

graph LR
    A[使用 MLflow 部署模型] --> B[与 Airflow 集成]
    B --> C[了解 Kubeflow]
    C --> D[使用 Azure ML 服务]
    D --> E[开发风力涡轮机数字孪生模型]
    E --> F[不同环境开发模型]
    F --> G[资源管理]

在未来的实践中,可以进一步探索以下方向:
- 模型优化 :尝试不同的算法和超参数调整,以提高模型的准确性和性能。
- 多模型集成 :结合多个模型的预测结果,以获得更稳定和准确的预测。
- 实时数据分析 :利用 Azure IoT Edge 和实时数据流,实现实时的模型预测和决策。
- 安全与合规 :加强模型的安全性和合规性,确保数据和模型的保护。

通过不断的学习和实践,我们可以更好地利用这些工具和技术,为实际业务问题提供更有效的解决方案。希望本文能为你在机器学习和云计算领域的探索提供有价值的参考。

数据集介绍:电力线目标检测数据集 一、基础信息 数据集名称:电力线目标检测数据集 图片数量: 训练集:2898张图片 验证集:263张图片 测试集:138张图片 总计:3299张图片 分类类别: 类别ID: 0(电力线) 标注格式: YOLO格式,包含对象标注信息,适用于目标检测任务。 数据格式:JPEG/PNG图片,来源于空中拍摄或监控视觉。 二、适用场景 电力设施监控与巡检: 数据集支持目标检测任务,帮助构建能够自动识别定位电力线的AI模型,用于无人机或固定摄像头巡检,提升电力设施维护效率安全性。 能源与公用事业管理: 集成至能源管理系统中,提供实时电力线检测功能,辅助进行风险 assessment 预防性维护,优化能源分配。 计算机视觉算法研究: 支持目标检测技术在特定领域的应用研究,促进AI在能源公用事业行业的创新与发展。 专业培训与教育: 数据集可用于电力行业培训课程,作为工程师技术人员学习电力线检测与识别的重要资源。 三、数据集优势 标注精准可靠: 每张图片均经过专业标注,确保电力线对象的定位准确,适用于高精度模型训练。 数据多样性丰富: 包含多种环境下的电力线图片,如空中视角,覆盖不同场景条件,提升模型的泛化能力鲁棒性。 任务适配性强: 标注格式兼容YOLO等主流深度学习框架,便于快速集成模型开发,支持目标检测任务的直接应用。 实用价值突出: 专注于电力线检测,为智能电网、自动化巡检能源设施监控提供关键数据支撑,具有较高的行业应用价值。
【弹簧阻尼器】基于卡尔曼滤波弹簧质量阻尼器系统噪声测量实时状态估计研究(Matlab代码实现)内容概要:本文围绕“基于卡尔曼滤波的弹簧质量阻尼器系统噪声测量与实时状态估计”展开研究,利用Matlab代码实现对系统状态的精确估计。重点在于应用卡尔曼滤波技术处理系统中存在的噪声干扰,提升对弹簧质量阻尼器系统动态行为的实时观测能力。文中详细阐述了系统建模、噪声特性分析及卡尔曼滤波算法的设计与实现过程,展示了滤波算法在抑制测量噪声、提高状态估计精度方面的有效性。同时,该研究属于更广泛的信号处理与状态估计技术应用范畴,适用于复杂动态系统的监控与控制。; 适合人群:具备一定控制系统理论基础Matlab编程经验的高校研究生、科研人员及工程技术人员,尤其适合从事动态系统建模、状态估计与滤波算法研究的相关人员。; 使用场景及目标:①应用于机械、航空航天、自动化等领域中对振动系统状态的高精度实时估计;②为噪声环境下的传感器数据融合与状态预测提供算法支持;③作为卡尔曼滤波算法在实际物理系统中应用的教学与科研案例。; 阅读建议:建议读者结合Matlab代码实践,深入理解系统建模与滤波器设计的关键步骤,关注噪声建模与滤波参数调优对估计性能的影响,并可进一步拓展至扩展卡尔曼滤波(EKF)或无迹卡尔曼滤波(UKF)在非线性系统中的应用。
【顶级EI复现】计及连锁故障传播路径的电力系统 N-k 多阶段双层优化及故障场景筛选模型(Matlab代码实现)内容概要:本文介绍了一个针对电力系统连锁故障传播路径的N-k多阶段双层优化及故障场景筛选模型,旨在提升电力系统在复杂故障条件下的安全性与稳定性。该模型结合了多阶段动态响应与双层优化架构,能够有效模拟连锁故障的传播过程,并通过优化算法筛选出关键故障场景,进而支撑系统风险评估与预防控制策略制定。文中提供了基于Matlab的代码实现,便于科研人员复现顶级EI期刊研究成果,深入理解电力系统可靠性分析的核心算法与建模方法。; 适合人群:具备一定电力系统基础知识Matlab编程能力的研究生、科研人员及从事电力系统安全分析的工程技术人员,尤其适合致力于高水平论文复现与创新研究的用户。; 使用场景及目标:①复现电力系统连锁故障分析领域的顶级EI论文模型;②开展N-k故障场景筛选、多阶段优化建模、双层规划算法设计等相关课题研究;③提升在电力系统可靠性、韧性评估与预防控制方面的科研能力。; 阅读建议:建议读者结合文档提供的Matlab代码逐模块学习,重点关注双层优化结构与故障传播路径建模的实现细节,同时参考文中提及的YALMIP工具包网盘资源进行实践调试,以加深对算法逻辑与工程应用的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值