使用Azure Machine Learning和MLflow训练与部署Keras图像分类器
概述
本文将详细介绍如何利用Azure Machine Learning服务和MLflow框架来训练一个Keras模型,用于MNIST手写数字分类任务,并将模型部署为Web服务。通过本教程,您将掌握以下关键技能:
- 配置MLflow与Azure Machine Learning的集成
- 使用MLflow自动记录Keras模型训练过程中的指标和参数
- 在本地和云端GPU计算资源上训练模型
- 将训练好的模型部署为可调用的Web服务
环境准备
在开始之前,请确保您的环境满足以下要求:
- Python环境:建议使用Python 3.7或更高版本
- 核心库:
- TensorFlow 2.1.0
- Keras 2.3.1
- Azure ML SDK
- MLflow和azureml-mlflow包
安装必要依赖:
pip install tensorflow==2.1.0 keras==2.3.1 azureml-mlflow
初始化工作区
首先需要连接到您的Azure Machine Learning工作区:
import mlflow
import azureml.core
from azureml.core import Workspace
# 打印版本信息
print("SDK版本:", azureml.core.VERSION)
print("MLflow版本:", mlflow.version.VERSION)
# 连接工作区
ws = Workspace.from_config()
配置MLflow跟踪
将MLflow的跟踪URI设置为指向您的Azure ML工作区:
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
创建实验
在Azure ML中,训练运行被组织到实验中:
experiment_name = "keras-with-mlflow"
mlflow.set_experiment(experiment_name)
本地训练模型
我们使用一个封装好的训练脚本train.py
,该脚本实现了以下功能:
- 加载MNIST数据集
- 构建Keras模型
- 使用MLflow自动记录训练指标和参数
- 保存训练好的模型
启动训练:
import sys
import os
import train
# 将脚本目录添加到Python路径
lib_path = os.path.abspath("scripts")
sys.path.append(lib_path)
# 启动训练
run = train.driver()
MLflow的自动记录功能会自动捕获以下信息:
- 训练指标(如损失、准确率)
- 模型参数(如学习率、批次大小)
- 模型架构和权重
云端GPU训练
为了加速训练,我们可以将相同的训练脚本提交到Azure的GPU计算集群:
准备环境
from azureml.core import Environment
# 克隆预配置的TensorFlow GPU环境
env = Environment.get(workspace=ws, name="AzureML-TensorFlow-2.1-GPU").clone("mlflow-env")
# 添加必要的Python包
env.python.conda_dependencies.add_pip_package("azureml-mlflow")
env.python.conda_dependencies.add_pip_package("keras==2.3.1")
env.python.conda_dependencies.add_pip_package("numpy")
配置训练任务
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory="./scripts", script="train.py")
src.run_config.environment = env
src.run_config.target = "gpu-cluster" # 假设您已创建名为gpu-cluster的计算集群
提交训练任务
from azureml.core import Experiment
exp = Experiment(ws, experiment_name)
run = exp.submit(src)
# 等待训练完成
run.wait_for_completion(show_output=True)
模型部署
训练完成后,我们可以将模型部署为Web服务:
准备部署配置
import json
deploy_config = {
"computeType": "aci" # 使用Azure容器实例
}
with open("deployment_config.json", "w") as outfile:
json.dump(deploy_config, outfile)
部署模型
from mlflow.deployments import get_deploy_client
client = get_deploy_client(mlflow.get_tracking_uri())
# 设置模型路径和部署配置
model_path = "model"
deployment_config_path = "deployment_config.json"
test_config = {'deploy-config-file': deployment_config_path}
# 创建部署
client.create_deployment(
model_uri=f'runs:/{run.id}/{model_path}',
config=test_config,
name="keras-aci-deployment"
)
部署过程可能需要几分钟时间。完成后,您可以在Azure门户中找到部署的评分终结点。
清理资源
使用完毕后,可以删除部署以释放资源:
client.delete("keras-aci-deployment")
总结
通过本教程,您已经学会了:
- 如何将MLflow与Azure Machine Learning集成
- 使用MLflow自动记录Keras模型训练过程
- 在本地和云端GPU资源上训练模型
- 将训练好的模型部署为可调用的Web服务
这种工作流程不仅适用于Keras模型,也可以扩展到其他支持MLflow的机器学习框架。Azure Machine Learning与MLflow的结合为机器学习项目的全生命周期管理提供了强大支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考