本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
生命週期組態偵錯
重要
截至 2023 年 11 月 30 日,先前的 Amazon SageMaker Studio 體驗現在已命名為 Amazon SageMaker Studio Classic。以下章節是使用 Studio Classic 應用程式的特定部分。如需使用更新 Studio 體驗的相關資訊,請參閱 Amazon SageMaker Studio。
下列主題示範如何取得生命週期組態的相關資訊和偵錯。
從 CloudWatch 日誌驗證生命週期組態程序
生命週期組態僅記錄 STDOUT
和 STDERR
。
STDOUT
是 bash 指令碼的預設輸出。您可以寫入 STDERR
,只要把 >&2
附加到 bash 命令的末端。例如:echo 'hello'>&2
。
生命週期組態的日誌會使用 AWS 帳戶 Amazon 發佈至您的 CloudWatch。這些日誌可在 CloudWatch 主控台的/aws/sagemaker/studio
日誌串流中找到。
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 從左側選擇日誌。從下拉式清單中,選擇日誌群組。
在日誌群組頁面上,搜尋
aws/sagemaker/studio
。-
選取日誌群組。
在日誌群組詳細資訊頁面上,選擇日誌串流索引標籤。
若要尋找特定應用程式的日誌,請使用下列格式搜尋日誌串流:
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
-
選取附加
LifecycleConfigOnStart
的日誌串流,以檢視指令碼執行日誌。
JupyterServer 應用程式失敗
如果您的 JupyterServer 應用程式因為連接生命週期組態的問題而當機,Studio Classic 會在 Studio Classic 啟動畫面上顯示下列錯誤訊息。
Failed to create SageMaker Studio due to start-up script failure
選取View script logs
連結以檢視 JupyterServer 應用程式的 CloudWatch 日誌。
如果網域、使用者設定檔或共用空間DefaultResourceSpec
的 中指定了故障的生命週期組態,則即使在重新啟動 Studio Classic 之後,Studio Classic 仍會繼續使用生命週期組態。
若要解決此錯誤,請依照 設定預設的生命週期組態 中的步驟從 DefaultResourceSpec
移除生命週期組態指令碼,或選取其他指令碼作為預設值。然後啟動新的 JupyterServer 應用程式。
KernelGateway 應用程式失敗
如果您的 KernelGateway 應用程式因為連接生命週期組態的問題而當機,Studio Classic 會在 Studio Classic Notebook 中顯示錯誤訊息。
選擇View script logs
檢視應用程式的 CloudWatch 日誌 KernelGateway。
在此情況下,啟動新的 Studio Classic Notebook 時,會在 Studio Classic Launcher 中指定生命週期組態。
若要解決此錯誤,請使用 Studio Classic 啟動器來選取不同的生命週期組態或選取 No script
。
注意
除非使用者從 Studio Classic 啟動器中顯示的清單中選取不同的指令碼,否則 中指定的預設 KernelGateway 生命週期組態DefaultResourceSpec
會套用至網域、使用者設定檔或共用空間中的所有 KernelGateway 影像。如果使用者選擇 No Script
,預設指令碼也會執行。如需選擇指令碼的更多資訊,請參閱步驟 3:使用生命週期組態啟動應用程式。
生命週期組態逾時
生命週期組態逾時限制為 5 分鐘。如果生命週期組態指令碼需要超過 5 分鐘才能執行,Studio Classic 會擲回錯誤。
若要解決此錯誤,請確定您的生命週期組態指令碼在 5 分鐘內完成。
為了協助縮短指令碼的執行時間,請嘗試下列方法:
-
削減必要步驟。例如,限制在哪些 conda 環境中安裝大型套件。
-
在平行程序中執行任務。
-
使用指令碼中的
nohup
命令來確保掛斷信號被忽略,並且不會停止指令碼的執行。