使用 LCC 指令碼自訂 SageMaker 筆記本執行個體 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 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 install myPackage # 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 --quiet myPackage # 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 作業系統複製文字可能會引進不相容的分行符號,並導致非預期的錯誤。