如何將 Amazon SageMaker Python SDK 本機模式搭配 SageMaker Studio 一起使用?

上次更新日期:2022 年 12 月 15 日

我想將 Amazon SageMaker Python SDK 本機模式搭配 SageMaker Studio 一起使用。

簡短說明

安裝 SageMaker Studio Docker CLI 和 (選用) SageMaker Studio Docker UI 延伸模組,以便在 SageMaker Studio 中新增本機模式和 Docker 功能。

解決方案

先決條件

在開始之前,請務必達到下列先決條件:

  • 您的 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 延伸模組。(請注意,一定要有 Docker CLI 才能使用 UI 延伸模組。)
  • 您已安裝 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 Command Line Interface (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 Command Line Interface

更新 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 筆記本安裝這些必要元件。安裝完成後,請重新啟動核心。

!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 選取執行個體類型,然後選擇啟動主機按鈕。新主機會出現在 Docker 主機清單中,旁邊會顯示一個綠色圓圈。

以本機模式執行

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

重要事項:為避免產生額外費用,請在本機模式使用完畢且再也不需要使用 Docker 後,關閉您啟動的所有 Docker 主機。若要使用 CLI 延伸模組關閉 Docker 主機,請輸入:

!sdocker terminate-current-host

或者,在 UI 延伸模組中的 Docker 主機底下,選擇每個 Docker 主機旁邊的電源圖示。此動作會關閉 Docker 主機,並將其從 Docker 主機清單中移除。

注意:如需有關如何使用 CLI 延伸模組的詳細資訊,請參閱 GitHub 網站上的 SageMaker Studio Docker CLI extension - Docker integration for SageMaker Studio (SageMaker Docker CLI 延伸模組 – 適用於 SageMaker Studio 的 Docker 整合)。


此文章是否有幫助?


您是否需要帳單或技術支援?