如何在 SageMaker Studio 中使用 Amazon SageMaker Python SDK 本地模式?
我想在 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_CONTENT 和 LCC_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,并且没有 pgrep 或 procps 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 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 6 个月前
- AWS 官方已更新 1 年前