适用于:
适用于 Python 的 Azure 机器学习 SDK v1
重要
本文提供有关使用 Azure 机器学习 SDK v1 的信息。 SDK v1 自 2025 年 3 月 31 日起弃用。 对它的支持将于 2026 年 6 月 30 日结束。 可以在该日期之前安装和使用 SDK v1。 使用 SDK v1 的现有工作流将在支持结束日期后继续运行。 但是,在产品发生体系结构更改时,可能会面临安全风险或中断性变更。
建议在 2026 年 6 月 30 日之前过渡到 SDK v2。 有关 SDK v2 的详细信息,请参阅 什么是 Azure 机器学习 CLI 和 Python SDK v2? 以及 SDK v2 参考。
本文介绍如何使用 Azure Machine Learning 运行 scikit-learn 训练脚本。
本文中的示例脚本用来对鸢尾花图像进行分类,以基于 scikit-learn 的鸢尾花数据集构建机器学习模型。
无论是从头开始训练机器学习 scikit-learn 模型,还是将现有模型引入云中,都可以使用Azure Machine Learning使用弹性云计算资源横向扩展开源训练作业。 你可以通过 Azure 机器学习来构建、部署和监视生产级模型以及对其进行版本控制。
先决条件
可以在Azure Machine Learning计算实例或你自己的Jupyter Notebook中运行此代码:
Azure 机器学习计算实例
- 完成 Quickstart:开始使用 Azure Machine Learning 创建计算实例。 每个计算实例都包括一个预加载了 SDK 和笔记本示例存储库的专用笔记本服务器。
- 在Azure Machine Learning studio中选择笔记本选项卡。 在示例训练文件夹中,导航到以下目录,查找一个已完成且已展开的笔记本:how-to-use-azureml > ml-frameworks > scikit-learn > train-hyperparameter-tune-deploy-with-sklearn 文件夹。
- 你可以使用示例训练文件夹中的预填充代码来完成本教程。
创建Jupyter Notebook服务器并在以下部分中运行代码。
- 安装 Azure Machine Learning SDK(>= 1.13.0)。
- 创建工作区配置文件。
设置试验
本部分通过加载所需的Python包、初始化工作区、定义训练环境以及准备训练脚本来设置训练试验。
初始化工作区
Azure 机器学习工作区是服务的顶级资源。 它为您提供一个集中的位置来管理您创建的所有工件。 在 Python SDK 中,可以通过创建 workspace 对象来访问工作区项目。
从先决条件部分中创建的config.json文件创建工作区对象。
from azureml.core import Workspace
ws = Workspace.from_config()
准备脚本
在本教程中,训练脚本train_iris.py已为你提供。 在实践中,你应该能够按原样执行任何自定义训练脚本,并使用Azure Machine Learning运行该脚本,而无需修改代码。
注释
- 提供的训练脚本演示如何使用脚本中的
Run对象将某些指标记录到Azure Machine Learning运行。 - 提供的训练脚本使用了来自
iris = datasets.load_iris()函数的示例数据。 若要使用和访问自己的数据,请参阅如何使用数据集进行训练以使数据在训练期间可用。
定义环境
若要定义封装训练脚本依赖项的 Azure Machine Learning Environment,可以定义一个自定义环境,或使用 Azure Machine Learning 提供的特选环境。
使用精选环境
如果您不想定义自己的环境,Azure Machine Learning 可提供预构建的精选环境。
若要使用策展环境,可改为运行以下命令:
from azureml.core import Environment
sklearn_env = Environment.get(workspace=ws, name='AzureML-Tutorial')
创建自定义环境
你还可以创建自己的自定义环境。 在 YAML 文件中定义 conda 依赖项;在本例中,该文件名为 conda_dependencies.yml。
dependencies:
- python=3.10
- scikit-learn
- numpy
- pip:
- azureml-defaults
从此 Conda 环境规范中创建 Azure Machine Learning 环境。 此环境将在运行时打包到 Docker 容器中。
from azureml.core import Environment
sklearn_env = Environment.from_conda_specification(name='sklearn-env', file_path='conda_dependencies.yml')
有关创建和使用环境的详细信息,请参阅在 Azure 机器学习中创建和使用软件环境。
配置和提交训练作业
创建 ScriptRunConfig
创建一个 ScriptRunConfig 对象,以指定训练作业的配置详细信息,包括训练脚本、要使用的环境,以及用于运行训练作业的计算目标。
如果在 arguments 参数中指定,训练脚本的任何参数都将通过命令行传递。
以下代码将配置一个 ScriptRunConfig 对象,用于提交在本地计算机上执行的作业。
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory='.',
script='train_iris.py',
arguments=['--kernel', 'linear', '--penalty', 1.0],
environment=sklearn_env)
如果要改为在远程群集上运行作业,则可为 ScriptRunConfig 的 compute_target 参数指定所需的计算目标。
from azureml.core import ScriptRunConfig
compute_target = ws.compute_targets['<my-cluster-name>']
src = ScriptRunConfig(source_directory='.',
script='train_iris.py',
arguments=['--kernel', 'linear', '--penalty', 1.0],
compute_target=compute_target,
environment=sklearn_env)
提交运行
from azureml.core import Experiment
run = Experiment(ws,'Tutorial-TrainIRIS').submit(src)
run.wait_for_completion(show_output=True)
警告
Azure 机器学习通过复制整个源目录来运行训练脚本。 如果你有不想上传的敏感数据,请使用 .ignore 文件或不将其包含在源目录中。 请改为使用 Azure 机器学习数据集来访问数据。
在运行执行过程中发生的情况
执行过程中包括以下阶段:
准备:根据所定义的环境创建 docker 映像。 将映像上传到工作区的容器注册表,缓存以用于后续运行。 日志也会被流式传输到运行历史记录,并且可以查看日志以监视进度。 如果改为指定特选环境,则会使用支持该特选环境的缓存映像。
缩放:如果 Batch AI 群集执行运行所需的节点多于当前可用节点,则群集将尝试纵向扩展。
正在运行:将脚本文件夹中的所有脚本上传到计算目标,装载或复制数据存储,然后执行
script。 将来自 stdout 和 ./logs 文件夹的输出流式传输到运行历史记录中,并且可以用于监控运行。后期处理:将运行的 ./outputs 文件夹复制到运行历史记录。
保存并注册模型
训练模型后,就可以将它保存并注册到工作区。 凭借模型注册,可以在工作区中存储模型并对其进行版本控制,从而简化模型管理和部署。
将以下代码添加到训练脚本 train_iris.py 以保存模型。
import joblib
joblib.dump(svm_model_linear, 'model.joblib')
使用以下代码将模型注册到工作区。 通过指定参数 model_framework、model_framework_version 和 resource_configuration,使无代码模型部署可供使用。 使用无代码模型部署,你可以通过已注册模型直接将模型部署为 Web 服务,ResourceConfiguration 对象会定义 Web 服务的计算资源。
from azureml.core import Model
from azureml.core.resource_configuration import ResourceConfiguration
model = run.register_model(model_name='sklearn-iris',
model_path='outputs/model.joblib',
model_framework=Model.Framework.SCIKITLEARN,
model_framework_version='1.5.2',
resource_configuration=ResourceConfiguration(cpu=1, memory_in_gb=0.5))
部署
刚刚注册的模型可以像Azure Machine Learning中任何其他已注册的模型一样部署。 部署指南包含有关模型注册的部分,但由于你已有一个已注册的模型,因而可以直接跳到创建计算目标进行部署。
(预览版)无代码模型部署
重要
此功能目前处于公开预览状态。 此预览版在提供时没有附带服务级别协议,我们不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。
有关详细信息,请参阅适用于 Azure 预览版的补充使用条款。
你还可以为 scikit-learn 使用无代码部署功能(预览版),而不使用传统的部署路线。 所有内置 scikit-learn 模型类型都支持无代码模型部署。 通过使用 model_framework、model_framework_version 和 resource_configuration 参数来注册模型(如上所示),可以简单地使用 deploy() 静态函数来部署模型。
web_service = Model.deploy(ws, "scikit-learn-service", [model])
注释
这些依赖项包含在预建的 scikit-learn 推理容器中。
- azureml-defaults
- inference-schema[numpy-support]
- scikit-learn
- numpy
完整的操作指南更深入地介绍了 Azure 机器学习。
后续步骤
在本文中,你训练并注册了一个 scikit-learn 模型,并了解了部署选项。 有关 Azure 机器学习的详细信息,请参阅以下其他文章。