在 GitHub 上编辑

Amazon SageMaker

开发

设置

许多 DVC 功能依赖于 Git。要在 Amazon SageMaker 中使用 DVC,首先需要设置你的 Git 仓库:

  1. 克隆一个仓库。

    Git clone

  2. 启动终端或笔记本,并配置 Git 用户名和邮箱:

    git config --global user.name ...
    git config --global user.email ...
  3. 别忘了在你的环境中安装 DVC 和其他必要的依赖!

    pip install dvc dvclive

笔记本

完成设置后,你可以在 SageMaker 笔记本中像在其他任何环境中一样使用 DVC。查看 DVC 实验了解如何在笔记本中开始使用 DVC(如果你已在 SageMaker 上设置了 code-server,还可以安装 VS Code 的 DVC 扩展)。

如果你想在 DVC Studio 中查看实时的实验更新,请设置你的 token:

$ dvc studio login

实验运行期间,你会在 DVC Studio 中看到类似如下的实时更新:

Notebook

管道

你可以在 DVC 管道中运行 SageMaker 任务,或将现有的 SageMaker 管道转换为 DVC 管道。这样可以结合 SageMaker 任务的优势(例如每个阶段在独立的 EC2 实例上运行,并支持其他数据 输入模式)与 DVC 管道的优势(例如跳过未更改的阶段,以及跟踪每次运行的输入和输出)。SageMaker 要求所有输入和输出都存储在 S3 中,因此最简单的集成方式是使用 S3 存储,并利用 外部依赖项和输出

示例:XGBoost 管道

例如,参见 https://github.com/iterative/sagemaker-pipeline,该项目将现有的 SageMaker 教程从笔记本改造成 DVC 管道。第一阶段(prepare)下载数据并跟踪输出,避免每次运行时重复下载。我们将目标位置的 bucketprefix 参数化到单独的 params.yaml 文件中,以便轻松修改。DVC 管道阶段在 dvc.yaml 中定义如下:

prepare:
  cmd:
    - wget
      https://sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip
      -O bank-additional.zip
    - python sm_prepare.py --bucket ${bucket} --prefix ${prefix}
  deps:
    - sm_prepare.py
    - https://sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip
  outs:
    - s3://${bucket}/${prefix}/input_data:
        cache: false

预处理脚本 接收 bucketprefix 作为参数,其余部分直接从原始笔记本代码复制而来,该代码使用了 SageMaker 处理任务。DVC 管道阶段会跟踪命令、脚本、输入路径和输出路径,因此只有当其中任一项发生变化时,该阶段才会重新运行:

preprocessing:
  cmd: python sm_preprocessing.py --bucket ${bucket} --prefix ${prefix}
  deps:
    - sm_preprocessing.py
    - preprocessing.py
    - s3://${bucket}/${prefix}/input_data
  outs:
    - s3://${bucket}/${prefix}/train:
        cache: false
    - s3://${bucket}/${prefix}/validation:
        cache: false
    - s3://${bucket}/${prefix}/test:
        cache: false

最后,训练脚本 使用 SageMaker Estimator 进行 XGBoost 模型训练。我们把所有模型超参数作为参数传入,便于调参并记录变更内容。这些超参数在 params.yaml 文件中添加在 train 键下。DVC 管道阶段的 cmd 包含 ${train},用于解包并传递所有这些参数,并将其作为参数进行跟踪,同时也会跟踪其他输入和输出:

training:
  cmd: python sm_training.py --bucket ${bucket} --prefix ${prefix}  ${train}
  deps:
    - sm_training.py
    - s3://${bucket}/${prefix}/train
    - s3://${bucket}/${prefix}/validation
  outs:
    - s3://${bucket}/${prefix}/output:
        cache: false

运行该管道的最终结果如下所示:

Pipeline

SageMaker 任务中的实时实验更新

SageMaker 任务在 Git 仓库之外运行,因此实验指标和图表不会自动被记录到仓库中。但你可以在 DVC Studio 中查看实时的实验更新。

首先,设置 DVC_STUDIO_TOKENDVC_EXP_GIT_REMOTE 环境变量。

$ export DVC_STUDIO_TOKEN="<token>"
$ export DVC_EXP_GIT_REMOTE="https://github.com/<org>/<repo>"

如果你正在运行 DVC pipelines 并已登录 Studio,这些环境变量将由 DVC 自动设置,你可以跳过第一步。但仍需将环境变量传递给 SageMaker 任务。

然后将它们传递给 SageMaker 任务:

import os
from sagemaker.estimator import Estimator

env = {name: value for name, value in os.environ.items() if name.startswith("DVC")}

estimator = Estimator(
    environment=env,
    entry_point="train.py",
    source_dir="src",
    ...
)

对于在 entry_point 脚本中记录的任何 DVCLive 指标和图表,你现在应该可以在 Studio 中看到实时更新。要在脚本中使用 DVCLive,你还必须在 source_dir 目录内的 requirements.txt 文件中包含 dvclive

部署

使用模型注册表在你的 CI/CD 工作流中自动化 SageMaker 部署。要开始使用模型注册表,请查看如何:

有关如何使用 SageMaker 进行部署的完整示例,请参阅我们的 博客文章

内容

🐛 发现问题?告诉我们!或者修复它:

在 GitHub 上编辑

有疑问?加入我们的聊天,我们会为您提供帮助:

Discord 聊天