추가 기능 사용자 지정 - Amazon SageMaker AI

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

추가 기능 사용자 지정

템플릿

템플릿은 워크스페이스 생성을 위한 관리자 제어 블루프린트 역할을 하는 재사용 가능한 워크스페이스 구성입니다. 워크스페이스 구성 값에 대한 기본값과 데이터 과학자가 수행할 수 있는 작업을 제어하는 가드레일을 제공합니다. 템플릿은 클러스터 수준에서 존재하며 네임스페이스 전체에서 재사용할 수 있습니다.

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 코드 버전 요구 사항

VS Code 버전 v1.90 이상이 필요합니다. 최신 안정화 버전의 VS Code를 사용하는 것이 좋습니다.

운영 체제 요구 사항

Studio 스페이스에 원격으로 연결하려면 다음 운영 체제 중 하나가 필요합니다.

로컬 시스템 사전 조건

로컬 Visual Studio 코드를 Studio 스페이스에 연결하기 전에 로컬 시스템에 필요한 종속성과 네트워크 액세스 권한이 있는지 확인합니다.

참고

소프트웨어 설치 제한이 있는 환경에서는 사용자가 필수 종속성을 설치하지 못할 수 있습니다. AWSToolkit for Visual Studio Code는 원격 연결을 시작할 때 이러한 종속성을 자동으로 검색하고 누락된 항목이 있으면 설치를 요청합니다. IT 부서와 협력하여 이러한 구성 요소를 사용할 수 있는지 확인합니다.

필수 로컬 종속성

로컬 시스템에는 다음 구성 요소가 설치되어 있어야 합니다.

플랫폼별 요구 사항

  • 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 시작 시간 최적화

컨테이너 이미지 가져오기 성능은 특히 AI/ML 워크로드가 점점 더 큰 컨테이너 이미지에 의존함에 따라 많은 EKS 고객에게 상당한 병목 현상이 되었습니다. 이러한 대용량 이미지를 가져오고 압축을 풀려면 일반적으로 각 EKS 노드에서 처음 사용할 때 몇 분 정도 걸립니다. 이러한 지연은 SageMaker Spaces를 시작할 때 상당한 지연 시간을 추가하고 특히 노트북, 대화형 개발 작업과 같이 빠른 시작이 필요한 환경에서 사용자 경험에 직접적인 영향을 미칩니다.

이미지 사전 워밍은 특정 컨테이너 이미지가 필요하기 전에 EKS/HyperPod 클러스터의 모든 노드에 사전 로드하는 데 사용되는 기법입니다. 포드가 큰 이미지의 첫 번째 풀을 트리거할 때까지 기다리는 대신 클러스터는 모든 노드에서 이미지를 사전에 다운로드하고 캐싱합니다. 이렇게 하면 워크로드가 시작될 때 필요한 이미지를 로컬에서 이미 사용할 수 있으므로 콜드 스타트 지연이 길어지지 않습니다. 이미지 사전 워밍은 SageMaker Spaces 시작 속도를 개선하고 최종 사용자에게 보다 예측 가능하고 응답성이 뛰어난 환경을 제공합니다.

DaemonSet를 통한 사전 워밍

DaemonSet를 사용하여 이미지를 미리 로드하는 것이 좋습니다. DaemonSet는 클러스터의 모든 노드에서 하나의 포드가 실행되도록 합니다. DaemonSet 포드 내의 각 컨테이너는 캐시하려는 이미지를 참조합니다. Kubernetes가 포드를 시작하면 자동으로 이미지를 가져와 각 노드에서 캐시를 워밍합니다.

다음 예제에서는 두 개의 GPU 이미지를 미리 로드하는 DaemonSet를 생성하는 방법을 보여줍니다. 각 컨테이너는 오버헤드를 최소화하면서 포드를 활성 상태로 유지하기 위해 경량 sleep infinity 명령을 실행합니다.

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는 컨테이너를 시작하기 전에 각 이미지를 다운로드해야 합니다.

  • 모든 노드에서 포드가 실행되면 이미지가 로컬로 캐시됩니다.

  • 이제 이러한 이미지를 사용하는 모든 워크로드가 훨씬 더 빠르게 시작됩니다.

스페이스 기본 스토리지(EBS)

시스템은 기본적으로 EBS CSI 드라이버를 사용하여 각 워크스페이스에 EBS 스토리지 볼륨을 프로비저닝합니다. SageMaker는 워크스페이스에 사용할 EBS 스토리지 클래스를 생성하며, 관리자는 템플릿 설정을 사용하여 이러한 볼륨의 기본 및 최대 크기를 사용자 지정할 수 있습니다. CLI 도구로 작업하는 고급 사용자의 경우 사용자가 EBS 볼륨에 대한 고객 관리형 KMS 키 구성을 포함하여 다른 스토리지 클래스를 활용할 수 있도록 워크스페이스의 스토리지 클래스를 사용자 지정할 수도 있습니다.

EBS 볼륨은 특정 AZ에 바인딩됩니다. 즉, 워크스페이스는 스토리지 볼륨과 동일한 AZ의 노드에서만 예약할 수 있습니다. 이로 인해 클러스터 용량이 존재하지만 올바른 AZ에 없는 경우 예약 실패가 발생할 수 있습니다.

수명 주기

수명 주기 구성은 워크스페이스가 생성되거나 시작될 때 실행되는 시작 스크립트를 제공합니다. 이러한 스크립트를 통해 관리자는 시작 중에 워크스페이스 환경을 사용자 지정할 수 있습니다. 최대 크기가 1KB인 bash 스크립트입니다. 더 큰 설정 구성이 필요한 경우 컨테이너 이미지에 스크립트를 추가하고 수명 주기 구성에서 스크립트를 트리거하는 것이 좋습니다.

Kubernetes 컨테이너 수명 주기 후크를 활용하여 https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/이 기능을 제공합니다. Kubernetes는 컨테이너의 진입점과 관련하여 시작 스크립트가 실행되는 시기에 대한 보장을 제공하지 않습니다.

유휴 종료

유휴 워크스페이스의 자동 종료를 구성하여 리소스 사용을 최적화합니다.

유휴 종료

idleShutdown: enabled: true idleShutdownTimeoutMinutes: 30 detection: httpGet: path: /api/idle port: 8888 scheme: HTTP

Parameters

enabled(부울, 필수) - 워크스페이스에 대한 유휴 종료를 활성화하거나 비활성화합니다.

idleShutdownTimeoutMinutes(정수, 필수) - 워크스페이스가 종료되기 전 비활성 시간입니다. 최소값은 1입니다.

감지(객체, 필수) - 워크스페이스 유휴 상태를 감지하는 방법을 정의합니다.

detection.httpGet(객체, 선택 사항) - 유휴 감지를 위한 HTTP 엔드포인트 구성입니다. Kubernetes HTTPGetAction 사양을 사용합니다.

  • path - 요청할 HTTP 경로

  • 포트 - 포트 번호 또는 이름

  • 체계 - HTTP 또는 HTTPS(기본값: HTTP)

구성 위치

Workspace 구성

워크스페이스 사양에서 유휴 종료를 직접 정의합니다.

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

템플릿 상속 및 재정의

템플릿을 사용하는 Workspace는 템플릿의 defaultIdleShutdown 구성을 자동으로 상속합니다. 템플릿에서 허용하는 경우 Workspace가이 구성을 재정의할 수 있습니다.

정책 재정의

템플릿은 idleShutdownOverrides를 통해 재정의 동작을 제어합니다.

allow(부울, 기본값: true) - 워크스페이스가 기본 유휴 종료 구성을 재정의할 수 있는지 여부입니다.

minTimeoutMinutes(정수, 선택 사항) - 워크스페이스 재정의에 허용되는 최소 제한 시간 값입니다.

maxTimeoutMinutes(정수, 선택 사항) - 워크스페이스 재정의에 허용되는 최대 제한 시간 값입니다.

상속 예제

Workspace는 템플릿 기본값을 상속합니다.

apiVersion: workspace.jupyter.org/v1alpha1 kind: Workspace metadata: name: my-workspace spec: displayName: "My Workspace" templateRef: name: jupyter-template # Inherits defaultIdleShutdown from template

재정의 예제

Workspace는 템플릿 기본값을 재정의합니다.

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

동작

유휴 종료가 활성화되면 시스템은 구성된 HTTP 엔드포인트를 사용하여 워크스페이스에 활동이 있는지 주기적으로 확인합니다. 엔드포인트에 워크스페이스가 지정된 제한 시간 동안 유휴 상태라고 표시되면 워크스페이스가 자동으로 중지됩니다. 필요한 경우 워크스페이스를 수동으로 다시 시작할 수 있습니다.

템플릿 업데이트

Kubectl 또는 Hyperpod CLI 및 SDK와 같은 클라이언트 도구를 사용하여 EKS 클러스터 내에서 스페이스를 관리할 수 있습니다. 관리자는 기본 스페이스 구성을 위해 스페이스 템플릿을 프로비저닝할 수 있으며, 데이터 사이언티스트는 기본 Kubernetes 복잡성을 이해하지 않고도 통합 개발 환경을 사용자 지정할 수 있습니다. 자세한 사용 지침은 https://sagemaker-hyperpod-cli.readthedocs.io/en/latest/index.html CLI 및 SDK 설명서를 참조하세요.

관리자는 스페이스를 생성할 때 기본 구성 역할을 하는 스페이스 템플릿에서 CRUD 작업을 수행할 수 있습니다. 데이터 사이언티스트는 스페이스에서 CRUD 작업을 수행하고 특정 컴퓨팅 노드에 대한 다중 인스턴스 GPU 프로파일을 비롯한 다양한 파라미터를 재정의할 수 있습니다. 원격 VSCode 액세스 및 웹 UI를 통해 스페이스를 시작, 중지 및 연결할 수 있습니다. 스페이스 템플릿이 업데이트되면 이후에 생성된 스페이스는 업데이트된 템플릿의 설정으로 구성됩니다. 규정 준수 검사는 기존 스페이스가 업데이트되거나 시작될 때 수행됩니다. 설정이 범위를 벗어났거나 일치하지 않으면 스페이스가 업데이트되거나 시작되지 않습니다.

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"