你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何使用 MLflow API 将日志记录代码添加到训练脚本以及在 Azure 机器学习中跟踪试验。 可监视运行指标来增强模型创建过程。
此示意图显示使用 MLflow 跟踪在 Azure 机器学习工作区中跟踪试验的运行指标并存储模型项目。
先决条件
创建新的 Notebook
Data Science Virtual Machine (DSVM) 上预装有 Azure 机器学习和 MLFlow SDK。 可以在 azureml_py36_* conda 环境中访问这些资源。 在 JupyterLab 中,选择启动器并选择此内核:
设置工作区
转到 Azure 门户并选择作为先决条件的一部分预配的工作区。 记下“下载 config.json”配置文件,如下图所示。 下载此文件,并将其存储在 DSVM 上的工作目录中。
配置文件包含工作区名称、订阅等信息。 无需使用此文件硬编码这些参数。
跟踪 DSVM 运行
若要设置 Azure 机器学习工作区对象,请将以下代码添加到笔记本或脚本:
import mlflow
from azureml.core import Workspace
ws = Workspace.from_config()
mlflow.set_tracking_uri(ws.get_mlflow_tracking_uri())
注意
跟踪 URI 的有效期最长一小时。 如果在空闲一段时间后重启脚本,请使用 get_mlflow_tracking_uri API 获取新的 URI。
加载数据
此示例使用糖尿病数据集,这是 scikit-learn 中包含的一个著名的小型数据集。 此单元会加载数据集,并将其拆分为随机训练集和测试集。
from sklearn.datasets import load_diabetes
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
import joblib
X, y = load_diabetes(return_X_y = True)
columns = ['age', 'gender', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
data = {
"train":{"X": X_train, "y": y_train},
"test":{"X": X_test, "y": y_test}
}
print ("Data contains", len(data['train']['X']), "training samples and",len(data['test']['X']), "test samples")
添加跟踪
使用 Azure 机器学习 SDK 添加试验跟踪并将持久化模型上传到试验运行记录。 此代码示例会添加日志,并将模型文件上传到试验运行。 模型也在 Azure 机器学习模型注册表中进行了注册:
# Get an experiment object from Azure Machine Learning
from azureml.mlflow import register_model
experiment_name = 'experiment_with_mlflow'
mlflow.set_experiment(experiment_name)
with mlflow.start_run():
# Log the algorithm parameter alpha to the run
mlflow.log_param('alpha', 0.03)
# Create, fit, and test the scikit-learn Ridge regression model
regression_model = Ridge(alpha=0.03)
regression_model.fit(data['train']['X'], data['train']['y'])
preds = regression_model.predict(data['test']['X'])
# Output the Mean Squared Error to the notebook and to the run
print('Mean Squared Error is', mean_squared_error(data['test']['y'], preds))
mlflow.log_metric('mse', mean_squared_error(data['test']['y'], preds))
# Save the model
model_file_name = 'model.pkl'
joblib.dump(value = regression_model, filename = model_file_name)
# upload the model file explicitly into artifacts
mlflow.log_artifact(model_file_name)
# register the model
register_model(mlflow.active_run(), 'diabetes_model', 'model.pkl', model_framework="ScikitLearn")
在 Azure 机器学习中查看运行
你可以在 Azure 机器学习工作室中查看试验运行。 在左侧菜单中选择“试验”,然后选择“experiment_with_mlflow”。 如果决定在上述代码片段中以不同的方式命名试验,请选择你选定的名称:
已记录的均方误差 (MSE) 应该是可见的:
如果选择运行,可在“输出 + 日志”中查看其他详细信息和所选模型。
在 Azure 机器学习中部署模型
本部分介绍如何将 DSVM 上训练的模型部署到 Azure 机器学习。
步骤 1:创建推理计算
在 Azure 机器学习工作室的左侧菜单中,选择“计算”,如以下屏幕截图所示:
在“新建推理群集”窗格中,填写以下内容的详细信息
- 计算名称
- Kubernetes 服务 - 选择“新建”
- 选择区域
- 选择虚拟机大小(就本教程而言,默认值 Standard_D3_v2 就足够了)
- 群集目的 - 选择“开发测试”
- 节点数应等于 1
- 网络配置 - 基本
如以下屏幕截图所示:
选择“创建”。
步骤 2:部署无代码推理服务
使用 register_model
在代码中注册模型时,我们将框架指定为 sklearn。 Azure 机器学习支持以下框架的无代码部署:
- scikit-learn
- TensorFlow SaveModel 格式
- ONNX 模型格式
无代码部署意味着可以直接从模型项目进行部署。 无需指定任何特定的评分脚本。
若要部署糖尿病模型,请转到 Azure 机器学习工作室中的左侧菜单,并选择“模型”。 接下来,选择已注册的 diabetes_model:
接下来,选择“模型详细信息”窗格中的“部署”按钮:
该模型将部署到在步骤 1 中创建的推理群集(Azure Kubernetes 服务)。 提供服务的名称和 AKS 计算群集的名称(在步骤 1 中创建),填写以下详细信息。 还建议将 CPU 保留容量从 0.1 增加到 1,将内存保留容量从 0.5 增加到 1。 选择“高级”并填写详细信息以设置这种增加。 然后选择“部署”,如以下屏幕截图所示:
步骤 3:使用
成功部署模型后,从左侧菜单中选择“终结点”,然后选择已部署的服务的名称。 模型详细信息窗格应该会变为可见,如以下屏幕截图所示:
部署状态应该会从“正在转换”转为“正常运行”。 此外,此详细信息部分提供了 REST 终结点和 Swagger URL,应用程序开发人员可以使用它们将 ML 模型集成到其应用中。
可以使用 Azure 机器学习 SDK 测试终结点:
适用于:适用于 Python 的 Azure 机器学习 SDK v1
from azureml.core import Webservice
import json
# if you called your service differently then change the name below
service = Webservice(ws, name="diabetes-service")
input_payload = json.dumps({
'data': X_test[0:2].tolist(),
'method': 'predict' # If you have a classification model, you can get probabilities by changing this to 'predict_proba'.
})
output = service.run(input_payload)
print(output)
步骤 4:清理
删除在步骤 1 中创建的推理计算,以免持续产生计算费用。 为此,请在 Azure 机器学习工作室的左侧菜单中,选择“计算”>“推理群集”>“选择特定推理计算资源”>“删除”。
后续步骤
- 详细了解如何部署 Azure 机器学习中的模型