本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 LCC 指令碼自訂 SageMaker 筆記本執行個體
重要
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授予許可,才能將標籤新增至這些資源。需要將標籤新增至資源的許可,因為 Studio 和 Studio Classic 會自動標記他們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源,但不允許標記,則嘗試建立資源時可能會發生「AccessDenied」錯誤。如需詳細資訊,請參閱提供標記 SageMaker AI 資源的許可。
AWS Amazon SageMaker AI 的 受管政策 提供建立 SageMaker 資源的許可,已包含建立這些資源時新增標籤的許可。
生命週期組態 (LCC) 提供 Shell 指令碼,只有在您建立筆記本執行個體時或每次啟動時才會執行。建立筆記本執行個體時,您可以建立新的 LCC 或連接您已擁有的 LCC。生命週期組態指令碼適用於下列使用案例:
-
在筆記本執行個體上安裝套件或範例筆記本
-
設定筆記本執行個體的網路和安全性
-
使用 shell 指令碼自訂筆記本執行個體
您也可以使用生命週期組態指令碼,從筆記本存取 AWS 服務。例如,您可以建立指令碼,讓您使用筆記本來控制其他 AWS 資源,例如 Amazon EMR 執行個體。
我們維護筆記本生命週期組態指令碼的公有儲存庫,以解決在 https://https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-config-samples
注意
每個指令碼限定最多只能包含 16384 個字元。
這兩個指令碼都可使用的 $PATH
環境變數的值是 /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
。工作目錄 ($PWD
環境變數的值) 是 /
。
在日誌串流 [notebook-instance-name]/[LifecycleConfigHook]
中的日誌群組 /aws/sagemaker/NotebookInstances
內檢視筆記本執行個體生命週期組態的 CloudWatch Logs。
指令碼無法執行超過 5 分鐘。如果指令碼執行超過 5 分鐘,就會開始故障,而無法建立或啟動筆記本執行個體。為了協助縮短指令碼的執行時間,請嘗試下列方法:
-
削減必要步驟。例如,限制在哪些 conda 環境中安裝大型套件。
-
在平行程序中執行任務。
-
在您的指令碼中使用
nohup
命令。
您可以在 SageMaker AI 主控台中選擇生命週期組態,以查看先前建立的筆記本執行個體生命週期組態清單。您可以在建立新的筆記本執行個體時連接筆記本執行個體 LCC。如需建立筆記本執行個體的更多相關資訊,請參閱建立 Amazon SageMaker 筆記本執行個體。
生命週期組態最佳實務
以下是使用生命週期組態的最佳實務:
重要
我們不建議在生命週期組態指令碼中儲存敏感資訊。
-
以
root
使用者身分執行生命週期組態。如果您的指令碼在/home/ec2-user/SageMaker
目錄中進行任何變更 (例如,使用pip
安裝套件),請使用sudo -u ec2-user
命令來指定以ec2-user
使用者身分執行。這是 Amazon SageMaker AI 執行的相同使用者。 -
SageMaker AI 筆記本執行個體使用
conda
環境來實作 Jupyter 筆記本的不同核心。如果您要安裝可供一或多個筆記本核心使用的套件服務,請使用conda
環境命令括住這些命令以安裝套件服務,這些環境命令會啟用包含核心的 conda 環境,而這些核心是您想要安裝套件服務的位置。例如,如果您只想要在
python3
環境中安裝套件服務件,請使用以下程式碼:#!/bin/bash sudo -u ec2-user -i <<EOF # This will affect only the Jupyter kernel called "conda_python3". source activate python3 # Replace
myPackage
with the name of the package you want to install. pip installmyPackage
# You can also perform "conda install" here as well. source deactivate EOF如果您想要在筆記本執行個體的所有 conda 環境中安裝套件服務,請使用下列程式碼:
#!/bin/bash sudo -u ec2-user -i <<EOF # Note that "base" is special environment name, include it there as well. for env in base /home/ec2-user/anaconda3/envs/*; do source /home/ec2-user/anaconda3/bin/activate $(basename "$env") # Installing packages in the Jupyter system environment can affect stability of your SageMaker # Notebook Instance. You can remove this check if you'd like to install Jupyter extensions, etc. if [ $env = 'JupyterSystemEnv' ]; then continue fi # Replace
myPackage
with the name of the package you want to install. pip install --upgrade --quietmyPackage
# You can also perform "conda install" here as well. source /home/ec2-user/anaconda3/bin/deactivate done EOF -
您必須將所有 Conda 環境儲存在預設環境資料夾 (/home/user/anaconda3/envs) 中。
重要
當您建立或變更指令碼時,建議您使用可提供 Unix 樣式分行符號的文字編輯器,例如您在建立筆記本時主控台所提供的文字編輯器。從非 Linux 作業系統複製文字可能會引進不相容的分行符號,並導致非預期的錯誤。