你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:云工作站上的模型开发

本文介绍如何在 Azure 机器学习云工作站上使用笔记本开发训练脚本。 本教程介绍入门所需的基本步骤:

  • 设置和配置云工作站。 云工作站由 Azure 机器学习计算实例提供支持,该实例预配置了环境以支持模型开发需求。
  • 使用基于云的开发环境。
  • 使用 MLflow 跟踪模型指标。

Prerequisites

要使用 Azure 机器学习,你需要一个工作区。 如果没有工作区,请完成“创建开始使用所需的资源”以创建工作区并详细了解如何使用它。

重要说明

如果 Azure 机器学习工作区配置了托管虚拟网络,则可能需要添加出站规则以允许访问公共 Python 包存储库。 有关详细信息,请参阅应用场景:访问公共机器学习包

创建或启动计算

可以在工作区的 “计算 ”部分创建计算资源。 计算实例是一个基于云的工作站,完全由 Azure 机器学习管理。 本教程系列使用计算实例。 还可以使用它来运行自己的代码,以及开发和测试模型。

  1. 登录到 Azure 机器学习工作室
  2. 选择工作区(如果它尚未打开)。
  3. 在左窗格中,选择“ 计算”。
  4. 如果没有计算实例,可在页面中间看到 “新建 ”。 选择“新建”并填写表单。 可以使用所有默认值。
  5. 如果有计算实例,请从列表中选择它。 如果已停止,请选择“启动”

打开 Visual Studio Code (VS Code)

运行计算实例后,可以通过多种方式访问它。 本教程介绍如何使用 Visual Studio Code 中的计算实例。 Visual Studio Code 提供了用于创建计算实例的完整集成开发环境(IDE)。

在计算实例列表中,为要使用的计算实例选择“VS Code(网页版)”或“VS Code(桌面版)”链接。 如果选择 VS Code (桌面版),可能会看到一条消息,询问是否要打开该应用程序。

显示用于启动 Visual Studio Code(Web 或桌面)的链接的屏幕截图。

此 Visual Studio Code 实例附加到计算实例和工作区文件系统。 即使在桌面上打开它,你看到的文件也是工作区中的文件。

设置用于原型制作的新环境

若要运行脚本,需要在配置有依赖项和代码所需的库的环境中工作。 本部分可帮助你创建专为代码定制的环境。 若要创建笔记本连接到的新 Jupyter 内核,请使用定义依赖项的 YAML 文件。

  • 上传文件。

    上传的文件存储在 Azure 文件共享中,这些文件装载到每个计算实例并在工作区中共享。

    1. 转到 azureml-examples/tutorials/get-started-notebooks/workstation_env.yml

    2. 选择页面右上角的省略号按钮(...),然后选择“下载,将 Conda 环境文件workstation_env.yml下载到计算机。

    3. 将文件从计算机拖动到 Visual Studio Code 窗口。 文件将上传到工作区。

    4. 将文件移动到用户名文件夹中。

      显示用户名文件夹中workstation_env.yml文件的屏幕截图。

    5. 选择要预览的文件。 查看它指定的依赖项。 你应看到与下面类似的内容:

    name: workstation_env
    # This file serves as an example - you can update packages or versions to fit your use case
    dependencies:
      - python=3.8
      - pip=21.2.4
      - scikit-learn=0.24.2
      - scipy=1.7.1
      - pandas>=1.1,<1.2
      - pip:
        - mlflow-skinny 
        - azureml-mlflow
        - psutil>=5.8,<5.9
        - ipykernel~=6.0
        - matplotlib
    
  • 创建内核。

    现在,使用终端创建基于 workstation_env.yml 文件的新 Jupyter 内核。

    1. 在 Visual Studio Code 顶部的菜单中,选择 “终端 > 新建终端”。

      屏幕截图显示笔记本工具栏中的打开终端工具。

    2. 查看当前的 Conda 环境。 活动环境标记为星号 (*)。

      conda env list
      
    3. 使用cd导航到上传了workstation_env.yml文件的文件夹。 例如,如果将它上传到用户文件夹,请使用以下命令:

      cd Users/myusername
      
    4. 请确保workstation_env.yml位于文件夹中。

      ls
      
    5. 根据提供的 Conda 文件创建环境。 生成环境需要几分钟时间。

      conda env create -f workstation_env.yml
      
    6. 激活新环境。

      conda activate workstation_env
      

      注意

      如果看到 CommandNotFoundError,请按照说明运行 conda init bash,关闭终端,然后打开一个新终端。 然后再次尝试该 conda activate workstation_env 命令。

    7. 验证正确的环境是否处于活动状态,再次查找标有 *的环境。

      conda env list
      
    8. 创建基于活动环境的新 Jupyter 内核。

      python -m ipykernel install --user --name workstation_env --display-name "Tutorial Workstation Env" 
      
    9. 关闭终端窗口。

你现在有了一个新内核。 接下来,你将打开笔记本并使用此内核。

创建笔记本

  1. 在 Visual Studio Code 顶部的菜单中,选择“ 文件 > 新建文件”。
  2. 将新文件 命名为 develop-tutorial.ipynb (或使用其他名称)。 请务必使用 .ipynb 扩展。

设置内核

  1. 在新文件的右上角,选择“选择内核”
  2. 选择“Azure ML 计算实例 (computeinstance-name)”
  3. 选择创建的内核:教程工作站环境。 如果未看到内核,请选择列表上方的刷新按钮。

开发训练脚本

在本部分中,你将开发一个 Python 训练脚本,该脚本使用 来自 UCI 数据集的准备测试和训练数据集来预测信用卡默认付款。

此代码使用 sklearn 进行训练,使用 MLflow 来记录指标。

  1. 首先,导入训练脚本中使用的包和库的代码。

    import os
    import argparse
    import pandas as pd
    import mlflow
    import mlflow.sklearn
    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
  2. 接下来,加载并处理试验的数据。 在本教程中,将从 Internet 上的一个文件读取数据。

    # load the data
    credit_df = pd.read_csv(
        "https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv",
        header=1,
        index_col=0,
    )
    
    train_df, test_df = train_test_split(
        credit_df,
        test_size=0.25,
    )
  3. 准备好数据进行训练:

    # Extracting the label column
    y_train = train_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_train = train_df.values
    
    # Extracting the label column
    y_test = test_df.pop("default payment next month")
    
    # convert the dataframe values to array
    X_test = test_df.values
  4. 添加代码以使用 MLflow 启动自动记录,以便跟踪指标和结果。 借助模型开发的迭代性质,MLflow 可帮助你记录模型参数和结果。 参考各次运行进行比较,并了解模型的表现。 这些日志还为你准备好从 Azure 机器学习中工作流的开发阶段转到训练阶段提供上下文。

    # set name for logging
    mlflow.set_experiment("Develop on cloud tutorial")
    # enable autologging with MLflow
    mlflow.sklearn.autolog()
  5. 训练模型。

    # Train Gradient Boosting Classifier
    print(f"Training with data of shape {X_train.shape}")
    
    mlflow.start_run()
    clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
    clf.fit(X_train, y_train)
    
    y_pred = clf.predict(X_test)
    
    print(classification_report(y_test, y_pred))
    # Stop logging for this model
    mlflow.end_run()

    注意

    可以忽略 MLflow 警告。 我们仍会跟踪您所需的结果。

  6. 选择代码上方的全部运行

迭代

现在你已经有了模型结果,可能需要更改某些内容,然后重试。 例如,请尝试其他分类器技术:

# Train  AdaBoost Classifier
from sklearn.ensemble import AdaBoostClassifier

print(f"Training with data of shape {X_train.shape}")

mlflow.start_run()
ada = AdaBoostClassifier()

ada.fit(X_train, y_train)

y_pred = ada.predict(X_test)

print(classification_report(y_test, y_pred))
# Stop logging for this model
mlflow.end_run()

注意

可以忽略 MLflow 警告。 我们仍会跟踪您所需的结果。

选择“ 全部运行 ”以运行模型。

检查结果

现在,你已尝试了两个不同的模型,请使用 MLFfow 跟踪的结果来确定哪个模型更好。 可以引用指标(例如准确性)或其他对方案而言最重要的指标。 可以通过查看 MLflow 创建的作业来更详细地查看这些结果。

  1. 返回到 Azure 机器学习工作室中的工作区。

  2. 在左窗格中,选择“ 作业”。

    显示左侧窗格中的“作业”项的屏幕截图。

  3. 选择“云开发教程”

  4. 显示两个作业,每个作业分别对应您尝试过的模型之一。 名称是自动生成的。 如果要重命名作业,请将鼠标悬停在名称上,然后选择其旁边的铅笔按钮。

  5. 选择第一个作业的链接。 该名称显示在页面顶部。 还可以使用铅笔按钮在此处重命名它。

  6. 该页显示作业详细信息,例如属性、输出、标记和参数。 在 “标记”下,可以看到描述模型类型的 estimator_name

  7. 选择“ 指标 ”选项卡以查看 MLflow 记录的指标。 (你的结果会有所不同,因为你有不同的训练集。

    显示作业指标的屏幕截图。

  8. 选择“ 图像 ”选项卡以查看 MLflow 生成的图像。

    显示作业图像的屏幕截图。

  9. 返回并查看其他模型的指标和图像。

创建 Python 脚本

现在,你将从笔记本创建 Python 脚本进行模型训练。

  1. 在 Visual Studio Code 中,右键单击笔记本文件名,然后选择“ 将笔记本导入脚本”。

  2. 选择 “文件 > 保存” 以保存新脚本文件。 将它命名为 train.py

  3. 浏览文件并删除训练脚本中不需要的代码。 例如,保留要使用的模型的代码,并删除不想使用的模型的代码。

    • 请确保保留启动自动记录的代码(mlflow.sklearn.autolog())。
    • 当以交互方式运行 Python 脚本时(如此处所示),可以保留定义试验名称的行 (mlflow.set_experiment("Develop on cloud tutorial"))。 或者,你可以为它指定一个不同的名称,以将其视为 “作业 ”部分中的不同条目。 但是,为训练作业准备脚本时,该行不适用,应省略:作业定义包括试验名称。
    • 训练单个模型时,开始和结束运行的行(mlflow.start_run()mlflow.end_run())不是必需的(它们没有作用),但你可以保留它们。
  4. 完成编辑后,请保存文件。

现在,你有一个 Python 脚本用于训练首选模型。

运行 Python 脚本

现在,你将在计算实例(即 Azure 机器学习开发环境)上运行此代码。 教程:训练模型 演示如何在更强大的计算资源上以更可缩放的方式运行训练脚本。

  1. 选择在本教程前面创建的环境作为 Python 版本 (workstations_env)。 在笔记本的右下角,你将看到环境名称。 选择它,然后在 Visual Studio Code 顶部选择环境。

    显示选择新环境的屏幕截图。

  2. 通过选择代码上方的 “全部运行 ”按钮来运行 Python 脚本。

    显示“运行”按钮的屏幕截图。

注意

可以忽略 MLflow 警告。 你仍将从自动记录中获取所有指标和图像。

检查脚本结果

返回到 Azure 机器学习工作室工作区中的“作业”,查看训练脚本的结果。 请记住,每次拆分时训练数据都会更改,因此各运行的结果也不同。

清理资源

如果打算继续学习其他教程,请跳到 后续步骤

停止计算实例

如果现在不打算使用计算实例,请将其停止:

  1. 在工作室的左窗格中,选择 “计算”。
  2. 在页面顶部,选择 “计算实例”。
  3. 在列表中,选择计算实例。
  4. 在页面顶部,选择“ 停止”。

删除所有资源

重要说明

已创建的资源可用作其他 Azure 机器学习教程和操作方法文章的先决条件。

如果你不打算使用已创建的任何资源,请删除它们,以免产生任何费用:

  1. 在 Azure 门户的搜索框中输入“资源组”,然后从结果中选择它。

  2. 从列表中选择你创建的资源组。

  3. 在“概述”页面上,选择“删除资源组”

    用于在 Azure 门户中删除资源组的选项的屏幕截图。

  4. 输入资源组名称。 然后选择“删除”

Next steps

若要了解详细信息,请参阅以下资源:

本教程介绍在代码所在的同一台计算机上创建模型原型的早期步骤。 对于生产训练,了解如何在更强大的远程计算资源上使用该训练脚本: