生命週期組態偵錯 - Amazon SageMaker

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

生命週期組態偵錯

重要

截至 2023 年 11 月 30 日,以前的 Amazon SageMaker 工作室體驗現在被命名為 Amazon SageMaker 工作室經典。下面的部分是特定於使用 Studio 傳統版應用程序。如需使用更新後的 Studio 體驗的相關資訊,請參閱Amazon SageMaker 一室

下列主題示範如何取得生命週期組態的相關資訊和偵錯。

從 CloudWatch 記錄確認生命週期組態程序

生命週期組態僅記錄 STDOUTSTDERR

STDOUT 是 bash 指令碼的預設輸出。您可以寫入 STDERR,只要把 >&2 附加到 bash 命令的末端。例如:echo 'hello'>&2

您的生命週期組態的日誌會發佈到您 AWS 帳戶 使用 Amazon CloudWatch。這些日誌可以在 CloudWatch 控制台的日/aws/sagemaker/studio誌流中找到。

  1. 在開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 從左側選擇日誌。從下拉式清單中,選擇日誌群組

  3. 日誌群組頁面上,搜尋 aws/sagemaker/studio

  4. 選取日誌群組。

  5. 日誌群組詳細資訊頁面上,選擇日誌串流索引標籤。

  6. 若要尋找特定應用程式的日誌,請使用下列格式搜尋日誌串流:

    domain-id/user-profile-name/app-type/app-name

    例如,若要尋找網域 d-m85lcu8vbqmz、使用者設定檔 i-sonic-js、應用程式類型 JupyterServer 和應用程式名稱 test-lcc-echo 的生命週期組態日誌,請使用下列搜尋字串:

    d-m85lcu8vbqmz/i-sonic-js/JupyterServer/test-lcc-echo
  7. 選取附加 LifecycleConfigOnStart 的日誌串流,以檢視指令碼執行日誌。

JupyterServer 應用失敗

如果您的 JupyterServer 應用程式因為附加的生命週期設定發生問題而當機,Studio 經典版會在 Studio 典型啟動畫面上顯示下列錯誤訊息。

Failed to create SageMaker Studio due to start-up script failure

選取View script logs連結以檢視 JupyterServer 應用程式的 CloudWatch 記錄。

在您的網域、使用者設定檔或共用空間中指定錯誤DefaultResourceSpec的生命週期組態的情況下,即使重新啟動 Studio Classic,Studio 經典版仍會繼續使用生命週期設定。

若要解決此錯誤,請依照 設定預設的生命週期組態 中的步驟從 DefaultResourceSpec 移除生命週期組態指令碼,或選取其他指令碼作為預設值。然後啟動一個新的 JupyterServer 應用程序。

KernelGateway 應用失敗

如果您的 KernelGateway 應用程式因為附加的生命週期組態發生問題而當機,Studio 經典版會在您的工作室傳統筆記本中顯示錯誤訊息。

選擇View script logs查看 KernelGateway應用程序的 CloudWatch 日誌。

在這種情況下,啟動新的 Studio 經典筆記本時,您的生命週期配置是在 Studio 傳統啟動器中指定的。

若要解決此錯誤,請使用 Studio 傳統版啟動器來選取不同的生命週期組態,或選取No script

注意

中指定的預設 KernelGateway 生命週期組態會DefaultResourceSpec套用至網域、使用者設定檔或共用空間中的所有 KernelGateway 映像,除非使用者從 Studio Classic 啟動器中顯示的清單中選取不同的指令碼。如果使用者選擇 No Script,預設指令碼也會執行。如需選擇指令碼的更多資訊,請參閱步驟 3:使用生命週期組態啟動應用程式

生命週期組態逾時

生命週期組態逾時限制為 5 分鐘。如果生命週期設定指令碼的執行時間超過 5 分鐘,則 Studio 經典型會擲回錯誤。

若要解決此錯誤,請確定您的生命週期組態指令碼在 5 分鐘內完成。

為了協助縮短指令碼的執行時間,請嘗試下列方法:

  • 削減必要步驟。例如,限制在哪些 conda 環境中安裝大型套件。

  • 在平行程序中執行任務。

  • 使用指令碼中的 nohup 命令來確保掛斷信號被忽略,並且不會停止指令碼的執行。