什么是适用于 Python 的 Azure 机器学习 SDK v1?

重要

本文介绍 Azure 机器学习 SDK v1,而不是当前 SDK。 当前 SDK 版本是 Azure 机器学习 Python SDK v2。 有关 SDK 版本之间的差异的信息,请阅读 升级到 v2

数据科学家和 AI 开发人员使用适用于 Python 的 Azure 机器学习 SDK v1 通过 Azure 机器学习服务生成和运行机器学习工作流。 可以在任何 Python 环境中与服务进行交互,包括 Jupyter Notebook、Visual Studio Code或你喜欢的 Python IDE。

SDK 的关键领域包括:

  • 探索、准备和管理机器学习试验中使用的数据集的生命周期。
  • 管理用于监视、日志记录和组织机器学习试验的云资源。
  • 在本地或使用云资源(包括 GPU 加速模型训练)训练模型。
  • 使用自动化机器学习,它接受配置参数和训练数据。 它会自动循环访问算法和超参数设置,以查找运行预测的最佳模型。
  • 部署 Web 服务,将训练的模型转换为可在任何应用程序中使用的 RESTful 服务。

有关如何入门的分步演练,请尝试 教程

以下部分概述了 SDK 中一些最重要的类,以及用于使用这些类的常见设计模式。 若要获取 SDK,请参阅 安装指南

稳定与实验

适用于 Python 的 Azure 机器学习 SDK 在同一 SDK 中提供稳定和实验性功能。

功能/功能状态 描述
稳定功能 生产就绪

对于大多数用例和生产环境,建议使用这些功能。 它们更新频率较低,然后是实验性功能。
实验性功能 开发

这些功能是新开发的功能,& 更新,这些更新可能尚未准备好或已完全测试生产使用情况。 虽然这些功能通常正常运行,但它们可以包括一些中断性变更。 实验性功能用于解决 SDK 中断 bug,并且仅在测试期间收到更新。 实验性功能也称为 预览版中的功能。

如名称所示,实验性(预览版)功能用于试验,不被视为无 bug 或稳定。 因此,我们仅向想要试用早期版本的功能和更新的高级用户推荐实验性功能,并打算参与 Bug 和故障报告。

实验性功能由 SDK 参考中的注释部分标记,并用文本(如 (预览)Azure 机器学习文档表示。

工作

命名空间azureml.core.workspace.Workspace

Workspace 类是云中用于试验、训练和部署机器学习模型的基础资源。 它将 Azure 订阅和资源组绑定到一个易于使用的对象。

查看 create Workspace 方法的所有参数 重复使用现有实例(存储、Key Vault、App-Insights 和 Azure 容器注册表 ACR),以及修改其他设置,例如专用终结点配置和计算目标。

导入该类并使用以下代码创建新的工作区。 如果以前有要用于工作区的现有 Azure 资源组,请将 create_resource_group 设置为 False。 某些函数可能会提示输入 Azure 身份验证凭据。

from azureml.core import Workspace
ws = Workspace.create(name='myworkspace',
                      subscription_id='<azure-subscription-id>',
                      resource_group='myresourcegroup',
                      create_resource_group=True,
                      location='eastus2'
                     )

通过在多个环境中使用同一工作区,首先将其写入配置 JSON 文件。 这会保存订阅、资源和工作区名称数据。

ws.write_config(path="./file-path", file_name="ws_config.json")

通过读取配置文件来加载工作区。

from azureml.core import Workspace
ws_other_environment = Workspace.from_config(path="./file-path/ws_config.json")

或者,使用静态 get() 方法在不使用配置文件的情况下加载现有工作区。

from azureml.core import Workspace
ws = Workspace.get(name="myworkspace", subscription_id='<azure-subscription-id>', resource_group='myresourcegroup')

变量 ws 表示以下代码示例中的 Workspace 对象。

实验

命名空间azureml.core.experiment.Experiment

Experiment 类是另一个基础云资源,表示试验集合(单个模型运行)。 以下代码按名称从 Workspace 内提取 Experiment 对象,或者如果名称不存在,则会创建一个新的 Experiment 对象。

from azureml.core.experiment import Experiment
experiment = Experiment(workspace=ws, name='test-experiment')

运行以下代码以获取 Workspace中包含的所有 Experiment 对象的列表。

list_experiments = Experiment.list(ws)

使用 get_runs 函数从 Experiment检索 Run 对象(试用版)的列表。 以下代码检索运行并输出每个运行 ID。

list_runs = experiment.get_runs()
for run in list_runs:
    print(run.id)

有两种方法可以执行试验试用版。 如果要在 Jupyter 笔记本中以交互方式进行试验,请使用 start_logging 函数。 如果要从标准 Python 环境提交试验,请使用 submit 函数。 这两个函数都返回 Run 对象。 experiment 变量表示以下代码示例中的 Experiment 对象。

命名空间azureml.core.run.Run

运行表示试验的单个试用。 Run 是用于监视试用的异步执行、存储试用输出、分析结果和访问生成的项目的对象。 在试验代码中使用 Run 将指标和项目记录到运行历史记录服务。 功能包括:

  • 存储和检索指标和数据。
  • 使用标记和子层次结构轻松查找过去的运行。
  • 注册用于部署的存储模型文件。
  • 存储、修改和检索运行的属性。

通过使用 运行配置 对象提交 Experiment 对象来创建 Run 对象。 使用 tags 参数将自定义类别和标签附加到运行。 稍后可以从 Experiment轻松查找和检索它们。

tags = {"prod": "phase-1-model-tests"}
run = experiment.submit(config=your_config_object, tags=tags)

使用静态 list 函数从 Experiment获取所有 Run 对象的列表。 指定要按之前创建的标记进行筛选的 tags 参数。

from azureml.core.run import Run
filtered_list_runs = Run.list(experiment, tags=tags)

使用 get_details 函数检索运行的详细输出。

run_details = run.get_details()

此函数的输出是一个字典,其中包括:

  • 运行 ID
  • 地位
  • 开始时间和结束时间
  • 计算目标(本地与云)
  • 运行中使用的依赖项和版本
  • 特定于训练的数据(因模型类型而异)

有关如何配置和监视运行的详细信息,请参阅 操作说明

命名空间azureml.core.model.Model

Model 类用于处理机器学习模型的云表示形式。 方法有助于在本地开发环境和云中的 Workspace 对象之间传输模型。

可以使用模型注册在工作区中的 Azure 云中存储和版本化模型。 已注册的模型由名称和版本标识。 每次注册与现有模型同名时,注册表都会递增版本。 Azure 机器学习支持任何可以通过 Python 3 加载的模型,而不仅仅是 Azure 机器学习模型。

以下示例演示如何使用 scikit-learn生成简单的本地分类模型,在 Workspace中注册模型,并从云下载模型。

创建简单的分类器 clf,根据客户年龄预测客户流失。 然后将模型转储到同一目录中 .pkl 文件。

from sklearn import svm
import joblib
import numpy as np

# customer ages
X_train = np.array([50, 17, 35, 23, 28, 40, 31, 29, 19, 62])
X_train = X_train.reshape(-1, 1)
# churn y/n
y_train = ["yes", "no", "no", "no", "yes", "yes", "yes", "no", "no", "yes"]

clf = svm.SVC(gamma=0.001, C=100.)
clf.fit(X_train, y_train)

joblib.dump(value=clf, filename="churn-model.pkl")

使用 register 函数在工作区中注册模型。 指定本地模型路径和模型名称。 多次注册同名将创建新版本。

from azureml.core.model import Model

model = Model.register(workspace=ws, model_path="churn-model.pkl", model_name="churn-model-test")

在工作区中注册模型后,可以轻松管理、下载和组织模型。 若要从 Workspace检索模型(例如,在另一个环境中)对象,请使用类构造函数并指定模型名称和任何可选参数。 然后,使用 download 函数下载模型,包括云文件夹结构。

from azureml.core.model import Model
import os

model = Model(workspace=ws, name="churn-model-test")
model.download(target_dir=os.getcwd())

使用 delete 函数从 Workspace中删除模型。

model.delete()

注册模型后,将其部署为 Web 服务的过程非常简单。 首先 创建和注册映像。 此步骤配置 Python 环境及其依赖项,以及用于定义 Web 服务请求和响应格式的脚本。 创建映像后,生成部署配置,用于设置计算目标的 CPU 核心和内存参数。 然后附加映像。

ComputeTarget、RunConfiguration 和 ScriptRunConfig

命名空间azureml.core.compute.ComputeTarget
命名空间azureml.core.runconfig.RunConfiguration
命名空间azureml.core.script_run_config.ScriptRunConfig

ComputeTarget 类是用于创建和管理计算目标的抽象父类。 计算目标表示可在其中训练机器学习模型的各种资源。 计算目标可以是本地计算机或云资源,例如 Azure 机器学习计算、Azure HDInsight 或远程虚拟机。

使用计算目标利用功能强大的虚拟机进行模型训练,并设置持久性计算目标或临时运行时调用的目标。 有关设置和管理计算目标的综合指南,请参阅 操作指南

以下代码演示了设置 AmlComputeComputeTarget的子类)目标的简单示例。 此目标在 Workspace 对象中创建运行时远程计算资源。 提交作业时,资源会自动缩放。 运行完成后,它会自动删除。

重用简单的 scikit-learn 流失模型,并将其构建到当前目录中自己的文件中,train.py。 在文件末尾,创建一个名为 outputs的新目录。 此步骤在云(工作区)中创建一个目录,用于存储 joblib.dump() 序列化的已训练模型。

# train.py

from sklearn import svm
import numpy as np
import joblib
import os

# customer ages
X_train = np.array([50, 17, 35, 23, 28, 40, 31, 29, 19, 62])
X_train = X_train.reshape(-1, 1)
# churn y/n
y_train = ["yes", "no", "no", "no", "yes", "yes", "yes", "no", "no", "yes"]

clf = svm.SVC(gamma=0.001, C=100.)
clf.fit(X_train, y_train)

os.makedirs("outputs", exist_ok=True)
joblib.dump(value=clf, filename="outputs/churn-model.pkl")

接下来,通过实例化 RunConfiguration 对象并设置类型和大小来创建计算目标。 此示例使用最小的资源大小(1 个 CPU 核心,3.5 GB 内存)。 list_vms 变量包含支持的虚拟机及其大小列表。

from azureml.core.runconfig import RunConfiguration
from azureml.core.compute import AmlCompute
list_vms = AmlCompute.supported_vmsizes(workspace=ws)

compute_config = RunConfiguration()
compute_config.target = "amlcompute"
compute_config.amlcompute.vm_size = "STANDARD_D1_V2"

使用 CondaDependencies 类为远程计算资源的 Python 环境创建依赖项。 train.py 文件正在使用 scikit-learnnumpy,需要在环境中安装该文件。 还可以指定依赖项的版本。 使用 dependencies 对象在 compute_config中设置环境。

from azureml.core.conda_dependencies import CondaDependencies

dependencies = CondaDependencies()
dependencies.add_pip_package("scikit-learn")
dependencies.add_pip_package("numpy==1.15.4")
compute_config.environment.python.conda_dependencies = dependencies

现在,你已准备好提交试验。 使用 ScriptRunConfig 类附加计算目标配置,并将路径/文件指定到训练脚本 train.py。 通过指定 submit() 函数的 config 参数来提交试验。 调用生成的运行 wait_for_completion,以查看异步运行输出,因为环境已初始化并训练模型。

警告

以下是在 ScriptRunConfig 参数中使用的特定字符的限制:

  • "$;\ 字符由后端转义,因为它们被视为用于分隔 bash 命令的保留字符。
  • ()%!^<>&| 字符将在 Windows 上转义本地运行。
from azureml.core.experiment import Experiment
from azureml.core import ScriptRunConfig

script_run_config = ScriptRunConfig(source_directory=os.getcwd(), script="train.py", run_config=compute_config)
experiment = Experiment(workspace=ws, name="compute_target_test")
run = experiment.submit(config=script_run_config)
run.wait_for_completion(show_output=True)

运行完成后,工作区中提供了训练的模型文件 churn-model.pkl

环境

命名空间azureml.core.environment

Azure 机器学习环境围绕训练和评分脚本指定 Python 包、环境变量和软件设置。 除了 Python,还可以为环境配置 PySpark、Docker 和 R。 在内部,环境会导致 Docker 映像用于在计算目标上运行训练和评分过程。 这些环境是机器学习工作区中的托管实体和版本控制实体,可在各种计算目标和计算类型中实现可重现、可审核和可移植的机器学习工作流。

可以使用 Environment 对象来:

  • 开发训练脚本。
  • 在 Azure 机器学习计算中重复使用同一环境进行大规模模型训练。
  • 使用同一环境部署模型,而无需绑定到特定的计算类型。

以下代码从 SDK 导入 Environment 类,并实例化环境对象。

from azureml.core.environment import Environment
Environment(name="myenv")

使用 Conda、pip 或专用滚轮文件将包添加到环境。 使用 CondaDependency 类将每个包依赖项添加到环境的 PythonSection

以下示例将添加到环境。 它添加了版本 1.17.0 numpy。 它还将 pillow 包添加到环境,myenv。 该示例分别使用 add_conda_package() 方法和 add_pip_package() 方法。

from azureml.core.environment import Environment
from azureml.core.conda_dependencies import CondaDependencies

myenv = Environment(name="myenv")
conda_dep = CondaDependencies()

# Installs numpy version 1.17.0 conda package
conda_dep.add_conda_package("numpy==1.17.0")

# Installs pillow package
conda_dep.add_pip_package("pillow")

# Adds dependencies to PythonSection of myenv
myenv.python.conda_dependencies=conda_dep

若要提交训练运行,需要将环境、计算目标以及训练 Python 脚本合并到运行配置中。 此配置是用于提交运行的包装对象。

提交训练运行时,新环境的生成可能需要几分钟时间。 持续时间取决于所需依赖项的大小。 环境由服务缓存。 只要环境定义保持不变,就只会产生一次完整的设置时间。

以下示例演示将 ScriptRunConfig 用作包装器对象的位置。

from azureml.core import ScriptRunConfig, Experiment
from azureml.core.environment import Environment

exp = Experiment(name="myexp", workspace = ws)
# Instantiate environment
myenv = Environment(name="myenv")

# Add training script to run config
runconfig = ScriptRunConfig(source_directory=".", script="train.py")

# Attach compute target to run config
runconfig.run_config.target = "local"

# Attach environment to run config
runconfig.run_config.environment = myenv

# Submit run 
run = exp.submit(runconfig)

如果在提交运行之前未在运行配置中指定环境,则会为你创建默认环境。

请参阅 模型部署 部分,以使用环境部署 Web 服务。

Pipeline、PythonScriptStep

命名空间azureml.pipeline.core.pipeline.Pipeline
命名空间azureml.pipeline.steps.python_script_step.PythonScriptStep

Azure 机器学习管道是完整的机器学习任务的自动化工作流。 子任务封装为管道中的一系列步骤。 Azure 机器学习管道可以像调用 Python 脚本的一个步骤一样简单。 管道包括用于:

  • 数据准备,包括导入、验证和清理、模拟和转换、规范化和暂存
  • 训练配置,包括参数化参数、文件路径和日志记录/报告配置
  • 有效和重复地训练和验证,这可能包括指定特定数据子集、不同的硬件计算资源、分布式处理和进度监视
  • 部署,包括版本控制、缩放、预配和访问控制
  • 将管道发布到 REST 终结点以从任何 HTTP 库重新运行

PythonScriptStep 是一个基本的内置步骤,用于在计算目标上运行 Python 脚本。 它采用脚本名称和其他可选参数,例如脚本、计算目标、输入和输出的参数。 以下代码是 PythonScriptStep的简单示例。 有关 train.py 脚本的示例,请参阅 教程 子部分。

from azureml.pipeline.steps import PythonScriptStep

train_step = PythonScriptStep(
    script_name="train.py",
    arguments=["--input", blob_input_data, "--output", output_data1],
    inputs=[blob_input_data],
    outputs=[output_data1],
    compute_target=compute_target,
    source_directory=project_folder
)

创建至少一个步骤后,步骤可以链接在一起,并发布为简单的自动化管道。

from azureml.pipeline.core import Pipeline

pipeline = Pipeline(workspace=ws, steps=[train_step])
pipeline_run = experiment.submit(pipeline)

有关生成管道工作流的综合示例,请遵循 高级教程

用于创建和使用管道的模式

Azure 机器学习管道与 Azure 机器学习工作区相关联,管道步骤与该工作区中可用的计算目标相关联。 有关详细信息,请参阅此 文章,了解工作区计算目标的此说明。

管道步骤的常见模式是:

  1. 指定工作区、计算和存储
  2. 使用 配置输入和输出数据
    1. 数据集,使现有 Azure 数据存储可用
    2. PipelineDataset,用于封装类型化表格数据
    3. PipelineData,用于由一个步骤写入的中间文件或目录数据,并打算由另一个步骤使用
  3. 定义一个或多个管道步骤
  4. 使用工作区和步骤实例化管道
  5. 创建提交管道的试验
  6. 监视试验结果

此笔记本 是此模式的一个很好的示例。 工作

有关 Azure 机器学习管道的详细信息,特别是它们与其他类型的管道的不同,请参阅此 文章

AutoMLConfig

命名空间azureml.train.automl.automlconfig.AutoMLConfig

使用 AutoMLConfig 类为自动化机器学习训练配置参数。 自动化机器学习循环访问机器学习算法和超参数设置的许多组合。 然后,它会根据所选的准确性指标找到最适合的模型。 配置允许指定:

  • 任务类型(分类、回归、预测)
  • 每次迭代的算法迭代次数和最大时间
  • 要优化的准确度指标
  • 阻止列表/允许列表的算法
  • 交叉验证数
  • 计算目标
  • 训练数据

注意

使用安装中的 automl 额外功能来使用自动化机器学习。

有关设置自动化机器学习试验的详细指南和示例,请参阅 教程操作方法

以下代码演示如何为分类模型生成自动化机器学习配置对象,并在提交试验时使用它。

from azureml.train.automl import AutoMLConfig

automl_config = AutoMLConfig(task="classification",
                             X=your_training_features,
                             y=your_training_labels,
                             iterations=30,
                             iteration_timeout_minutes=5,
                             primary_metric="AUC_weighted",
                             n_cross_validations=5
                            )

使用 automl_config 对象提交试验。

from azureml.core.experiment import Experiment

experiment = Experiment(ws, "automl_test_experiment")
run = experiment.submit(config=automl_config, show_output=True)

提交试验后,输出会在每次迭代完成后显示训练准确性。 运行完成后,将返回一个 AutoMLRun 对象(扩展 Run 类)。 通过使用 get_output() 函数返回 Model 对象来获取最佳模型。

best_model = run.get_output()
y_predict = best_model.predict(X_test)

模型部署

命名空间azureml.core.model.InferenceConfig
命名空间azureml.core.webservice.webservice.Webservice

InferenceConfig 类适用于描述托管模型和 Web 服务所需的环境的配置设置。

Webservice 是用于为模型创建和部署 Web 服务的抽象父类。 有关准备模型部署和部署 Web 服务的详细指南,请参阅此 操作指南

将模型部署为 Web 服务时,可以使用 环境。 环境可实现可重现的连接工作流,可以在训练计算和推理计算中使用同一库部署模型。 在内部,环境作为 Docker 映像实现。 可以使用Microsoft提供的映像,也可以使用自己的自定义 Docker 映像。 如果以前使用 ContainerImage 类进行部署,请参阅 DockerSection 类,了解如何使用环境完成类似的工作流。

若要部署 Web 服务,请在部署对象中合并环境、推理计算、评分脚本和已注册的模型,deploy()

以下示例假定你已使用环境、myenv完成训练运行,并且想要将模型部署到 Azure 容器实例。

from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import AciWebservice, Webservice

# Register the model to deploy
model = run.register_model(model_name = "mymodel", model_path = "outputs/model.pkl")

# Combine scoring script & environment in Inference configuration
inference_config = InferenceConfig(entry_script="score.py",
                                   environment=myenv)

# Set deployment configuration
deployment_config = AciWebservice.deploy_configuration(cpu_cores = 1,
                                                       memory_gb = 1)

# Define the model, inference, & deployment configuration and web service name and location to deploy
service = Model.deploy(workspace = ws,
                       name = "my_web_service",
                       models = [model],
                       inference_config = inference_config,
                       deployment_config = deployment_config)

此示例创建一个 Azure 容器实例 Web 服务,该服务最适合进行小规模测试和快速部署。 若要将模型部署为生产规模 Web 服务,请使用 Azure Kubernetes 服务(AKS)。 有关详细信息,请参阅 AksCompute 类

数据

命名空间azureml.core.dataset.Dataset
命名空间azureml.data.file_dataset.FileDataset
命名空间azureml.data.tabular_dataset.TabularDataset

Dataset 类是探索和管理 Azure 机器学习中的数据的基础资源。 可以使用摘要统计信息浏览数据,并将数据集保存到 AML 工作区以获取版本控制和可重现性功能。 在训练过程中,模型可以轻松使用数据集。 有关详细用法示例,请参阅 操作指南

  • TabularDataset 表示通过分析文件或文件列表创建的表格格式的数据。
  • FileDataset 引用数据存储或公共 URL 中的单个或多个文件。

以下示例演示如何创建指向数据存储中单个路径的 TabularDataset。

from azureml.core import Dataset

dataset = Dataset.Tabular.from_delimited_files(path = [(datastore, 'train-dataset/tabular/iris.csv')])
dataset.take(3).to_pandas_dataframe()

以下示例演示如何创建引用多个文件 URL 的 FileDataset

from azureml.core.dataset import Dataset

url_paths = [
            'http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz',
            'http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz'
            ]
dataset = Dataset.File.from_files(path=url_paths)

后续步骤

请尝试执行以下后续步骤,了解如何使用适用于 Python 的 Azure 机器学习 SDK:

  • 按照教程 了解如何在 Python 中生成、训练和部署模型。

  • 使用左侧目录查找此网站上的参考文档中的类和模块。