Azure ML 入门:模型训练与部署的完整流程
Azure Machine Learning(Azure ML)提供了一套完整的云服务,用于构建、训练和部署机器学习模型。以下是基于 Azure ML SDK 的标准化流程,包含关键步骤和代码示例:定义训练脚本 ():提交训练作业:部署为 Web 服务:评分脚本示例 ():调用端点:监控指标:
·
Azure ML 入门:模型训练与部署的完整流程
Azure Machine Learning(Azure ML)提供了一套完整的云服务,用于构建、训练和部署机器学习模型。以下是基于 Azure ML SDK 的标准化流程,包含关键步骤和代码示例:
1. 准备工作
- 创建 Azure ML 工作区:管理所有资源的中心枢纽。
from azureml.core import Workspace
ws = Workspace.create(
name="my_workspace",
subscription_id="<SUBSCRIPTION_ID>",
resource_group="my_resource_group",
location="eastus"
)
ws.write_config() # 保存配置文件
- 配置计算资源:
from azureml.core.compute import ComputeTarget, AmlCompute compute_config = AmlCompute.provisioning_configuration( vm_size="Standard_D2_v2", max_nodes=4 ) cluster = ComputeTarget.create(ws, "my-cluster", compute_config) cluster.wait_for_completion()
2. 数据准备
- 注册数据集:
from azureml.core import Dataset datastore = ws.get_default_datastore() dataset = Dataset.File.upload_directory( src_dir="data/", target=(datastore, "train_data"), overwrite=True ) registered_ds = dataset.register(ws, "training_dataset")
3. 模型训练
-
定义训练脚本 (
train.py):import argparse from sklearn.ensemble import RandomForestClassifier import joblib parser = argparse.ArgumentParser() parser.add_argument("--data", type=str) args = parser.parse_args() # 加载数据 dataset = joblib.load(args.data) X, y = dataset["features"], dataset["labels"] # 训练模型 model = RandomForestClassifier(n_estimators=100) model.fit(X, y) joblib.dump(model, "outputs/model.pkl") -
提交训练作业:
from azureml.core import Experiment, ScriptRunConfig src = ScriptRunConfig( source_directory=".", script="train.py", compute_target="my-cluster", arguments=["--data", registered_ds.as_named_input("input")], environment=Environment.from_conda_specification("my_env", "env.yml") ) experiment = Experiment(ws, "my_experiment") run = experiment.submit(src) run.wait_for_completion()
4. 模型注册
- 保存并注册模型:
model = run.register_model( model_name="my_model", model_path="outputs/model.pkl", model_framework="scikit-learn" )
5. 模型部署
-
部署为 Web 服务:
from azureml.core.webservice import AciWebservice from azureml.core.model import InferenceConfig inference_config = InferenceConfig( entry_script="score.py", # 包含init()和run()函数的脚本 environment=model.get_environment() ) deployment_config = AciWebservice.deploy_configuration(cpu_cores=1, memory_gb=1) service = Model.deploy( ws, "my-service", [model], inference_config, deployment_config ) service.wait_for_deployment(show_output=True) -
评分脚本示例 (
score.py):import joblib import numpy as np def init(): global model model = joblib.load("model.pkl") # 模型自动挂载到路径 def run(raw_data): data = np.array(json.loads(raw_data)["data"]) predictions = model.predict(data) return {"predictions": predictions.tolist()}
6. 测试与监控
-
调用端点:
import requests data = {"data": [[5.1, 3.5, 1.4, 0.2], [7.7, 3.8, 6.7, 2.2]]} headers = {"Content-Type": "application/json"} response = requests.post( service.scoring_uri, json=data, headers=headers ) print(response.json()) -
监控指标:
- 在 Azure Portal 的 Endpoints 面板查看延迟、请求量等指标
- 使用 Application Insights 集成记录日志:
service.update(enable_app_insights=True)
关键注意事项
- 成本优化:训练后关闭计算集群(
cluster.delete()) - 环境复现:通过
env.yml精确指定依赖:name: model_env dependencies: - python=3.8 - scikit-learn=1.0.2 - pip: - azureml-defaults==1.42.0 - 安全实践:使用 Azure Key Vault 管理密钥,通过 Managed Identity 控制访问权限。
完整流程耗时约 15-30 分钟(取决于资源预配速度)。建议从 Azure ML 示例库 克隆模板代码快速上手。
更多推荐
所有评论(0)