跳至內容

如何對 Amazon SageMaker AI 中生命週期組態指令碼的問題進行疑難排解?

2 分的閱讀內容
0

我想對 Amazon SageMaker AI 中生命週期組態 (LCC) 指令碼的問題進行疑難排解。

解決方法

LCC 指令碼逾時

LCC 指令碼的執行時間超過 5 分鐘的配額時,指令碼就會逾時。

若要減少指令碼執行時期,請執行以下動作:

  • 減少必要的步驟數量。例如,限制在哪些 conda 環境中安裝大型套件。
  • 以平行程序執行任務。
  • 在指令碼中執行 nohup 命令以忽略掛斷訊號,讓指令碼能在 5 分鐘內執行完畢。

若要執行 nohup 命令,請在特定程式碼行上初始化該命令,然後以 & 符號結束該程式碼行。

指令碼範例:

===
#!/bin/bash

set -e

# OVERVIEW
# This script executes an existing Notebook file on the instance during start using nbconvert(https://github.com/jupyter/nbconvert)

# PARAMETERS

ENVIRONMENT=python3
NOTEBOOK_FILE=/home/ec2-user/SageMaker/test.ipynb

source /home/ec2-user/anaconda3/bin/activate "$ENVIRONMENT"
nohup jupyter nbconvert --to notebook --ExecutePreprocessor.timeout=-1 --ExecutePreprocessor.kernel_name=python3 --execute "$NOTEBOOK_FILE" &

source /home/ec2-user/anaconda3/bin/deactivate

====

您無法刪除現有的 LLC

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

當您嘗試刪除已附加至 SageMaker Studio 網域的 LCC 指令碼時,可能會收到以下錯誤訊息:

"Loading of domain lifecycle failed. [400] ResourceNotFound: LifecycleConfig does not exist."

若要解決此問題,您必須先卸除 LCC 指令碼,然後再將其刪除。

或者,您可以將網域組態中的 LifecycleConfigArns 參數設定為空清單。

若要重新設定您的網域,請完成以下步驟:

  1. 執行以下 describe-domain 命令,查看 LifecycleConfigArns 參數中關聯的 LCC 指令碼清單:

    aws sagemaker describe-domain —domain-id d-xxxxxxxxx
  2. 執行以下 update-domain 命令,將參數設定為空清單:

    aws sagemaker update-domain --domain-id d-xxxxxxxxx \
    --default-user-settings '{
      "JupyterServerAppSettings": {
        "DefaultResourceSpec": {
          "InstanceType": "system"
        },
        "LifecycleConfigArns": []
      }
    }'

當您再次執行 update-domain 命令時,該網域將不再參考該 LCC 指令碼。然後,您可以將新的 LCC 指令碼附加到網域。

LCC 指令碼無法安裝套件

如果 LCC 無法在 SageMaker Studio 網域或筆記本執行個體中安裝套件,可能是因為該 LCC 指令碼無法存取該網域或執行個體。若要解決此問題,您必須將關聯的 SageMaker Studio 網域或筆記本執行個體連線至 Amazon 虛擬私有雲端 (VPC)。VPC 還必須允許網路存取。

您可以在 PublicInternetOnly 模式下,將 VPC 與網際網路上的預設通訊建立關聯。或者,您可以在僅限 VPC 模式下設定與網際網路的通訊。

如果您使用僅限 VPC 模式,請設定安全群組,其中包含允許下列流量的傳入和傳出規則:

  • 網域和 Amazon Elastic File System (Amazon EFS) 磁碟區之間透過連接埠 2049 上的 TCP 傳輸 NFS 流量。
  • 安全群組內的 TCP 流量。
    **注意:**安全群組中的 TCP 流量需要連線 Jupyter Server 應用程式和 Kernel Gateway 應用程式。您必須允許至少 8192 到 65535 範圍內的連接埠存取。

若要允許網際網路存取,您必須使用可以存取網際網路的 NAT 閘道。

執行個體無法找到 LCC 指令碼的內容

當應用程式執行個體無法找到 LCC 指令碼中的內容時,您可能會收到以下錯誤訊息:

"stdbuf: failed to run command "/opt/ml/lifecycleconfig/lifecycle_script.sh": No such file or directory"

此錯誤可能是由於 Windows 格式的符號與 Unix 格式的符號不相容所導致。Window 字元使用 CRLF 換行結尾 (\r\n),而 Unix 使用 LF 換行結尾 (\n)。

Amazon SageMaker AI 筆記本執行個體在 Amazon Linux 2 (AL2) 作業系統 (OS) 上執行。您在 Windows 作業系統上下載並直接附加到 LLC 的 LCC bash 指令碼,對 Linux 作業系統無效。

若要解決此問題,請完成以下步驟:

  1. 在 Notepad++ 中開啟 bash 指令碼。
  2. 選擇 View (檢視),然後選擇 Show symbol (顯示符號)。
  3. 選擇 Show all symbols (顯示所有符號) 以查看 Windows (\r\n) 換行結尾。
  4. 將 CRLF 變更為 LF (\n),以使指令碼在 Unix 中有效。
  5. 將指令碼附加到 LCC。

相關資訊

偵錯生命週期組態

將 VPC 中的 Studio 筆記本連線到外部資源

AWS 官方已更新 1 年前