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)
      


关键注意事项
  1. 成本优化:训练后关闭计算集群(cluster.delete()
  2. 环境复现:通过 env.yml 精确指定依赖:
    name: model_env
    dependencies:
      - python=3.8
      - scikit-learn=1.0.2
      - pip:
          - azureml-defaults==1.42.0
    

  3. 安全实践:使用 Azure Key Vault 管理密钥,通过 Managed Identity 控制访问权限。

完整流程耗时约 15-30 分钟(取决于资源预配速度)。建议从 Azure ML 示例库 克隆模板代码快速上手。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐