生成数据智能

利用 Amazon SageMaker Studio 本地模式和 Docker 支持加速 ML 工作流程 |亚马逊网络服务

日期:

我们很高兴地宣布两项新功能 亚马逊SageMaker Studio 这将加速机器学习 (ML) 从业者的迭代开发:本地模式和 Docker 支持。当开发人员在编码、训练和部署之间切换时,ML 模型开发通常会涉及缓慢的迭代周期。每个步骤都需要等待远程计算资源启动,这会延迟验证实现和获取更改反馈。

借助本地模式,开发人员现在可以直接在 SageMaker Studio 笔记本实例上训练和测试模型、调试代码并验证端到端管道,而无需启动远程计算资源。这将迭代周期从几分钟缩短到几秒钟,从而提高了开发人员的工作效率。 SageMaker Studio 笔记本中的 Docker 支持使开发人员能够轻松构建 Docker 容器并访问预构建的容器,从而在整个团队中提供一致的开发环境,并避免耗时的设置和依赖项管理。

本地模式和 Docker 支持提供了简化的工作流程,可使用在 SageMaker Studio 笔记本上运行的本地容器来验证代码更改和原型模型

实例。在这篇文章中,我们将指导您在 SageMaker Studio 中设置本地模式、运行示例训练作业以及在 亚马逊SageMaker 来自 SageMaker Studio 笔记本的端点。

SageMaker Studio 本地模式

SageMaker Studio 引入了本地模式,使您能够直接在 JupyterLab、代码编辑器或 SageMaker Studio Classic 笔记本实例上运行 SageMaker 训练、推理、批量转换和处理作业,而无需远程计算资源。使用本地模式的好处包括:

  • 在集成开发环境 (IDE) 中即时验证和测试工作流程
  • 通过本地运行更快地迭代较小规模的作业,以检查输出并尽早发现问题
  • 通过消除远程培训作业的等待,提高开发和调试效率
  • 在云中运行完整作业之前立即反馈代码更改

下图说明了在 SageMaker 上使用本地模式的工作流程。

在 SageMaker 上使用本地模式的工作流程

要使用本地模式,请设置 instance_type='local' 运行 SageMaker Python SDK 作业(例如训练和推理)时。这将在 SageMaker Studio IDE 使用的实例上运行它们,而不是配置云资源。

尽管分布式训练等某些功能仅在云中可用,但本地模式无需切换上下文以进行快速迭代。当您准备好利用 SageMaker 的全部功能和规模时,您可以在云中无缝运行您的工作流程。

SageMaker Studio 中的 Docker 支持

SageMaker Studio 现在还支持在 SageMaker Studio 笔记本实例上本地构建和运行 Docker 容器。这项新功能允许您在 SageMaker Studio 中构建和验证 Docker 映像,然后再将其用于 SageMaker 训练和推理。

下图说明了 SageMaker Studio 中的高级 Docker 编排架构。

SageMaker Studio 中的高级 Docker 编排架构

借助 SageMaker Studio 中的 Docker 支持,您可以:

  • 直接在 SageMaker Studio 中构建具有集成模型和依赖项的 Docker 容器
  • 无需外部 Docker 构建流程即可简化映像创建
  • 在将模型部署到生产环境之前,在本地运行容器以验证功能
  • 部署到 SageMaker 进行训练和托管时重用本地容器

尽管在撰写本文时不支持一些高级 Docker 功能(例如多容器和自定义网络),但核心构建和运行功能可用于加速开发容器以实现自带容器 (BYOC) 工作流程。

先决条件

要在 SageMaker Studio 应用程序中使用本地模式,您必须满足以下先决条件:

  • 用于从中提取图像 Amazon Elastic Container注册 (Amazon ECR),托管 ECR 映像的账户必须向用户提供访问权限 身份和访问管理 (IAM)角色。该域的角色还必须允许 Amazon ECR 访问。
  • 要启用本地模式和 Docker 功能,您必须设置 EnableDockerAccess 对于域的参数为 true DockerSettings 使用 AWS命令行界面 (AWS CLI)。这允许域中的用户使用本地模式和 Docker 功能。默认情况下,本地模式和 Docker 在 SageMaker Studio 中处于禁用状态。任何现有的 SageMaker Studio 应用程序都需要重新启动才能使 Docker 服务更新生效。以下是用于更新 SageMaker Studio 域的示例 AWS CLI 命令:
aws sagemaker --region <REGION> 
update-domain --domain-id <DOMAIN-ID> 
--domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}'

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:CompleteLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:InitiateLayerUpload",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage"
      ],
      "Resource": "arn:aws:ecr:us-east-2:123456789012:repository/<repositoryname>"
    },
    {
      "Effect": "Allow",
      "Action": "ecr:GetAuthorizationToken",
      "Resource": "*"
    }
  ]
}

使用本地模式在 SageMaker Studio 空间中运行 Python 文件

SageMaker Studio JupyterLab 和代码编辑器(基于 Code-OSS,Visual Studio Code – 开源),扩展了 SageMaker Studio,以便您可以使用流行的轻量级 IDE 编写、测试、调试和运行分析和机器学习代码。有关如何开始使用 SageMaker Studio IDE 的更多详细信息,请参阅 提高 Amazon SageMaker Studio 的工作效率:JupyterLab Spaces 和生成式 AI 工具简介新功能 – 基于 Code-OSS VS Code Open Source 的代码编辑器现已在 Amazon SageMaker Studio 中提供. 完成以下步骤:

使用本地模式在 SageMaker Studio 空间中运行 Python 文件 使用本地模式在 SageMaker Studio 空间中运行 Python 文件

  • 创建一个新终端。  使用本地模式在 SageMaker Studio 空间中运行 Python 文件 使用本地模式在 SageMaker Studio 空间中运行 Python 文件
  • 按照以下说明安装 Docker CLI 和 Docker Compose 插件 GitHub回购。如果链接的命令失败,请一次运行一个命令。

使用本地模式在 SageMaker Studio 空间中运行 Python 文件 使用本地模式在 SageMaker Studio 空间中运行 Python 文件 您必须将 SageMaker SDK 更新到最新版本。

  • 运行 pip install sagemaker -Uq 在终端。

仅对于代码编辑器,您需要将Python环境设置为在当前终端中运行。

  • 在代码编辑器中,在 “文件”菜单¸选择 优先个人设置.

使用本地模式在 SageMaker Studio 空间中运行 Python 文件

  • 搜索并选择 终端:在文件目录中执行.

使用本地模式在 SageMaker Studio 空间中运行 Python 文件

  • 在代码编辑器或 JupyterLab 中,打开 scikit_learn_script_mode_local_training_and_serving 文件夹并运行 scikit_learn_script_mode_local_training_and_serving.py 文件中。

您可以通过选择来运行脚本 运行 在代码编辑器中或在 JupyterLab 终端中使用 CLI。 使用本地模式在 SageMaker Studio 空间中运行 Python 文件 使用本地模式在 SageMaker Studio 空间中运行 Python 文件 您将能够看到模型是如何在本地训练的。然后,您将模型部署到本地 SageMaker 终端节点,并计算均方根误差 (RMSE). 使用本地模式在 SageMaker Studio 空间中运行 Python 文件 使用本地模式在 SageMaker Studio 空间中运行 Python 文件

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

您还可以使用 SageMaker Studio Classic 中的笔记本在其上运行小规模训练作业 CIFAR10 使用本地模式,在本地部署模型并执行推理。

设置笔记本

要设置笔记本,请完成以下步骤:

  • 打开 SageMaker Studio Classic 并克隆以下内容 GitHub回购.

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 打开 pytorch_local_mode_cifar10.ipynb notebook in blog/pytorch_cnn_cifar10.

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 针对 图片,选择 PyTorch 2.1.0 Python 3.10 CPU Optimized.

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理 确认您的笔记本显示正确的实例和内核选择。 使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 通过选择打开终端 启动终端 在当前 SageMaker 映像中。

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 按照以下说明安装 Docker CLI 和 Docker Compose 插件 GitHub回购.

由于您使用的是 SageMaker Studio Classic 中的 Docker,因此在运行命令时请删除 sudo,因为终端已在超级用户下运行。对于 SageMaker Studio Classic,安装命令取决于 SageMaker Studio 应用程序映像操作系统。例如,基于 DLC 的框架映像是基于 Ubuntu 的,其中以下指令将起作用。但是,对于基于 Debian 的映像(例如 DataScience Images),您必须遵循以下说明 GitHub回购。如果链接的命令失败,请一次运行一个命令。您应该会看到显示的 Docker 版本。 使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 让终端窗口保持打开状态,返回到笔记本,然后开始逐个单元地运行它。

确保运行单元格 pip install -U sagemaker 因此您使用的是最新版本的 SageMaker Python SDK。

本地培训

当您开始运行本地 SageMaker 训练作业时,您将看到以下日志行:

INFO:sagemaker.local.image:'Docker Compose' found using Docker CLI.
INFO:sagemaker.local.local_session:Starting training job

这表明训练是使用 Docker 在本地运行的。

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

期间请保持耐心 pytorch-training:2.1-cpu-py310 Docker 镜像已拉取。由于其大小较大 (5.2 GB),因此可能需要几分钟的时间。

Docker 映像将存储在 SageMaker Studio 应用程序实例的根卷中,最终用户无法访问该根卷。访问 Docker 镜像并与之交互的唯一方法是通过公开的 Docker API 操作。

从用户保密的角度来看,SageMaker Studio 平台永远不会访问或存储用户特定的图像。

训练完成后,您将能够看到以下成功日志行:

8zlz1zbfta-sagemaker-local exited with code 0
Aborting on container exit...
Container 8zlz1zbfta-sagemaker-local  Stopping
Container 8zlz1zbfta-sagemaker-local  Stopped
INFO:sagemaker.local.image:===== Job Complete =====

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

局部推理

完成以下步骤:

  • 使用 SageMaker 本地模式部署 SageMaker 终端节点。

期间请保持耐心 pytorch-inference:2.1-cpu-py310 Docker 镜像已拉取。由于其大小较大 (4.32 GB),因此可能需要几分钟的时间。

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 使用测试映像调用本地部署的 SageMaker 端点。

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

您将能够看到预测的类别:青蛙、船舶、汽车和飞机:

Predicted:  frog ship  car plane

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 由于 SageMaker Local 端点仍处于运行状态,因此导航回打开的终端窗口并列出正在运行的容器:

docker ps

你将能够看到正在运行的 pytorch-inference:2.1-cpu-py310 支持 SageMaker 端点的容器。

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 要关闭 SageMaker 本地终端节点并停止正在运行的容器(因为您一次只能运行一个本地终端节点),请运行清理代码。

使用本地模式在 SageMaker Studio Classic 中模拟训练和推理

  • 要确保 Docker 容器已关闭,您可以导航到打开的终端窗口,运行 docker ps,并确保没有正在运行的容器。
  • 如果您看到容器正在运行,请运行 docker stop <CONTAINER_ID> 阻止它。

使用 SageMaker 本地模式的提示

如果您是第一次使用 SageMaker,请参阅 训练机器学习模型。要了解有关使用 SageMaker 部署推理模型的更多信息,请参阅 部署模型进行推理.

请记住以下建议:

  • 打印输入和输出文件和文件夹以了解数据集和模型加载
  • 使用 1-2 个 epoch 和小数据集进行快速测试
  • 在 Dockerfile 中预安装依赖项以优化环境设置
  • 隔离端点中的序列化代码以进行调试

将 Docker 安装配置为生命周期配置

您可以将 Docker 安装过程定义为生命周期配置 (LCC) 脚本,以简化每次新 SageMaker Studio 空间启动时的设置。 LCC 是 SageMaker 在空间创建等事件期间运行的脚本。请参阅 Jupyter实验室, 代码编辑器SageMaker Studio 经典版 LCC 设置(使用 docker安装cli 作为参考)以了解更多信息。

将 Docker 安装配置为生命周期配置

将 Docker 安装配置为生命周期配置

在 SageMaker Studio 空间中构建和测试自定义 Docker 映像

在此步骤中,您将在 JupyterLab(或代码编辑器)应用程序空间内安装 Docker,并使用 Docker 通过 SageMaker Studio 空间构建、测试和发布自定义 Docker 映像。空间用于管理某些 SageMaker Studio 应用程序的存储和资源需求。每个空间与应用程序的实例具有 1:1 的关系。创建的每个受支持的应用程序都有自己的空间。要了解有关 SageMaker 空间的更多信息,请参阅 提高 Amazon SageMaker Studio 的工作效率:JupyterLab Spaces 和生成式 AI 工具简介。确保配置至少具有 30 GB 存储空间的新空间,以便为 Docker 映像和工件提供足够的存储空间。

在空间内安装 Docker

要在 JupyterLab 空间中安装 Docker CLI 和 Docker Compose 插件,请运行以下命令 GitHub回购。 SageMaker工作室 仅支持 Docker 版本 20.10.X.

构建 Docker 镜像

要确认 Docker 已安装并在 JupyterLab 空间内运行,请运行以下代码:

# to verify docker service
sagemaker-user@default:~$ docker version
Client: Docker Engine - Community
Version:           24.0.7
API version:       1.41 (downgraded from 1.43)
Go version:        go1.20.10
Git commit:        afdd53b
Built:             Thu Oct 26 09:07:41 2023
OS/Arch:           linux/amd64
Context:           default

Server:
Engine:
Version:          20.10.25
API version:      1.41 (minimum version 1.12)
Go version:       go1.20.10
Git commit:       5df983c
Built:            Fri Oct 13 22:46:59 2023
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          1.7.2
GitCommit:        0cae528dd6cb557f7201036e9f43420650207b58
runc:
Version:          1.1.7
GitCommit:        f19387a6bec4944c770f7668ab51c4348d9c2f38
docker-init:
Version:          0.19.0
GitCommit:        de40ad0

要在 JupyterLab(或代码编辑器)空间内构建自定义 Docker 映像,请完成以下步骤:

  • 创建一个空的 Dockerfile:

touch Dockerfile

  • 使用以下命令编辑 Dockerfile,从托管的基础 python:3.10.13-bullseye 映像创建一个简单的 Flask Web 服务器映像 Docker中心:
# Use the specified Python base image
FROM python:3.10.13-bullseye

# Create a code dir
RUN mkdir /code/

# Set the working directory in the container
WORKDIR /code

# Upgrade pip and install required packages
RUN python3 -m pip install --upgrade pip && 
python3 -m pip install flask

# Copy the app.py file to the container
COPY app.py /code/

# Set the command to run the app
ENTRYPOINT ["python", "app.py"]

以下代码显示了示例 Flask 应用程序文件的内容 app.py:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def hello():
return jsonify({"response": "Hello"})

if __name__ == '__main__':
app.run(host='0.0.0.0', port=6006)

此外,您可以更新参考 Dockerfile 命令以包含您选择的包和工件。

  • 使用参考 Dockerfile 构建 Docker 映像:

docker build --network sagemaker --tag myflaskapp:v1 --file ./Dockerfile .

包括 --network sagemaker 在 docker build 命令中,否则构建将失败。容器无法在 Docker 默认网桥或自定义 Docker 网络中运行。容器与 SageMaker Studio 应用程序容器在同一网络中运行。用户只能使用 sagemaker 作为网络名称。

  • 构建完成后,验证映像是否存在。将构建重新标记为 ECR 映像并推送。如果遇到权限问题,请运行 aws ecr get-login-password... 命令并尝试重新运行 Docker 推/拉:
sagemaker-user@default:~$ docker image list
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
myflaskapp      v1        d623f1538f20   27 minutes ago   489MB

sagemaker-user@default:~$ docker tag myflaskapp:v1 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

sagemaker-user@default:~$ docker image list
REPOSITORY                                                  TAG       IMAGE ID       CREATED          SIZE
123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp     latest    d623f1538f20   27 minutes ago   489MB
myflaskapp                                                  v1        d623f1538f20   27 minutes ago   489MB

sagemaker-user@default:~$ aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

sagemaker-user@default:~$ docker push 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:latest

测试 Docker 镜像

在 JupyterLab(或代码编辑器)SageMaker Studio 空间中安装 Docker,您可以将预构建或自定义 Docker 映像作为容器(或容器化应用程序)进行测试。在本部分中,我们使用 docker run 命令在 SageMaker Studio 空间内配置 Docker 容器,以测试 REST Web 服务和 Python 脚本等容器化工作负载。完成以下步骤:

sagemaker-user@default:~$ docker image list
REPOSITORY                                                  TAG       IMAGE ID       CREATED       SIZE

  • 如果测试镜像不存在,请运行 docker pull 将镜像拉取到本地计算机:

sagemaker-user@default:~$ docker pull 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

  • 如果遇到身份验证问题,请运行以下命令:

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

  • 创建一个容器来测试您的工作负载:

docker run --network sagemaker 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

这将启动一个新的容器实例并运行使用 Docker 的 ENTRYPOINT 定义的应用程序:

sagemaker-user@default:~$ docker run --network sagemaker 905418447590.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:6006
* Running on http://169.255.255.2:6006

  • 要测试您的 Web 端点是否处于活动状态,请导航至 URL https://<sagemaker-space-id>.studio.us-east-2.sagemaker.aws/jupyterlab/default/proxy/6006/.

您应该看到类似于以下屏幕截图的 JSON 响应。

将 Docker 安装配置为生命周期配置

清理

为了避免产生不必要的费用,请删除您在运行本文中的示例时创建的资源:

  1. 在您的 SageMaker Studio 域中,选择 经典工作室 在导航窗格中,然后选择 Stop 停止.
  2. 在您的 SageMaker Studio 域中,选择 Jupyter实验室 or 代码编辑器 在导航窗格中,选择您的应用程序,然后选择 Stop 停止.

结论

SageMaker Studio 本地模式和 Docker 支持使开发人员能够在不离开工作空间的情况下更快地构建、测试和迭代 ML 实施。通过提供对测试环境和输出的即时访问,这些功能可以优化工作流程并提高生产力。使用我们的试用 SageMaker Studio 本地模型和 Docker 支持 快速板载功能,它允许您在几分钟内为单个用户启动一个新域。 在评论部分分享你的想法!


作者简介

舒塔·辛格(Shweta Singh)舒塔·辛格(Shweta Singh) 是 AWS Amazon SageMaker 机器学习 (ML) 平台团队的高级产品经理,负责领导 SageMaker Python SDK。她在亚马逊担任过多个产品职位超过 5 年。她拥有纽约大学计算机工程理学学士学位和金融工程理学硕士学位

埃坦·塞拉(Eitan Sela)埃坦·塞拉(Eitan Sela) 是 AWS 的生成式 AI 和机器学习专家解决方案架构师。他与 AWS 客户合作,提供指导和技术援助,帮助他们在 AWS 上构建和运营生成式 AI 和机器学习解决方案。业余时间,Eitan 喜欢慢跑和阅读最新的机器学习文章。

普拉纳夫·穆尔蒂普拉纳夫·穆尔蒂 是 AWS 的 AI/ML 专家解决方案架构师。 他专注于帮助客户构建、训练、部署机器学习 (ML) 工作负载并将其迁移到 SageMaker。 他之前曾在半导体行业工作,开发大型计算机视觉 (CV) 和自然语言处理 (NLP) 模型,以使用最先进的 ML 技术改进半导体工艺。 空闲时间,他喜欢下棋和旅行。 您可以在以下位置找到普拉纳夫: LinkedIn.

穆法达尔·罗哈瓦拉穆法达尔·罗哈瓦拉 是 AWS 的软件工程师。他负责 Amazon SageMaker 的 SageMaker Python SDK 库。业余时间,他喜欢旅行、户外活动,并且是一名足球迷。

现货图片

最新情报

现货图片

在线答疑

你好呀! 我怎么帮你?