利用 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()
- 按照 Azure ML 的提示连接到 Azure 门户并提供代码,查看详细信息。在新单元格中添加并执行以下代码:
ws.get_details()
- 运行实验:
from azureml.core import Experiment
# create a new experiment
exp = Experiment(workspace = ws, name = 'wind - turbine - experiment')
# start a run
run = exp.start_logging()
- 记录模型输出:
run.log_list('Wind Turbine Model', reference_power) # log a list of values
run.complete()
- 获取实验的 URL:
print(run.get_portal_url())
- 完成后清理资源:
ws.delete(delete_dependent_resources = True)
10. 使用 Azure 笔记本开发模型
- 打开 Azure ML Studio 的 Notebooks 选项卡,创建新文件。
- 创建计算 ML 资源,设置计算名称,可选择不使用 GPU 支持,选择 6 个核心。
- 设置内核,从下拉菜单中选择计算集群,复制并粘贴模型代码,运行单元格。
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
-
在 Azure ML 笔记本上构建模型
- 重用之前开发的代码,在 Azure Studio | Notebooks 中创建新文件,复制并粘贴代码,运行单元格。
- 完成作业后,从左侧菜单选择“Jobs”查看实验,在“Metrics”选项卡中查看实验记录的指标。
-
打包和部署
- 从左侧菜单点击“Models”,选择最新模型并点击“Deploy”将其部署为 Web 服务。
- 定义要使用的虚拟机(VM)并部署。
- 测试模型,从左侧菜单点击刚创建的端点和“Test”选项卡,输入以下 JSON:
{
"input_data": [[9],[9.7]],
"params": {}
}
- 也可以从“Consume”选项卡构建安全的 Python 代码,查看 URL 并定义外部服务使用的身份验证凭据。
12. 从本地 Jupyter 实例构建模型
- 创建包含所有依赖项的环境。
- 创建包含训练代码的主文件。
-
创建训练命令并发送到计算集群。
可以克隆 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 和实时数据流,实现实时的模型预测和决策。
-
安全与合规
:加强模型的安全性和合规性,确保数据和模型的保护。
通过不断的学习和实践,我们可以更好地利用这些工具和技术,为实际业务问题提供更有效的解决方案。希望本文能为你在机器学习和云计算领域的探索提供有价值的参考。
超级会员免费看
1万+

被折叠的 条评论
为什么被折叠?



