如何在 SageMaker Studio 中使用 Amazon SageMaker Python SDK 本地模式?

3 分钟阅读
0

我想在 SageMaker Studio 中使用 Amazon SageMaker Python SDK 本地模式。

简短描述

安装 SageMaker Studio Docker CLI 和(可选)SageMaker Studio Docker UI 扩展,以将本地模式和 Docker 功能添加到 SageMaker Studio。

解决方法

先决条件

在开始之前,请务必完成以下操作:

  • 您的 SageMaker Studio 域设置处于 VpcOnly 模式(请注意,不支持 PublicInternetOnly 模式)。
  • 您的域已连接到 Amazon VPC,并且已启用 DNS 主机名和 DNS 解析选项。
  • 您的 SageMaker Studio 用户配置文件执行角色具有以下权限:
sagemaker:DescribeDomain
sagemaker:DescribeUserProfile
sagemaker:ListTags
elasticfilesystem:DescribeMountTargets
elasticfilesystem:DescribeMountTargetSecurityGroups
elasticfilesystem:ModifyMountTargetSecurityGroups
ec2:RunInstances
ec2:TerminateInstances
ec2:DescribeInstances
ec2:DescribeInstanceTypes
ec2:DescribeImages
ec2:DescribeSecurityGroups
ec2:DescribeNetworkInterfaces
ec2:DescribeNetworkInterfaceAttribute
ec2:CreateSecurityGroup
ec2:AuthorizeSecurityGroupIngress
ec2:ModifyNetworkInterfaceAttribute
ec2:CreateTags
  • 您已安装 Docker CLI 扩展。(请注意,使用 UI 扩展需要 Docker CLI。)
  • 您已安装 Docker Compose
  • 您已安装 PpYAML 5.4.1

创建 SageMaker Studio 生命周期配置脚本

1.    为 JupyterServer 应用程序创建 Studio 生命周期配置脚本,以通过以下两种方式之一安装扩展:

安装 CLI 和 UI 扩展

#!/bin/bash

set -ex
cd ~
if cd sagemaker-studio-docker-cli-extension
then
  git reset --hard
  git pull
else
  git clone https://github.com/aws-samples/sagemaker-studio-docker-cli-extension.git
  cd sagemaker-studio-docker-cli-extension
fi
nohup ./setup.sh > docker_setup.out 2>&1 &
if cd ~/sagemaker-studio-docker-ui-extension
then
  git reset --hard
  git pull
  cd
else
  cd
  git clone https://github.com/aws-samples/sagemaker-studio-docker-ui-extension.git
fi

nohup ~/sagemaker-studio-docker-ui-extension/setup.sh > docker_setup.out 2>&1 &

仅安装 CLI 扩展

#!/bin/bash

set -ex
cd ~
if cd sagemaker-studio-docker-cli-extension
then
 git reset --hard
 git pull
else
 git clone https://github.com/aws-samples/sagemaker-studio-docker-cli-extension.git
 cd sagemaker-studio-docker-cli-extension
fi
nohup ./setup.sh > docker_setup.out 2>&1 &

2.    为 KernelGateway 应用程序创建 SageMaker Studio 生命周期配置脚本:

#!/bin/bash

set -eux
STATUS=$(python3 -c "import sagemaker_dataprep";echo $?)
if [ "$STATUS" -eq 0 ]
then
 echo 'Instance is of Type Data Wrangler'
else
 echo 'Instance is not of Type Data Wrangler'
 cd ~
 if cd sagemaker-studio-docker-cli-extension
 then
  git reset --hard
  git pull
 else
  git clone https://github.com/aws-samples/sagemaker-studio-docker-cli-extension.git
  cd sagemaker-studio-docker-cli-extension
 fi
 nohup ./setup.sh > docker_setup.out 2>&1 &
fi

3.    在终端上,使用 base64 编码对这两个脚本内容进行编码:

$ LCC_JS_CONTENT=`openssl base64 -A -in <LifeCycle script file for JupyterServer>`
$ LCC_KG_CONTENT=`openssl base64 -A -in <LifeCycle script file for KernelGateway>`

4.    使用以下 AWS 命令​​行界面(CLI)命令从环境变量 LCC_JS_CONTENTLCC_KG_CONTENT 创建 Studio 生命周期配置:

$ aws sagemaker create-studio-lifecycle-config --studio-lifecycle-config-name sdocker-js --studio-lifecycle-config-content $LCC_JS_CONTENT --studio-lifecycle-config-app-type JupyterServer
$ aws sagemaker create-studio-lifecycle-config --studio-lifecycle-config-name sdocker-kg --studio-lifecycle-config-content $LCC_KG_CONTENT --studio-lifecycle-config-app-type KernelGateway

**注意:**如果您在运行 CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。请参阅排查 AWS CLI 错误 - AWS 命令行界面

更新 Studio 域(可选)

更新 Studio 域以将 LCC 添加到默认用户设置:

$ aws sagemaker update-domain --domain-id <domain-id> --default-user-settings '{"JupyterServerAppSettings": {"DefaultResourceSpec": {"InstanceType": "system", "LifecycleConfigArn": "arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-js"}}, "KernelGatewayAppSettings": {"DefaultResourceSpec": {"InstanceType": "<default instance type>", "LifecycleConfigArn": "arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-kg"}}}'

更新 Studio 用户配置文件

按如下所示更新您的 Studio 用户配置文件设置:

$ aws sagemaker update-user-profile --domain-id <domain-id> --user-profile-name <user profile> --user-settings '{"JupyterServerAppSettings ": {"DefaultResourceSpec": {"InstanceType": "system", "LifecycleConfigArn": "arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-js"}, "LifecycleConfigArns": ["arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-js"]}, "KernelGatewayAppSettings": {"DefaultResourceSpec": {"InstanceType": "<default instance type>", "LifecycleConfigArn": "arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-kg"}, "LifecycleConfigArns": ["arn:aws:sagemaker:<region>:<AWS account ID>:studio-lifecycle-config/sdocker-kg"]}}'

启动新的 JuypterServer 应用程序

删除 JupyterServer 应用程序的任何正在运行的实例以完成配置。然后,启动新的 JupyterServer 应用程序。完成后,新应用程序将显示 InService(正在运行)状态。

如果您使用的是 UI 扩展,请等待它安装。在启动新的 JupyterServer 应用程序后,这需要大约 10 分钟。完成后,请刷新浏览器以查看扩展。

**(可选)**某些 Studio 内核附带了 PyYAML>=6.0,并且没有 pgrepprocps Python 程序包。本地模式需要 PyYAML==5.4.1,因为更高版本会中断此功能。此外,需要使用 pgrep 来删除本地端点。如果需要,请使用以下命令从 Studio Notebook 安装这些要求。安装完成后重新启动内核。

!conda update --force -y conda
!conda install -y pyyaml==5.4.1
!apt-get install -y procps

创建 Docker 主机

现在,使用您之前安装的 CLI 扩展来创建 Docker 主机。按如下方式使用任何 Amazon Elastic Compute Cloud(EC2)实例类型(例如 c5.xlarge):

!sdocker create-host --instance-type c5.xlarge

输出必须与以下内容类似:

Successfully launched DockerHost on instance i-xxxxxxxxxxxxxxxxx with private DNS ip-xxx-xxx-xxx-xxx.ec2.internal
Waiting on docker host to be ready
Docker host is ready!
ip-xxx-xxx-xxx-xxx.ec2.internal
Successfully created context "ip-xxx-xxx-xxx-xxx.ec2.internal "
ip-xxx-xxx-xxx-xxx.ec2.internal
Current context is now "ip-xxx-xxx-xxx-xxx.ec2.internal "

如果您已安装 UI 扩展,请从 UI 中选择实例类型,然后选择 Start Host(启动主机)按钮。新主机将显示在 Docker Hosts(Docker 主机)列表中,绿色圆圈旁边。

在本地模式下运行

在本地模式下使用 SageMaker Python SDK。

**重要提示:**为避免额外收费,请关闭在完成本地模式后启动且不再需要使用 Docker 的任何 Docker 主机。要使用 CLI 扩展关闭 Docker 主机,请输入:

!sdocker terminate-current-host

或者,在 UI 扩展的 Docker Hosts(Docker 主机)下,选择每个 Docker 主机旁边的电源图标。此操作会关闭 Docker 主机并将其从 Docker Hosts(Docker 主机)列表中删除。

**注意:**有关如何使用 CLI 扩展的更多信息,请参阅 GitHub 网站上的 SageMaker Docker CLI 扩展 - SageMaker Studio 的 Docker 集成


AWS 官方
AWS 官方已更新 3 个月前