Azure 机器学习的工作原理:体系结构和概念 (v1)

适用范围:Azure CLI ml 扩展 v1Python SDK azureml v1

本文适用于 Azure 机器学习 CLI 和 SDK 的第一个版本 (v1)。 对于第二版 (v2),请参阅 Azure 机器学习的工作原理 (v2)

了解 Azure 机器学习的体系结构和概念。 本文使你对组件以及它们如何协同工作以帮助你构建、部署和维护机器学习模型的过程有一个概要了解。

工作区

机器学习工作区是 Azure 机器学习的顶级资源。

示意图:工作区及其组件的 Azure 机器学习体系结构

工作区是用来执行以下操作的集中位置:

工作区包括工作区使用的其他 Azure 资源:

  • Azure 容器注册表 (ACR):注册在训练期间和部署模型时使用的 Docker 容器。 为最大程度地降低成本,只有在创建部署映像时才会创建 ACR。
  • Azure 存储帐户,用作工作区的默认数据存储。 与 Azure 机器学习计算实例一起使用的 Jupyter 笔记本也存储在此处。
  • Azure Application Insights:存储有关模型的监视信息。
  • Azure Key Vault:存储计算目标使用的机密和工作区所需的其他敏感信息。

可与其他人共享工作区。

计算

计算目标是用于运行训练脚本或承载服务部署的任何计算机或计算机集。 你可以使用本地计算机或远程计算资源作为计算目标。 使用计算目标,你可以在本地计算机上开始训练,然后在不更改训练脚本的情况下横向扩展到云。

Azure 机器学习引入了为机器学习任务配置的两个完全托管的基于云的虚拟机 (VM):

  • 计算实例:计算实例是一个 VM,其中包含为机器学习安装的多个工具和环境。 计算实例的主要用途是用于你的开发工作站。 你可以开始运行示例笔记本,无需进行任何设置。 还可将计算实例用作训练和推理作业的计算目标。

  • 计算群集:计算群集是包含多节点缩放功能的 VM 群集。 计算群集更适合用于大型作业和生产的计算目标。 提交作业时,群集会自动纵向扩展。 用作训练计算目标,或用于开发/测试部署。

若要详细了解如何训练计算目标,请参阅训练计算目标。 有关部署计算目标的详细信息,请参阅部署目标

数据集和数据存储

使用 Azure 机器学习数据集可以更轻松地访问和处理数据。 创建数据集时,将会创建对数据源位置的引用及其元数据的副本。 由于数据保留在其现有位置中,因此不会产生额外的存储成本,也不会损害数据源的完整性。

有关详细信息,请参阅创建和注册 Azure 机器学习数据集。 有关使用数据集的更多示例,请参阅示例笔记本

数据集使用数据存储来安全地连接到你的 Azure 存储服务。 数据存储用于存储连接信息,不会损害你的身份验证凭据以及原始数据源的完整性。 它们会存储连接信息,例如与工作区关联的 Key Vault 中的订阅 ID 和令牌授权,让你能够安全地访问存储,而无需在脚本中对其进行硬编码。

环境

工作区>环境

环境是在其中进行机器学习模型的训练或评分的环境的封装。 此环境指定了与训练和评分脚本有关的 Python 包、环境变量和软件设置。

如需代码示例,请参阅如何使用环境中的“管理环境”部分。

试验

工作区>试验

试验是指定的脚本中多个运行的分组。 它始终属于工作区。 当你提交运行时,需提供试验名称。 运行的信息存储在该试验下。 如果你提交试验时该名称不存在,系统会自动创建一个新试验。

有关使用试验的示例,请参阅教程:训练第一个模型

运行次数

工作区>试验>运行

一次运行就是执行一次训练脚本。 试验通常包含多个运行。

Azure 机器学习在试验中记录所有运行并存储以下信息:

  • 有关运行的元数据(时间戳、持续时间等)
  • 脚本记录的指标
  • 试验自动收集的或由你显式上传的输出文件
  • 在运行之前包含脚本的目录的快照

提交脚本以训练模型时,会生成运行。 运行可以有零次或多次子级运行。 例如,顶级运行可以有两次子级运行,其中每个可以有其自己的子级运行。

运行配置

工作区>试验>运行>运行配置

运行配置对应该如何在指定的计算目标中运行脚本进行定义。 可以使用配置来指定脚本、要在其上运行的计算目标和 Azure 机器学习环境、任何特定于分布式作业的配置以及一些其他属性。 有关运行的全套可配置选项的详细信息,请参阅 ScriptRunConfig

运行配置可以保存到包含训练脚本的目录内的文件中, 或构造为内存中对象以及用于提交运行。

有关运行配置的示例,请参阅配置训练运行

快照

工作区>试验>运行>快照

提交运行时,Azure 机器学习会将包含该脚本的目录压缩为 zip 文件并将其发送到计算目标。 然后解压缩 zip 文件并运行脚本。 Azure 机器学习还将该 zip 文件存储为快照,作为运行记录的一部分。 有权限访问工作区的任何用户都可以浏览运行记录并下载快照。

日志记录

Azure 机器学习会自动为你记录标准运行指标。 不过,你也可以使用 Python SDK 记录任意指标

查看日志的方法有多种:实时监视运行状态,或在完成后查看结果。 有关详细信息,请参阅监视和查看 ML 运行日志

注意

为了防止在快照中包含不必要的文件,请在目录中创建 ignore 文件(.gitignore.amlignore)。 将要排除的文件和目录添加到此文件中。 有关此文件中使用的语法的详细信息,请参阅 .gitignore语法和模式.amlignore 文件使用相同的语法。 如果同时存在这两个文件,则会使用 .amlignore 文件,不会使用 .gitignore 文件。

Git 跟踪与集成

如果以本地 Git 存储库作为源目录开始训练运行,有关存储库的信息将存储在运行历史记录中。 这适用于通过脚本运行配置或 ML 管道提交的运行。 此外,还适用于从 SDK 或机器学习 CLI 提交的运行。

有关详细信息,请参阅 Azure 机器学习的 Git 集成

训练工作流

运行试验来训练模型时,需执行以下步骤。 下面的训练工作流关系图对此进行了说明:

  • 使用在上一部分保存的代码快照的快照 ID 调用 Azure 机器学习。

  • Azure 机器学习会创建一个运行 ID (可选)和一个机器学习服务令牌,计算目标(例如机器学习计算/VM)稍后会使用该令牌来与机器学习服务通信。

  • 可以选择使用托管计算目标(例如机器学习计算)或非托管计算目标(例如 VM)来运行训练作业。 以下是针对两种场景的数据流:

    • VM/HDInsight,通过 Azure 订阅中的密钥保管库内的 SSH 凭据访问。 Azure 机器学习在计算目标上运行管理代码,以执行以下操作:
    1. 准备环境。 (Docker 是用于 VM 和本地计算机的一个选项。请参阅以下适用于机器学习计算的步骤,了解如何在 Docker 容器上运行试验。)
    2. 下载代码。
    3. 设置环境变量和配置。
    4. 运行用户脚本(上一部分提到的代码快照)。
    • 机器学习计算,通过工作区托管标识访问。 由于机器学习计算是托管的计算目标(即,它由 Microsoft 管理),因此它会在 Azure 订阅下运行。
    1. 根据需要启动远程 Docker 构造。
    2. 管理代码将写入用户的 Azure 文件共享。
    3. 使用初始命令启动容器。 即,使用上一步骤中所述的管理代码。
  • 运行完成后,可查询运行和指标。 在下面的流程图中,在训练计算目标将运行指标从 Azure Cosmos DB 数据库中的存储写回 Azure 机器学习时就出现这一步。 客户端可以调用 Azure 机器学习。 反过来,机器学习从 Azure Cosmos DB 数据库中拉取指标,并将其返回给客户端。

训练工作流

模型

简单地说,模型是一段接受输入并生成输出的代码。 创建机器学习模型涉及选择算法、为其提供数据以及优化超参数。 培训是一个迭代过程,将生成经过培训的模型,它会封装模型在培训过程中学到的内容。

你可以引入在 Azure 机器学习外部训练的模型。 你还可以通过向 Azure 机器学习中的计算目标提交试验运行来训练模型。 拥有模型后,请在工作区中注册模型

Azure 机器学习与框架无关。 创建模型时,可以使用任何流行的机器学习框架,例如 Scikit-learn、XGBoost、PyTorch、TensorFlow 和 Chainer。

有关使用 Scikit-learn 训练模型的示例,请参阅教程:使用 Azure 机器学习训练图像分类模型

模型注册表

工作区>模型

模型注册表用于跟踪 Azure 机器学习工作区中的所有模型。

模型按名称和版本标识。 每次使用与现有相同的名称注册模型时,注册表都会假定它是新版本。 该版本将递增并且新模型会以同一名称注册。

注册模型时,可以提供其他元数据标记,然后在搜索模型时使用这些标记。

提示

已注册的模型是构成模型的一个或多个文件的逻辑容器。 例如,如果你有一个存储在多个文件中的模型,则可以在 Azure 机器学习工作区中将这些文件注册为单个模型。 注册后,可以下载或部署已注册的模型,并接收注册的所有文件。

无法删除在活动部署正在使用的已注册模型。

有关注册模型的示例,请参阅使用 Azure 机器学习训练映像分类模型

部署

已注册的模型部署为服务终结点。 你需要下列组件:

  • 环境。 此环境封装运行模型进行推理所需的依赖项。
  • 评分代码。 此脚本接受请求、使用模型为请求评分并返回结果。
  • 推理配置。 推理配置指定以服务形式运行模型所需的环境、入口脚本和其他组件。

有关这些组件的详细信息,请参阅使用 Azure 机器学习部署模型

终结点

工作区>终结点

终结点是模型在 Web 服务(可托管在云中)中的实例化。

Web 服务终结点

将模型部署为 Web 服务时,可以在 Azure 容器实例或 Azure Kubernetes 服务上部署终结点。 可以从模型、脚本和关联的文件创建服务。 这些项目已放入到包含模型执行环境的基础容器映像中。 映像具有负载均衡的 HTTP 终结点,可接收发送到 Web 服务的评分请求。

可以启用 Application Insights 遥测或模型遥测来监视 Web 服务。 遥测数据仅可供你访问。 它存储在你的 Application Insights 和存储帐户实例中。 如果已启用自动缩放,Azure 将自动缩放部署。

下图显示了部署为 Web 服务终结点的模型的推理工作流:

以下是详细信息:

  • 用户使用 Azure 机器学习 SDK 等客户端注册模型。
  • 用户使用模型、评分文件和其他模型依赖项创建映像。
  • Docker 映像在创建后存储在 Azure 容器注册表中。
  • 使用上一步中创建的映像将 Web 服务部署到计算目标(容器实例/AKS)中。
  • 将评分请求详细信息存储在用户订阅的 Application Insights 中。
  • 遥测数据还会推送到 Azure 订阅。

推理工作流

有关将模型部署为 Web 服务的示例,请参阅教程:训练和部署模型

实时终结点

在设计器中部署经过训练的模型时,可以将模型部署为实时终结点。 实时终结点通常通过 REST 终结点接收单个请求,并实时返回预测结果。 这与批处理相反,批处理一次处理多个值,并将完成后的结果保存到数据存储中。

管道终结点

管道终结点允许通过 REST 终结点以编程方式调用 ML 管道。 管道终结点可用于自动执行管道工作流。

管道终结点是已发布管道的集合。 通过这种逻辑组织,你可以使用同一终结点管理和调用多个管道。 管道终结点中的每个已发布管道都经过版本控制。 你可以为终结点选择默认管道,也可以在 REST 调用中指定版本。

自动化

Azure 机器学习 CLI

Azure 机器学习 CLI v1 是 Azure CLI(适用于 Azure 平台的跨平台命令行接口)的一个扩展。 此扩展提供了用于自动执行机器学习活动的命令。

ML 管道

使用机器学习管道可以创建和管理将各个机器学习阶段整合到一起的工作流。 例如,管道可以包括数据准备、模型训练、模型部署以及推理/评分阶段。 每个阶段可以包含多个步骤,每个步骤都能够以无人参与方式在各种计算目标中运行。

管道步骤可重用,如果这些步骤的输出没有更改,则无需重新运行前面的步骤即可运行。 例如,如果数据未更改,你可以重新训练模型,不需要重新运行成本高昂的数据准备步骤。 管道还使数据科学家能够展开协作,同时可以处理机器学习工作流的不同环节。

监视和日志记录

Azure 机器学习提供以下监视和日志记录功能:

与工作区交互

工作室

Azure 机器学习工作室提供了你的工作区中所有项目的 Web 视图。 你可以查看数据集、试验、管道、模型和终结点的结果和详细信息。 你还可以在工作室中管理计算资源和数据存储。

你还可以通过工作室访问 Azure 机器学习中包含的交互工具:

编程工具

重要

下面标记了“(预览版)”的工具目前为公共预览版。 该预览版在提供时没有附带服务级别协议,建议不要将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

后续步骤

若要开始使用 Azure 机器学习,请参阅: