Amazon SageMaker
开发
设置
许多 DVC 功能依赖于 Git。要在 Amazon SageMaker 中使用 DVC,首先需要设置你的 Git 仓库:
-
克隆一个仓库。
-
启动终端或笔记本,并配置 Git 用户名和邮箱:
git config --global user.name ... git config --global user.email ...
-
别忘了在你的环境中安装 DVC 和其他必要的依赖!
pip install dvc dvclive
笔记本
完成设置后,你可以在 SageMaker 笔记本中像在其他任何环境中一样使用 DVC。查看 DVC 实验了解如何在笔记本中开始使用 DVC(如果你已在 SageMaker 上设置了 code-server,还可以安装 VS Code 的 DVC 扩展)。
如果你想在 DVC Studio 中查看实时的实验更新,请设置你的 token:
$ dvc studio login
实验运行期间,你会在 DVC Studio 中看到类似如下的实时更新:
管道
你可以在 DVC 管道中运行 SageMaker 任务,或将现有的 SageMaker 管道转换为 DVC 管道。这样可以结合 SageMaker 任务的优势(例如每个阶段在独立的 EC2 实例上运行,并支持其他数据 输入模式)与 DVC 管道的优势(例如跳过未更改的阶段,以及跟踪每次运行的输入和输出)。SageMaker 要求所有输入和输出都存储在 S3 中,因此最简单的集成方式是使用 S3 存储,并利用 外部依赖项和输出。
示例:XGBoost 管道
例如,参见 https://github.com/iterative/sagemaker-pipeline,该项目将现有的 SageMaker 教程从笔记本改造成 DVC 管道。第一阶段(prepare
)下载数据并跟踪输出,避免每次运行时重复下载。我们将目标位置的 bucket
和 prefix
参数化到单独的 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
预处理脚本 接收 bucket
和 prefix
作为参数,其余部分直接从原始笔记本代码复制而来,该代码使用了 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
运行该管道的最终结果如下所示:
SageMaker 任务中的实时实验更新
SageMaker 任务在 Git 仓库之外运行,因此实验指标和图表不会自动被记录到仓库中。但你可以在 DVC Studio 中查看实时的实验更新。
首先,设置 DVC_STUDIO_TOKEN
和 DVC_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 进行部署的完整示例,请参阅我们的 博客文章。