本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
自訂附加元件
範本
範本是可重複使用的工作區組態,可做為建立工作區的管理員控制藍圖。它們提供工作空間組態值的預設值,以及用於控制資料科學家可以執行哪些操作的護欄。範本存在於叢集層級,並可跨命名空間重複使用。
SageMaker Spaces 會建立兩個系統範本做為資料科學家的起點,一個用於程式碼編輯器,另一個用於 JupyterLab。這些系統範本由 附加元件管理,無法直接編輯。反之,管理員可以建立新的範本,並將其設定為預設範本。
任務控管
apiVersion: workspace.jupyter.org/v1alpha1 kind: WorkspaceTemplate metadata: name: my-jupyter-template namespace: my-namespace labels: kueue.x-k8s.io/priority-class: <user-input>-priority spec: displayName: "My Custom Jupyter Lab" description: "Custom Jupyter Lab with specific configurations" defaultImage: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu" allowedImages: - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu" - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu" defaultResources: requests: cpu: "1" memory: "4Gi" limits: cpu: "4" memory: "16Gi" primaryStorage: defaultSize: "10Gi" minSize: "5Gi" maxSize: "50Gi" defaultStorageClassName: "sagemaker-spaces-default-storage-class" defaultMountPath: "/home/sagemaker-user" defaultContainerConfig: command: ["/opt/amazon/sagemaker/workspace/bin/entrypoint-workspace-jupyterlab"] defaultPodSecurityContext: fsGroup: 1000 defaultOwnershipType: "Public" defaultAccessStrategy: name: "hyperpod-access-strategy" allowSecondaryStorages: true appType: "jupyterlab"
SMD/自訂映像
客戶可以透過 範本設定映像政策,方法是提供預設映像和允許映像的清單。此外,管理員可以選擇是否允許資料科學家攜帶自己的自訂映像。系統預設為使用最新的 SageMaker 分佈,但如果您想要固定到特定版本,您可以指定要在範本中使用的確切 SMD 版本。
自訂映像需求:
-
curl如果您想要使用閒置關閉 連接埠 8888
-
遠端存取
遠端 IDE 要求
VS Code 版本要求
需要 VS Code 版本 v1.90
作業系統要求
您需要下列其中一個作業系統才能遠端連線至 Studio 空間:
-
macOS 13+
-
Windows 10
-
Windows 11
-
Linux
-
安裝適用於 Linux 的官方 Microsoft VS 程式碼
-
不是開放原始碼版本
-
本機機器先決條件
將本機 Visual Studio 程式碼連線至 Studio 空間之前,請確定您的本機機器具有必要的相依性和網路存取。
注意
具有軟體安裝限制的環境可能會讓使用者無法安裝必要的相依性。AWSToolkit for Visual Studio Code 會在啟動遠端連線時自動搜尋這些相依性,並在遺失任何相依性時提示安裝。與您的 IT 部門協調,以確保這些元件可用。
必要的本機相依性
您的本機機器必須安裝下列元件:
-
— 適用於遠端開發的標準 VS Code Marketplace 擴充功能
-
Session Manager 外掛程式 — 安全工作階段管理的必要項目
-
SSH 用戶端 — 大多數機器上的標準元件 (Windows 建議使用 OpenSSH
) -
通常包含在 VS Code 安裝中
平台特定需求
-
Windows 使用者 — SSH 終端機連線需要 PowerShell 5.1 或更新版本
網路連線需求
您的本機機器必須具有 Session Manager 端點的網路存取權。例如,在美國東部 (維吉尼亞北部) (us-east-1) 中,這些可以是:
映像要求
SageMaker 分佈映像
搭配遠端存取使用 SageMaker Distribution 時,請使用 SageMaker Distribution 2.7 版或更新版本。
自訂映像
當您使用遠端存取自有映像 (BYOI) 時,請務必遵循自訂映像規格,並確保已安裝下列相依性:
-
curl或wget— 下載AWS CLI元件時需要 -
unzip— 擷取AWS CLI安裝檔案時需要 -
tar— 封存擷取時需要 -
gzip— 壓縮檔案處理時需要
執行個體要求
-
記憶體 - 8GB 或以上
-
使用具有至少 8GB 記憶體的執行個體。由於記憶體不足 (小於 8GB),因此不支援下列執行個體類型:
ml.t3.medium、ml.c7i.large、ml.c6i.large、ml.c6id.large和ml.c5.large。如需更完整的執行個體類型清單,請參閱 Amazon EC2 隨需定價頁面
透過預裝容器映像最佳化 Kubernetes 啟動時間
容器映像提取效能已成為許多 EKS 客戶的重大瓶頸,尤其是 AI/ML 工作負載依賴越來越大的容器映像。提取和解壓縮這些大型映像通常需要幾分鐘的時間,才會在每個 EKS 節點上使用它們。此延遲會在啟動 SageMaker Spaces 時增加大量延遲,並直接影響使用者體驗,特別是在需要快速啟動的環境中,例如筆記本、互動式開發任務。
映像預熱是一種技術,用於在需要特定容器映像之前,先將特定容器映像預先載入 EKS/HyperPod 叢集中的每個節點。叢集不會等待 Pod 觸發第一次提取大型映像,而是主動在所有節點下載和快取映像。這可確保工作負載啟動時,必要的映像已在本機提供,消除長時間冷啟動延遲。映像預暖可改善 SageMaker Spaces 啟動速度,並為最終使用者提供更可預測和回應的體驗。
透過 DaemonSet 預填
建議使用 DaemonSet 預先載入映像。DaemonSet 可確保叢集中每個節點上執行一個 Pod。DaemonSet Pod 內的每個容器都會參考您要快取的映像。當 Kubernetes 啟動 Pod 時,會自動提取映像,為每個節點上的快取暖機。
下列範例示範如何建立預先載入兩個 GPU 映像的 DaemonSet。每個容器都會執行輕量型sleep infinity命令,讓 Pod 保持作用中狀態,並將額外負荷降至最低。
cat <<EOF | kubectl apply -n "namespace_1" -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: image-preload-ds spec: selector: matchLabels: app: image-preloader template: metadata: labels: app: image-preloader spec: containers: - name: preloader-3-4-2 image: public.ecr.aws/sagemaker/sagemaker-distribution:3.4.2-gpu command: ["sleep"] args: ["infinity"] resources: requests: cpu: 1m memory: 16Mi limits: cpu: 5m memory: 32Mi - name: preloader-3-3-2 image: public.ecr.aws/sagemaker/sagemaker-distribution:3.3.2-gpu command: ["sleep"] args: ["infinity"] resources: requests: cpu: 1m memory: 16Mi limits: cpu: 5m memory: 32Mi EOF
運作方式
-
每個容器參考一個映像。
-
Kubernetes 必須在啟動容器之前下載每個映像。
-
在每個節點上執行 Pod 後,映像會在本機快取。
-
使用這些映像的任何工作負載現在都會以更快的速度啟動。
空間預設儲存體 (EBS)
根據預設,系統會使用 EBS CSI 驅動程式為每個工作區佈建 EBS 儲存磁碟區。SageMaker 會建立用於工作區的 EBS 儲存類別,管理員可以使用範本設定自訂這些磁碟區的預設大小和大小上限。對於使用 CLI 工具的進階使用者,您也可以自訂工作區的儲存體方案,這可讓使用者利用其他儲存體方案,包括為其 EBS 磁碟區設定客戶管理的 KMS 金鑰。
請注意,EBS 磁碟區繫結至特定 AZ,這表示只能在與其儲存磁碟區相同的 AZ 節點上排程工作區。如果叢集容量存在,但不在正確的可用區域中,這可能會導致排程失敗。
生命週期
生命週期組態提供在建立或啟動工作區時執行的啟動指令碼。這些指令碼可讓管理員在啟動期間自訂工作區環境。這些是大小上限為 1 KB 的 bash 指令碼。如果您需要較大的設定組態,建議您將指令碼新增至容器映像,並從生命週期組態觸發指令碼。
我們利用 Kubernetes 容器生命週期掛鉤來提供此功能 https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/
閒置關閉
設定閒置工作區的自動關閉,以最佳化資源用量。
閒置關閉
idleShutdown: enabled: true idleShutdownTimeoutMinutes: 30 detection: httpGet: path: /api/idle port: 8888 scheme: HTTP
Parameters
enabled (布林值,必要) - 啟用或停用工作區的閒置關閉。
idleShutdownTimeoutMinutes (整數,必要) - 工作區關閉之前閒置的分鐘數。最小值為 1。
detection (物件,必要) - 定義如何偵測工作區閒置狀態。
detection.httpGet (物件、選用) - 用於閒置偵測的 HTTP 端點組態。使用 Kubernetes HTTPGetAction 規格。
-
path - 請求的 HTTP 路徑
-
連接埠 - 連接埠號碼或名稱
-
scheme - HTTP 或 HTTPS (預設:HTTP)
組態位置
工作區組態
直接在工作區規格中定義閒置關閉:
apiVersion: workspace.jupyter.org/v1alpha1 kind: Workspace metadata: name: my-workspace spec: displayName: "Development Workspace" image: jupyter/scipy-notebook:latest idleShutdown: enabled: true idleShutdownTimeoutMinutes: 30 detection: httpGet: path: /api/idle port: 8888
範本組態
在 WorkspaceTemplate 中定義預設閒置關閉行為:
apiVersion: workspace.jupyter.org/v1alpha1 kind: WorkspaceTemplate metadata: name: jupyter-template spec: displayName: "Jupyter Template" defaultImage: jupyter/scipy-notebook:latest defaultIdleShutdown: enabled: true idleShutdownTimeoutMinutes: 30 detection: httpGet: path: /api/idle port: 8888 idleShutdownOverrides: allow: true minTimeoutMinutes: 60 maxTimeoutMinutes: 240
範本繼承和覆寫
使用範本的工作區會自動繼承範本的defaultIdleShutdown組態。如果範本允許,工作區可以覆寫此組態。
覆寫政策
範本透過 控制覆寫行為idleShutdownOverrides:
allow (布林值,預設值:true)- 工作區是否可以覆寫預設的閒置關機組態。
minTimeoutMinutes (整數、選用) - 工作區覆寫允許的最小逾時值。
maxTimeoutMinutes (整數、選用) - 工作區覆寫允許的逾時值上限。
繼承範例
工作區繼承範本預設值:
apiVersion: workspace.jupyter.org/v1alpha1 kind: Workspace metadata: name: my-workspace spec: displayName: "My Workspace" templateRef: name: jupyter-template # Inherits defaultIdleShutdown from template
覆寫範例
工作區覆寫範本預設值:
apiVersion: workspace.jupyter.org/v1alpha1 kind: Workspace metadata: name: my-workspace spec: displayName: "My Workspace" templateRef: name: jupyter-template idleShutdown: enabled: true idleShutdownTimeoutMinutes: 60 # Must be within template bounds detection: httpGet: path: /api/idle port: 8888
鎖定組態
防止工作區覆寫:
apiVersion: workspace.jupyter.org/v1alpha1 kind: WorkspaceTemplate metadata: name: locked-template spec: displayName: "Locked Template" defaultImage: jupyter/scipy-notebook:latest defaultIdleShutdown: enabled: true idleShutdownTimeoutMinutes: 30 detection: httpGet: path: /api/idle port: 8888 idleShutdownOverrides: allow: false # Workspaces cannot override
Behavior (行為)
啟用閒置關閉時,系統會使用設定的 HTTP 端點定期檢查工作區的活動。如果端點指出工作區在指定的逾時持續時間內處於閒置狀態,則工作區會自動停止。您可以視需要手動重新啟動工作區。
範本更新
Kubectl 或 Hyperpod CLI 和 SDK 等用戶端工具可用於管理 EKS 叢集中的空間。管理員可以為預設空間組態佈建空間範本,而資料科學家可以自訂其整合的開發環境,而無需了解基礎 Kubernetes 複雜性。如需詳細使用說明,請參閱 https://https://sagemaker-hyperpod-cli.readthedocs.io/en/latest/index.html
管理員可以在空間範本上執行 CRUD 操作,這在建立空間時做為基本組態。資料科學家可以在 Spaces 上執行 CRUD 操作並覆寫各種參數,包括特定運算節點的多執行個體 GPU 設定檔。他們可以透過遠端 VSCode 存取和 Web UI 來啟動、停止和連線至 Spaces。空間範本更新時,任何後續建立的空間都會使用更新範本中的設定進行設定。更新或啟動現有 Spaces 時,將會執行合規檢查。如果任何設定超出限制或不相符,則 Spaces 將無法更新或啟動。
使用 hyp cli 和 kubectl
使用者可以使用 Hyperpod CLI 在範本上執行 CRUD
### 1. Create a Space Template hyp create hyp-space-template --file template.yaml ### 2. List Space Templates hyp list hyp-space-template hyp list hyp-space-template --output json ### 3. Describe a Space Template hyp describe hyp-space-template --name my-template hyp describe hyp-space-template --name my-template --output json ### 4. Update a Space Template hyp update hyp-space-template --name my-template --file updated-template.yaml ### 5. Delete a Space Template hyp delete hyp-space-template --name my-template
若要建立自訂範本,您可以使用我們的系統範本做為起點。此範本適用於類似 SMD 的影像,但可以根據管理員使用的影像進行自訂。
自訂 JupyterLab 範本範例:
apiVersion: workspace.jupyter.org/v1alpha1 kind: WorkspaceTemplate metadata: name: my-jupyter-template namespace: my-namespace spec: displayName: "My Custom Jupyter Lab" description: "Custom Jupyter Lab with specific configurations" defaultImage: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu" allowedImages: - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu" - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu" defaultResources: requests: cpu: "1" memory: "4Gi" limits: cpu: "4" memory: "16Gi" primaryStorage: defaultSize: "10Gi" minSize: "5Gi" maxSize: "50Gi" defaultStorageClassName: "sagemaker-spaces-default-storage-class" defaultMountPath: "/home/sagemaker-user" defaultContainerConfig: command: ["/opt/amazon/sagemaker/workspace/bin/entrypoint-workspace-jupyterlab"] defaultPodSecurityContext: fsGroup: 1000 defaultOwnershipType: "Public" defaultAccessStrategy: name: "hyperpod-access-strategy" allowSecondaryStorages: true appType: "jupyterlab"
自訂程式碼編輯器範本範例:
apiVersion: workspace.jupyter.org/v1alpha1 kind: WorkspaceTemplate metadata: name: my-code-editor-template namespace: my-namespace spec: displayName: "My Custom Code Editor" description: "Custom Code Editor with specific configurations" defaultImage: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu" allowedImages: - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-cpu" - "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu" defaultResources: requests: cpu: "1" memory: "4Gi" limits: cpu: "4" memory: "16Gi" primaryStorage: defaultSize: "10Gi" minSize: "5Gi" maxSize: "50Gi" defaultStorageClassName: "sagemaker-spaces-default-storage-class" defaultMountPath: "/home/sagemaker-user" defaultContainerConfig: command: ["/opt/amazon/sagemaker/workspace/bin/entrypoint-workspace-code-editor"] defaultPodSecurityContext: fsGroup: 1000 defaultOwnershipType: "Public" defaultAccessStrategy: name: "hyperpod-access-strategy" allowSecondaryStorages: true appType: "code-editor"