

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

# IDEs 및 노트북
<a name="sagemaker-hyperpod-eks-cluster-ide"></a>

Amazon SageMaker는 AI 개발자가 대화형 기계 학습 워크로드를 HyperPod EKS 클러스터에서 직접 실행할 수 있도록 SageMaker HyperPod EKS 클러스터에 대한 새로운 기능을 도입합니다. 이 기능은 AI 개발자가 노트북 실행을 위한 독립형 환경을 생성하고 관리할 수 있는 Amazon SageMaker Spaces라는 새로운 추가 기능을 소개합니다.

관리자는 SageMaker HyperPod 콘솔을 사용하여 클러스터에 추가 기능을 설치하고 이미지, 컴퓨팅 리소스, 노트북 설정을 위한 로컬 스토리지(개발 공간에 연결할 추가 스토리지), 파일 시스템 및 초기화 스크립트와 같은 기본 공간 구성을 정의할 수 있습니다. 원클릭 설치 옵션을 기본 설정과 함께 사용하여 관리자 환경을 간소화할 수 있습니다. 관리자는 SageMaker HyperPod 콘솔, kubectl 또는 HyperPod CLI를 사용하여 운영자를 설치하고, 기본 설정을 생성하고, 중앙 위치에서 모든 공간을 관리할 수 있습니다.

AI 개발자는 HyperPod CLI를 사용하여 개발 공간을 생성, 업데이트 및 삭제할 수 있습니다. 관리자가 제공하는 기본 구성을 사용하거나 설정을 사용자 지정할 수 있는 유연성을 지원합니다. AI 개발자는 로컬 VS Code IDEs 및/또는 관리자가 구성한 사용자 지정 DNS 도메인에서 JupyterLab 또는 CodeEditor IDE를 호스팅하는 웹 브라우저를 사용하여 HyperPod의 공간에 액세스할 수 있습니다. 또한 kubernetes의 포트 전달 기능을 사용하여 웹 브라우저에서 스페이스에 액세스할 수 있습니다.

## 관리자
<a name="admin-cx"></a>
+ [권한 설정](permission-setup.md)
+ [SageMaker AI Spaces 추가 기능 설치](operator-install.md)
+ [추가 기능 사용자 지정](customization.md)
+ [사용자 추가 및 서비스 계정 설정](add-user.md)
+ [한도](ds-limits.md)
+ [HyperPod의 대화형 스페이스에 대한 태스크 거버넌스](task-governance.md)
+ [관찰성](observability.md)

## 데이터 과학자
<a name="data-scientist-cx"></a>
+ [스페이스 생성 및 관리](create-manage-spaces.md)
+ [웹 브라우저 액세스](browser-access.md)
+ [SageMaker Spaces에 대한 원격 액세스](vscode-access.md)

## SageMaker Spaces 관리형 인스턴스 요금
<a name="spaces-managed-instance-pricing"></a>

SageMaker Spaces 추가 기능/운영자는 고객에게 추가 요금을 부과하지 않습니다. 그러나 *원격 IDE 연결* 기능에 필요한 SSH-over-SSM 터널링을 지원하기 위해 SageMaker Spaces는 AWS관리형 인스턴스를 사용합니다. 이 인스턴스는 SSM에서 고급 온프레미스 인스턴스로 등록되므로 컴퓨팅 시간당 요금이 청구됩니다.

 AWS Systems Manager 요금 페이지: AWS Systems Manager 요금: [https://aws.amazon.com/systems-manager/pricing/](https://aws.amazon.com/systems-manager/pricing.com) “온프레미스 인스턴스 관리” 요금을 참조하세요.

# 권한 설정
<a name="permission-setup"></a>

## 추가 기능 및 해당 종속성에 필요한 역할
<a name="permission-setup-addon"></a>

### SageMaker HyperPod의 SageMaker 스페이스에 필요한 IAM 역할
<a name="role-hyperpod"></a>

**SageMaker HyperPod(EKS) 클러스터에서 SageMaker Spaces(a.k.aSageMaker**** IDE/노트북 SageMaker**) 기능을 활성화할 때는 여러 IAM 역할을 생성하고 할당해야 합니다. SageMaker HyperPod 이러한 역할은 보안 액세스, 라우팅, 원격 IDE 세션 및 EBS 스토리지 프로비저닝을 지원합니다. 다음 표에는 네 가지 역할과 필요한 시기가 요약되어 있습니다.

### 역할 요약 테이블
<a name="role-table"></a>


| IAM 역할 | 필수 | 용도 | 누가 사용하나요? | SageMaker 콘솔에서 허용하는 사용자 지정 | 
| --- | --- | --- | --- | --- | 
|  스페이스 추가 기능 실행 역할  |  항상 필수  |  스페이스 컨트롤러가 스페이스를 관리하고, 미리 서명된 URLs 생성하고, SSM 세션을 관리할 수 있도록 허용합니다.  |  추가 기능 컨트롤러 포드(권한 있음)  |  "" 예  | 
|  클러스터 내 라우터 역할  |  WebUI 액세스에 필요  |  라우터 포드가 JWT 서명을 위한 KMS 작업을 수행하도록 허용(WebUI 인증)  |  클러스터 내 라우터 포드(권한 있음)  |  "" 예  | 
|  SSM 관리형 인스턴스 역할  |  원격 IDE 액세스에 필요  |  SSH-over-SSM 원격 IDE 세션에 SSM 에이전트 사이드카에서 사용  |  스페이스 IDE 포드의 SSM 에이전트(추가 기능 포드 아님)  |  "" 예  | 
|  EBS CSI 드라이버 추가 기능에 대한 IAM 역할  |  항상 필수  |  EBS CSI 드라이버가 Spaces 워크로드용 볼륨을 create/attach/modify하도록 허용  |  EBS CSI 드라이버 추가 기능  |  자동 생성됨  | 
|  외부 DNS 추가 기능에 대한 IAM 역할  |  WebUI 액세스에 필요  |  이를 통해 고객의 Route 53 호스팅 영역에서 스페이스 엔드포인트 및 클러스터 내 구성 요소에 DNS 이름을 자동으로 할당할 수 있습니다.  |  외부 DNS 추가 기능  |  자동 생성됨  | 

### 1. 스페이스 추가 기능 실행 역할(필수)
<a name="add-n-execution-role"></a>

Spaces 추가 기능 실행 역할은 EKS 추가 기능을 통해 설치된 관리 구성 요소인 SageMaker Spaces 추가 기능 컨트롤러 포드에서 사용되므로 항상 필요합니다. 이 역할을 통해 컨트롤러는 스페이스를 관리하고, 리소스를 프로비저닝하고, SSM과 상호 작용하고, 원격 IDE 및 WebUI 액세스 모두에 대해 미리 서명된 URLs을 생성할 수 있습니다. 또한 WebUI https 요청을 인증하기 위한 요청 서명에 사용되는 KMS 액세스를 지원합니다. 이 역할은 SageMaker 콘솔을 통해 SageMaker Spaces 추가 기능을 설치할 때 자동으로 생성될 수 있습니다. 수동 생성의 경우 `AmazonSageMakerSpacesControllerPolicy` 관리형 정책을 AWS 제공합니다.

**참조 신뢰 정책**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
          "sts:AssumeRole",
          "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{accountId}}",
          "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}"
        }
      }
    }
  ]
}
```

### 2. 클러스터 내 라우터 역할(WebUI 인증에 필요)
<a name="in-cluster-role"></a>

클러스터 내 라우터 역할은 Spaces WebUI 세션을 인증하는 권한 있는 구성 요소인** 라우터 포드**에서 사용됩니다. 라우터는 KMS 키를 사용하여 특정 스페이스에 대한 사용자 액세스를 승인하는 JWT 토큰을 생성하고 서명합니다. 이 역할을 통해 라우터 포드는 데이터 키를 생성하고 해독할 수 있습니다. 컨트롤러 역할과 마찬가지로 태그 및 클러스터 기반 범위 제한을 사용하여 보안을 적용합니다. 이 역할은 AWS SageMaker 콘솔을 통해 Spaces 추가 기능을 설치할 때 자동으로 생성될 수 있지만 고객은 수동으로 생성할 수 있습니다.

**참조 신뢰 정책**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
          "sts:AssumeRole",
          "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{accountId}}",
          "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}"
        }
      }
    }
  ]
}
```

**참조 권한 정책**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "KMSDescribeKey",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}"
        },
        {
            "Sid": "KMSKeyOperations",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:sagemaker:component": "amazon-sagemaker-spaces",
                    "kms:EncryptionContext:sagemaker:eks-cluster-arn": "${aws:PrincipalTag/eks-cluster-arn}"
                }
            }
        }
    ]
}
```

### 3. SSM 관리형 인스턴스 역할(원격 IDE 액세스에 필요)
<a name="ssm-role"></a>

원격 IDE 액세스를 활성화하기 위해 SSM 관리형 인스턴스를 등록할 때 SSM 관리형 인스턴스 역할이 전달됩니다. 이 역할을 통해 SSM 에이전트는 포드를 SSM 관리형 인스턴스로 등록하고 원격 IDE(SSH-over-SSM) 연결을 위해 SSM 세션 관리자 채널을 사용할 수 있습니다. SageMaker 콘솔을 AWS 사용할 때 자동으로 생성할 수 있습니다. 수동 배포의 경우 고객은이 역할을 생성하여 Spaces 추가 기능에 제공해야 합니다. 컨트롤러 포드 자체는이 역할을 수임하지 않고를 호출할 때만 제공합니다`ssm:CreateActivation`.

**참조 신뢰 정책**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{{account}}"
                },
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:ssm:{{region}}:{{account}}:*"
                }
            }
        }
    ]
}
```

**참조 권한 정책**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:DescribeAssociation"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:association/*",
        "arn:aws:ssm:{{region}}:{{account}}:document/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetDocument",
        "ssm:DescribeDocument"
      ],
      "Resource": "arn:aws:ssm:{{region}}:{{account}}:document/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameter",
        "ssm:GetParameters"
      ],
      "Resource": "arn:aws:ssm:{{region}}:{{account}}:parameter/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:ListInstanceAssociations"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:PutComplianceItems"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateAssociationStatus"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:document/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateInstanceAssociationStatus"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:association/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateInstanceInformation"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetDeployablePatchSnapshotForInstance",
        "ssm:GetManifest",
        "ssm:ListAssociations",
        "ssm:PutInventory",
        "ssm:PutConfigurePackageResult"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssmmessages:CreateControlChannel",
        "ssmmessages:CreateDataChannel",
        "ssmmessages:OpenControlChannel",
        "ssmmessages:OpenDataChannel"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2messages:AcknowledgeMessage",
        "ec2messages:DeleteMessage",
        "ec2messages:FailMessage",
        "ec2messages:GetEndpoint"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2messages:GetMessages",
        "ec2messages:SendReply"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "ssm:SourceInstanceARN": "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
        }
      }
    }
  ]
}
```

### 4. EBS CSI 드라이버 추가 기능에 대한 IAM 역할
<a name="role-ebs-csi"></a>

EBS CSI 드라이버는 Spaces 워크로드에 영구 볼륨을 프로비저닝하기 때문에 EBS CSI 드라이버의 IAM 역할이 필요합니다. AWS관리형 [AmazonEBSCSIDriverPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html)는 기준 권한을 제공하지만 SageMaker HyperPod 클러스터에는 빠른 스냅샷 복원 생성, 클러스터 소유 볼륨에 태그 지정, HyperPod 관리형 노드에 대한 볼륨 연결/분리와 같은 [추가 기능이](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-ebs.html#sagemaker-hyperpod-eks-ebs-setup) 필요합니다. 이러한 권한에는와 같은 SageMaker별 APIs도 포함됩니다`sagemaker:AttachClusterNodeVolume`. EBS CSI 드라이버가 설치되지 않은 경우 이제 Spaces 추가 기능 설치 중에 SageMaker 콘솔에서이 역할이 자동으로 생성되므로 **고객 작업이 필요하지 않습니다**.

### 5. 외부 DNS 추가 기능에 대한 IAM 역할
<a name="role-external-nds"></a>

외부 DNS 추가 기능은 HyperPod 클러스터의 서비스 및 수신 리소스에 대한 DNS 레코드를 관리합니다. 이를 통해 고객의 Route 53 호스팅 영역에서 스페이스 엔드포인트 및 클러스터 내 구성 요소에 DNS 이름을 자동으로 할당할 수 있습니다. 오늘날 고객은 EKS 콘솔에서 원클릭 옵션을 통해 외부 DNS를 수동으로 설치하는 경우가 많습니다. SageMaker Spaces 환경 개선의 일환으로 이제이 역할은 Spaces 추가 기능 설치 중에 SageMaker 콘솔에 의해 자동으로 생성되므로 **고객 작업이 필요하지 않습니다**.

## AWS Toolkit이 SageMaker Spaces에 액세스하기 위한 권한 설정
<a name="permission-for-toolkitl"></a>

 AWS VS Code Toolkit 리소스 탐색기 사이드 패널이 SageMaker Spaces를 검색하고 연결할 수 있도록 하려면 다음 IAM 권한이 필요합니다. 이러한 권한을 통해 도구 키트는 사용 가능한 SageMaker HyperPod 클러스터를 나열하고, 클러스터 세부 정보를 검색하고, 연결된 Amazon EKS 클러스터에 대한 연결 토큰을 얻을 수 있습니다.

**필수 IAM 정책**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SageMakerListClusters",
            "Effect": "Allow",
            "Action": "sagemaker:ListClusters",
            "Resource": "*"
        },
        {
            "Sid": "SageMakerDescribeCluster",
            "Effect": "Allow",
            "Action": "sagemaker:DescribeCluster",
            "Resource": "arn:aws:sagemaker:{{region}}:{{account}}:cluster/cluster-name"
        },
        {
            "Sid": "EksDescribeCluster",
            "Effect": "Allow",
            "Action": "eks:DescribeCluster",
            "Resource": "arn:aws:eks:{{region}}:{{account}}:cluster/cluster-name"
        },
        {
            "Sid": "EksGetToken",
            "Effect": "Allow",
            "Action": "eks:GetToken",
            "Resource": "*"
        }
    ]
}
```

**권장 사항 범위 지정**
+ cluster-name을 사용자가 액세스해야 하는 특정 SageMaker HyperPod 클러스터(들)로 바꿉니다.
+ eks:GetToken 작업은 현재 리소스 수준 제한을 지원하지 않으며 Resource: "\$1"를 사용해야 합니다. 이는 AWS 서비스 제한 사항입니다. 클라이언트 측 인증은 [EKS 액세스 항목을](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html) 통해 수행됩니다.

# SageMaker AI Spaces 추가 기능 설치
<a name="operator-install"></a>

## 종속성
<a name="dependencies"></a>

**Amazon EKS Pod Identity Agent 추가 기능**
+ 운영자가 AWS 자격 증명을 얻는 데 필요합니다.
+ **일반적으로 대부분의 EKS 클러스터에 사전 설치됨** 
+ 설치: EKS 추가 기능을 통해

**Cert-manager**
+ TLS 인증서 관리에 필요
+ HyperPod 빠른 클러스터 생성을 사용하는 경우 **사전 설치됨** 
+ 설치: EKS 추가 기능을 통해

**EBS CSI 드라이버**
+ 스페이스 영구 스토리지(EBS 볼륨)에 필요
+ SageMaker 콘솔을 사용하여 **설치할 때 자동으로** 설치됨
+ `AmazonEBSCSIDriverPolicy` \$1 HyperPod별 권한이 있는 IAM 역할 필요
+ 설치: EKS 추가 기능을 통해. 그러나 가이드에 따라 HyperPod에 필요한 추가 권한을 설치해야 합니다.
+ 참조: [ HyperPod에서 Amazon EBS CSI 드라이버 사용](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-ebs.html)

## WebUI 액세스를 위한 추가 종속성
<a name="-additional-dependencies"></a>

**AWS Load Balancer서 컨트롤러**
+ HyperPod 빠른 클러스터 생성을 사용하는 경우 **사전 설치됨** 
+ 설치: Helm을 통해
+ 수동 설치 가이드: [AWS Load Balancer서 컨트롤러 설치](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html)

**외부 DNS**
+ WebUI 액세스에 사용자 지정 도메인을 사용할 때 필요합니다.
+ Route53 DNS 레코드를 자동으로 관리합니다.
+ Route53 권한이 있는 IAM 역할 필요
+ 설치: EKS 추가 기능을 통해

## 설치
<a name="installation"></a>

시작하기 전에 다음을 갖추었는지 확인합니다.
+ Kubernetes 버전 1.30 이상을 실행하는 작업자 노드가 하나 이상 있는 활성 SageMaker HyperPod 클러스터
+ 최소 인스턴스 유형(XX vCPU, YY GiB 메모리)이 있는 작업자 노드 하나 이상

### Amazon SageMaker Spaces 추가 기능 설치
<a name="space-add-on"></a>

기본 설정의 경우 빠른 설치 또는 고급 구성의 경우 사용자 지정 설치를 사용하여 SageMaker Spaces 추가 기능을 설치할 수 있습니다.

#### 빠른 설치
<a name="quick-install"></a>

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker Console을 엽니다.

1. 클러스터 목록에서 클러스터를 선택합니다.

1. IDE 및 노트북 탭에서 Amazon SageMaker Spaces를 찾은 다음 빠른 설치를 선택합니다.

빠른 설치 자동:
+ 추가 기능에 필요한 IAM 역할을 생성합니다.
+ Systems Manager에 필요한 IAM 역할을 사용하여 원격 액세스 모드 활성화
+ 추가 기능을 설치하고 포드 자격 증명 연결을 구성합니다.

#### 사용자 지정 설치
<a name="custom-install"></a>

1. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)에서 Amazon SageMaker Console을 엽니다.

1. 클러스터 목록에서 클러스터를 선택합니다.

1. IDE 및 노트북 탭에서 Amazon SageMaker Spaces를 찾은 다음 사용자 지정 설치를 선택합니다.

1. 다음과 같은 옵션을 구성합니다.

   **추가 기능에 필요한 IAM 역할**
   + 권장 권한이 있는 새 IAM 역할을 생성할지 아니면 필요한 권한이 있는 기존 역할을 사용할지 선택합니다(위의 관리자 권한 설정 섹션 참조).

   **원격 액세스 구성**
   + 사용자가 AWS Systems Manager를 사용하여 로컬 Visual Studio 코드의 스페이스에 연결할 수 있도록를 활성화합니다.
   + SSM 관리형 인스턴스 역할의 경우:
     + **새 역할 생성** - 추가 기능은 필요한 Systems Manager 권한으로 역할을 생성하고 관리합니다.
     + **기존 역할 사용** - 필요한 Systems Manager 권한이 있는 사전 구성된 역할 선택
   + Spaces 추가 기능 실행 역할에 SSM 관리형 인스턴스 역할에 대한 PassRole 권한이 있는지 확인합니다.
**참고**  
원격 액세스를 활성화하면 추가 인스턴스당 요금에 대해 AWS Systems Manager 고급 인스턴스 티어가 활성화됩니다. 요금 정보는 Systems Manager 요금을 참조하세요.

   **웹 브라우저 액세스 구성**
   + 사용자가 Route 53 DNS 및 SSL 인증서를 사용하여 웹 브라우저를 통해 스페이스에 액세스할 수 있도록 허용하려면 활성화
   + **사전 조건:** 브라우저 액세스를 활성화하기 전에 AWS Load Balancer 컨트롤러 설치
   + **Route 53 호스팅 영역:** 소유한 도메인 또는 하위 도메인의 기존 호스팅 영역을 선택합니다. DNS 관리 및 SSL 인증서 검증을 활성화하려면 도메인 또는 하위 도메인을 등록하고 사용자가 제어해야 합니다.

     도메인 등록에 대한 자세한 내용은 Route 53 개발자 안내서의 [새 도메인 등록](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html#domain-register-procedure-section)을 참조하세요.
   + **하위 도메인:** 하위 도메인 접두사 입력(영숫자 및 하이픈만 해당, 최대 63자)
   + **SSL 인증서:** AWS Certificate Manager에서 기존 SSL 인증서를 선택합니다. 인증서는 유효해야 하며 개별 스페이스 액세스 URL을 지원하려면 하위 도메인(예: subdomain.domain.com)과 와일드카드 하위 도메인(예: \$1.subdomain.domain.com)을 모두 포함해야 합니다. URLs
   +  **토큰 서명 키:** JWT 토큰 서명을 위한 AWS KMS 비대칭 키를 선택합니다. 키는 보안 WebUI 액세스를 위한 인증 토큰을 암호화하는 데 사용됩니다. KMS에서 새 비대칭 키를 생성하거나 계정이 액세스할 수 있는 기존 키를 선택할 수 있습니다.
**참고**  
호스팅 영역 및 DNS 쿼리에는 표준 Route 53 요금이 적용됩니다. 요금 정보는 Route 53 요금을 참조하세요.

#### EKS 추가 기능 설치 - WebUI를 사용하는 Jupyter K8s
<a name="webui-install"></a>

##### 구성 파일
<a name="configure-file"></a>

생성`addon-config.yaml`:

```
jupyter-k8s:
  workspacePodWatching:
    enable: true

jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    kmsEncryptionContext:
      enabled: true
    traefik:
      shouldInstall: true
    auth:
      kmsKeyId: "<KMS_KEY_ARN>"
```

**다음 자리 표시자를 바꿉니다.**
+ <DOMAIN\$1NAME>: 도메인 이름(예: `jupyter.example.com`)
+ <ACM\$1CERTIFICATE\$1ARN>: ACM 인증서 ARN(예: `arn:aws:acm:us-west-2:111122223333:certificate/12345678-1234-1234-1234-123456789012`,
+ <KMS\$1KEY\$1ARN>: KMS 키 ARN(예: `arn:aws:kms:us-west-2:111122223333:key/12345678-1234-1234-1234-123456789012`

##### 를 통한 설치 AWS CLI
<a name="install-via-cli"></a>

```
aws eks create-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```

**기존 추가 기능을 업데이트하려면:**

```
aws eks update-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```

##### 를 통한 설치 AWS Management Console
<a name="install-via-console"></a>

1. **EKS 콘솔**로 이동 → 클러스터 선택

1. **추가 기능** 탭 클릭 → **새 기능 추가**

1. **SageMaker Spaces** 추가 기능 선택

1. 위의 YAML 구성을 **선택적 구성 설정에** 붙여넣습니다.

1. **다음을** 클릭한 후 추가 기능 설정을 검토합니다.

1. **생성**을 클릭합니다

##### 설치 확인
<a name="install-verify"></a>

```
# Check addon status
aws eks describe-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --region <AWS_REGION>
```

##### ALB 속성 사용자 지정
<a name="customize-alb"></a>

기본적으로 추가 기능은 웹 UI와 함께 사용할 퍼블릭 로드 밸런서를 생성합니다. EKS 추가 기능 속성을 사용하여 로드 밸런서 속성을 사용자 지정할 수 있습니다.

내부 ALB를 생성하려면 체계를 로 설정합니다`internal`.

```
jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    alb:
      scheme: "internal"  # Default is "internet-facing"
```

`alb.annotations` 필드를 사용하여 ALB 설정을 사용자 지정할 수도 있습니다.

```
jupyter-k8s-aws-hyperpod:
  clusterWebUI:
    enabled: true
    domain: "<DOMAIN_NAME>"
    awsCertificateArn: "<ACM_CERTIFICATE_ARN>"
    alb:
      scheme: "internal"
      annotations:
        alb.ingress.kubernetes.io/security-groups: "<SECURITY_GROUP_ID>"
        alb.ingress.kubernetes.io/subnets: "<SUBNET_ID_1>,<SUBNET_ID_2>"
        alb.ingress.kubernetes.io/load-balancer-attributes: "idle_timeout.timeout_seconds=60"
```

**일반적인 ALB 주석:**
+ `alb.ingress.kubernetes.io/security-groups`: ALB에 대한 보안 그룹 지정
+ `alb.ingress.kubernetes.io/subnets`: ALB의 서브넷 지정
+ `alb.ingress.kubernetes.io/load-balancer-attributes`: ALB 속성 설정(유휴 제한 시간, 액세스 로그 등)

사용 가능한 모든 주석은 [AWS Load Balancer Controller 설명서를](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/ingress/annotations/) 참조하세요.

### 추가 기능의 업그레이드/버전 관리
<a name="upgrade-add-on"></a>

```
aws eks update-addon \
  --cluster-name <CLUSTER_NAME> \
  --addon-name amazon-sagemaker-spaces \
  --configuration-values file://addon-config.yaml \
  --resolve-conflicts OVERWRITE \
  --region <AWS_REGION>
```

# 추가 기능 사용자 지정
<a name="customization"></a>

## 템플릿
<a name="customization-template"></a>

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

SageMaker Spaces는 데이터 사이언티스트를 위한 출발점으로 두 개의 시스템 템플릿을 생성합니다. 하나는 코드 편집기용이고 다른 하나는 JupyterLab용입니다. 이러한 시스템 템플릿은 추가 기능에 의해 관리되며 직접 편집할 수 없습니다. 대신 관리자는 새 템플릿을 생성하고 기본값으로 설정할 수 있습니다.

## 작업 거버넌스
<a name="customization-governabce"></a>

```
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/사용자 지정 이미지
<a name="customization-image"></a>

고객은 기본 이미지와 허용된 이미지 목록을 제공하여 템플릿을 통해 이미지 정책을 구성할 수 있습니다. 또한 관리자는 데이터 과학자가 자신의 사용자 지정 이미지를 가져오도록 허용할지 여부를 선택할 수 있습니다. 시스템은 기본적으로 최신 SageMaker 배포를 사용하지만 특정 버전에 고정하려는 경우 템플릿에 사용할 정확한 SMD 버전을 지정할 수 있습니다.

사용자 지정 이미지 요구 사항:
+ `curl` 유휴 종료를 사용하려는 경우
+ 포트 8888
+ 원격 액세스

## 원격 IDE 요구 사항
<a name="remote-ide-requirement"></a>

### VS 코드 버전 요구 사항
<a name="remote-ide-requirement-vscode"></a>

VS Code 버전 [v1.90](https://code.visualstudio.com/updates/v1_90) 이상이 필요합니다. [최신 안정화 버전의 VS Code](https://code.visualstudio.com/updates)를 사용하는 것이 좋습니다.

### 운영 체제 요구 사항
<a name="remote-ide-requirement-operate"></a>

Studio 스페이스에 원격으로 연결하려면 다음 운영 체제 중 하나가 필요합니다.
+ macOS 13\$1
+ Windows 10
  + [Windows 10 지원은 2025년 10월 14일에 종료됨](https://support.microsoft.com/en-us/windows/windows-10-support-ends-on-october-14-2025-2ca8b313-1946-43d3-b55c-2b95b107f281)
+ Windows 11
+ Linux
+ [Linux용 공식 Microsoft VS Code](https://code.visualstudio.com/docs/setup/linux) 설치
  + 오픈 소스 버전이 아님

### 로컬 시스템 사전 조건
<a name="remote-ide-requirement-machine"></a>

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

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

**필수 로컬 종속성**

로컬 시스템에는 다음 구성 요소가 설치되어 있어야 합니다.
+ **[https://code.visualstudio.com/docs/remote/ssh](https://code.visualstudio.com/docs/remote/ssh)**
+ - 원격 개발을 위한 표준 VS Code Marketplace 확장
+ **[세션 관리자 플러그인](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html)** - 보안 세션 관리에 필요합니다.
+ **SSH 클라이언트** - 대부분의 시스템에서 표준 구성 요소([Windows의 경우 OpenSSH 권장](https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse))
+ **[https://code.visualstudio.com/docs/configure/command-line](https://code.visualstudio.com/docs/configure/command-line)**
+  일반적으로 VS Code 설치에 포함됨

**플랫폼별 요구 사항**
+ **Windows 사용자** - SSH 터미널 연결에는 PowerShell 5.1 이상이 필요합니다.

**네트워크 연결 요구 사항**

로컬 시스템에 [Session Manager 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/ssm.html)에 대한 네트워크 액세스 권한이 있어야 합니다. 예를 들어 미국 동부(버지니아 북부)(us-east-1)에서는 다음과 같을 수 있습니다.
+ `[ssm.us-east-1.amazonaws.com](http://ssm.us-east-1.amazonaws.com)`
+ `ssm.us-east-1.api.aws`
+ `[ssmmessages.us-east-1.amazonaws.com](http://ssmmessages.us-east-1.amazonaws.com)`
+ `[ec2messages.us-east-1.amazonaws.com](http://ec2messages.us-east-1.amazonaws.com)`

### 이미지 요구 사항
<a name="remote-ide-requirement-image"></a>

**SageMaker 배포 이미지**

원격 액세스와 함께 SageMaker Distribution을 사용하는 경우 [SageMaker Distribution](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-distribution.html) 버전 2.7 이상을 사용합니다.

**사용자 지정 이미지**

원격 액세스로 [자체 이미지 가져오기(BYOI)](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-byoi.html)를 수행할 때는 [사용자 지정 이미지 사양을](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-byoi-specs.html) 따르고 다음 종속성이 설치되어 있는지 확인합니다.
+ `curl` 또는 `wget` - AWS CLI 구성 요소를 다운로드하는 데 필요합니다.
+ `unzip` - AWS CLI 설치 파일을 추출하는 데 필요합니다.
+ `tar` - 아카이브 추출에 필요
+ `gzip` - 압축 파일 처리에 필요합니다.

### 인스턴스 요구 사항
<a name="remote-ide-requirement-instance"></a>
+ **메모리** - 8GB 이상
+ 메모리가 8GB 이상인 인스턴스를 사용합니다. 메모리 부족(8GB 미만)으로 인해 `ml.t3.medium`, `ml.c7i.large`, `ml.c6i.large`, `ml.c6id.large`, `ml.c5.large` 인스턴스 유형은 지원되지 *않습니다*. 인스턴스 유형의 전체 목록은 [Amazon EC2 온디맨드 요금 페이지를](https://aws.amazon.com/ec2/pricing/on-demand/) 참조하세요.

## 컨테이너 이미지 사전 워밍을 통한 Kubernetes 시작 시간 최적화
<a name="remote-ide-optimize-image"></a>

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

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

### DaemonSet를 통한 사전 워밍
<a name="remote-ide-optimize-image-dae"></a>

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
```

### 작동 방식
<a name="remote-ide-optimize-image-how"></a>
+ 각 컨테이너는 하나의 이미지를 참조합니다.
+ Kubernetes는 컨테이너를 시작하기 전에 각 이미지를 다운로드해야 합니다.
+ 모든 노드에서 포드가 실행되면 이미지가 로컬로 캐시됩니다.
+ 이제 이러한 이미지를 사용하는 모든 워크로드가 훨씬 더 빠르게 시작됩니다.

## 스페이스 기본 스토리지(EBS)
<a name="space-storage"></a>

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

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

## 추가 스토리지
<a name="space-additional-storage"></a>

SageMaker Spaces는 Amazon EFS, FSx for Lustre 또는 S3 Mountpoint와 같은 추가 스토리지 볼륨을 개발 공간에 연결할 수 있도록 지원합니다. 이를 통해 공유 데이터 세트에 액세스하거나, 프로젝트에서 협업하거나, 워크로드에 고성능 스토리지를 사용할 수 있습니다.

### 사전 조건
<a name="space-additional-storage-prereq"></a>

스페이스에 추가 스토리지를 연결하기 전에 다음을 수행해야 합니다.

1. [EKS](https://docs.aws.amazon.com/eks/latest/userguide/workloads-add-ons-available-eks.html) **추가 기능(Amazon EFS CSI 드라이버, Amazon FSx for Lustre CSI 드라이버 또는 Mountpoint for Amazon S3 CSI 드라이버)을 통해 적절한 CSI 드라이버 추가 기능 설치** EFS FSx Amazon S3 

1. 특정 **스토리지 유형에 대한 CSI 드라이버 설명서에 따라 스토리지 리소스 및 PersistentVolumeClaims 설정** 

1. 스페이스를 생성하려는 것과 동일한 네임스페이스에서 **PVC를 사용할 수 있는지 확인합니다**.

### 스페이스에 스토리지 연결
<a name="space-additional-storage-attach"></a>

PersistentVolumeClaim을 구성한 후에는 HyperPod CLI 또는 kubectl을 사용하여 스페이스에 연결할 수 있습니다.

**HyperPod CLI**

```
hyp create hyp-space \
    --name my-space \
    --display-name "My Space with FSx" \
    --memory 8Gi \
    --volume name=shared-fsx,mountPath=/shared,persistentVolumeClaimName=my-fsx-pvc
```

**kubectl**

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-space
spec:
  displayName: "My Space with FSx"
  desiredStatus: Running
  volumes:
  - name: shared-fsx
    mountPath: /shared
    persistentVolumeClaimName: my-fsx-pvc
```

### 다중 볼륨
<a name="space-additional-storage-multiple"></a>

CLI를 사용하여 여러 `--volume` 플래그를 지정하거나 kubectl을 사용하여 `volumes` 배열에 여러 항목을 지정하여 여러 추가 스토리지 볼륨을 단일 공간에 연결할 수 있습니다.

**HyperPod CLI**

```
hyp create hyp-space \
    --name my-space \
    --display-name "My Space with Multiple Storage" \
    --memory 8Gi \
    --volume name=shared-efs,mountPath=/shared,persistentVolumeClaimName=my-efs-pvc \
    --volume name=datasets,mountPath=/datasets,persistentVolumeClaimName=my-s3-pvc
```

**kubectl**

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-space
spec:
  displayName: "My Space with Multiple Storage"
  desiredStatus: Running
  volumes:
  - name: shared-efs
    mountPath: /shared
    persistentVolumeClaimName: my-efs-pvc
  - name: datasets
    mountPath: /datasets
    persistentVolumeClaimName: my-s3-pvc
```

## 리소스 구성
<a name="space-resource-configuration"></a>

SageMaker Spaces를 사용하면 워크로드 요구 사항에 맞게 CPU, 메모리 및 GPU 리소스를 포함하여 개발 환경에 맞게 컴퓨팅 리소스를 구성할 수 있습니다.

### GPU 구성
<a name="space-gpu-configuration"></a>

SageMaker Spaces는 NVIDIA 다중 인스턴스 GPU(MIG) 기술을 사용하여 전체 GPU 할당 및 GPU 파티셔닝을 모두 지원합니다. 이를 통해 다양한 유형의 기계 학습 워크로드에 대한 GPU 사용률을 최적화할 수 있습니다.

#### 전체 GPU 할당
<a name="space-gpu-whole"></a>

**HyperPod CLI**

```
hyp create hyp-space \
    --name gpu-space \
    --display-name "GPU Development Space" \
    --image public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu \
    --memory 16Gi \
    --gpu 1 \
    --gpu-limit 1
```

**kubectl**

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: gpu-space
spec:
  displayName: "GPU Development Space"
  image: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu"
  desiredStatus: Running
  resources:
    requests:
      memory: "16Gi"
      nvidia.com/gpu: "1"
    limits:
      memory: "16Gi"
      nvidia.com/gpu: "1"
```

#### GPU 파티셔닝(MIG)
<a name="space-gpu-mig"></a>

NVIDIA 다중 인스턴스 GPU(MIG) 기술을 사용한 GPU 파티셔닝을 사용하면 단일 GPU를 더 작고 격리된 인스턴스로 파티셔닝할 수 있습니다. HyperPod 클러스터에는 MIG를 지원하는 GPU 노드와 MIG 프로파일이 구성되어 있어야 합니다. HyperPod 클러스터에서 MIG를 설정하는 방법에 대한 자세한 내용은 [NVIDIA MIG를 사용한 GPU 파티셔닝](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-gpu-partitioning-setup.html)을 참조하세요.

**HyperPod CLI**

```
hyp create hyp-space \
    --name mig-space \
    --display-name "MIG GPU Space" \
    --image public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu \
    --memory 8Gi \
    --accelerator-partition-type mig-3g.20gb \
    --accelerator-partition-count 1
```

**kubectl**

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: mig-space
spec:
  displayName: "MIG GPU Space"
  image: "public.ecr.aws/sagemaker/sagemaker-distribution:latest-gpu"
  desiredStatus: Running
  resources:
    requests:
      memory: "8Gi"
      nvidia.com/mig-3g.20gb: "1"
    limits:
      memory: "8Gi"
      nvidia.com/mig-3g.20gb: "1"
```

## 수명 주기
<a name="space-lifecycle"></a>

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

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

## 유휴 종료
<a name="space-idle-shutdown"></a>

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

### 유휴 종료
<a name="space-idle-shutdown-spec"></a>

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

### 파라미터
<a name="space-idle-shutdown-parameter"></a>

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

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

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

**detection.httpGet**(객체, 선택 사항) - 유휴 감지를 위한 HTTP 엔드포인트 구성입니다. Kubernetes HTTPGetAction 사양을 사용합니다.
+ **경로** - 요청할 HTTP 경로
+ **포트** - 포트 번호 또는 이름
+ **체계** - HTTP 또는 HTTPS(기본값: HTTP)

### 구성 위치
<a name="space-idle-shutdown-configure"></a>

**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
```

### 템플릿 상속 및 재정의
<a name="space-idle-shutdown-inherit"></a>

템플릿을 사용하는 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
```

### 동작
<a name="space-idle-shutdown-behavior"></a>

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

## 템플릿 업데이트
<a name="customization-template-updates"></a>

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

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

## hyp cli 및 kubectl 사용
<a name="customization-hyp-cli"></a>

사용자는 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"
```

# 사용자 추가 및 서비스 계정 설정
<a name="add-user"></a>

## 세분화된 액세스 제어 - 권장 사항
<a name="add-user-access-control"></a>

사용자는 Kubernetes 사용자 이름을 기반으로 구분됩니다. 사용자의 Kubernetes 사용자 이름은 액세스 항목에 정의됩니다. 두 사람이 고유한 사용자 이름을 갖도록 하려면 두 가지 옵션이 있습니다.

1. 권장 - 여러 사람이 동일한 역할을 사용할 수 있습니다. 단, 각 사용자마다 세션 간에 유지되는 고유한 세션 이름이 있어야 합니다. 기본적으로 IAM 역할의 Kubernetes 사용자 이름은 형식입니다`arn:aws:sts::{ACCOUNT_ID}:assumed-role/{ROLE_NAME}/{SESSION_NAME}`. 이 기본값으로 사용자는 이미 세션 이름으로 구분됩니다. 관리자는 사용자당 고유한 세션 이름을 적용하는 몇 가지 방법이 있습니다.
   + SSO 로그인 - SSO 로그인을 사용하는 사용자는 기본적으로 AWS 사용자 이름과 연결된 세션 이름을 갖게 됩니다.
   + 중앙 자격 증명 벤딩 서비스 - 엔터프라이즈 고객의 경우 사용자가 자격 증명으로 자격 증명을 얻기 위해 호출할 수 있는 일부 내부 자격 증명 벤딩 서비스가 있을 수 있습니다.
   + 역할 기반 적용 - IAM 사용자가 `aws:username`에서 IAM 역할을 수임할 때를 역할 세션 이름으로 설정해야 합니다 AWS 계정. 이 작업을 수행하는 방법에 대한 설명서는 [https://aws.amazon.com/blogs/security/easily-control-naming-individual-iam-role-sessions/](https://aws.amazon.com/blogs/security/easily-control-naming-individual-iam-role-sessions/) 나와 있습니다.

1. 데이터 사이언티스트 2명이 다른 액세스 항목(다른 IAM 역할 또는 사용자)을 사용하는 경우 항상 다른 사용자로 계산됩니다.

**액세스 항목 생성**

데이터 사이언티스트 역할에 필요한 IAM 정책:
+ `eks:DescribeCluster`

필수 액세스 항목 정책
+ `AmazonSagemakerHyperpodSpacePolicy` - 네임스페이스로 범위가 지정됨 DS는에 공백을 생성해야 합니다.
+ `AmazonSagemakerHyperpodSpaceTemplatePolicy` - “jupyter-k8s-shared” 네임스페이스로 범위가 지정됨

## 프라이빗 및 퍼블릭 스페이스
<a name="add-user-spaces"></a>

“퍼블릭”과 “OwnerOnly”이라는 두 가지 유형의 공유 패턴을 지원합니다. “AccessType” 및 “OwnershipType” 필드 모두이 두 값을 사용합니다.
+ AccessType: 네임스페이스에 권한이 있는 사람은 누구나 퍼블릭 스페이스에 액세스할 수 있으며, OwnerOnly는 스페이스 생성자와 관리자만 액세스할 수 있습니다. 관리자 사용자는 다음 기준으로 정의됩니다.
+ OwnershipType: 네임스페이스에 권한이 있는 사람은 누구나 퍼블릭 스페이스를 수정/삭제할 수 있으며, 생성자 또는 관리자가 OwnerOnly를 수정/삭제할 수 있습니다.

관리자 사용자는 다음과 같이 정의됩니다.

1. `system:masters` Kubernetes 그룹의 일부

1. helm 차트의 CLUSTER\$1ADMIN\$1GROUP 환경 변수에 정의된 Kubernetes 그룹의 일부입니다.

EKS 액세스 항목을 사용하여 사용자 그룹을 구성할 수 있습니다. 객체에서 사양을 구성하여 스페이스를 “퍼블릭” 또는 “OwnerOnly”으로 정의할 수 있습니다.

```
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  labels:
    app.kubernetes.io/name: jupyter-k8s
  name: example-workspace
spec:
  displayName: "Example Workspace"
  image: "public.ecr.aws/sagemaker/sagemaker-distribution:3.4.2-cpu"
  desiredStatus: "Running"
  ownershipType: "Public"/"OwnerOnly"
  accessType: "Public"/"OwnerOnly"
  # more fields here
```

# 한도
<a name="ds-limits"></a>

스페이스는 EBS 볼륨이 연결된 HyperPod EKS 노드에서 포드로 실행됩니다. 노드당 배포할 수 있는 스페이스 수는 AWS 인프라 제한에 의해 제한됩니다.

**노드당 EBS 볼륨 제한**

참조: [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume\$1limits.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html)

EC2 노드에는 연결할 수 있는 최대 EBS 볼륨 수가 있습니다. 각 스페이스는 일반적으로 하나의 EBS 볼륨을 사용하므로 전용 EBS 스토리지가 있는 스페이스가 단일 노드에서 실행될 수 있는 수가 제한됩니다.

**HyperPod 노드당 최대 포드 수**

참조: [https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)

각 HyperPod 인스턴스 유형은 VPC CNI 플러그인에서 사용 가능한 IP 주소를 기반으로 최대 포드 수를 지원합니다. 각 스페이스는 포드로 실행되므로 노드당 스페이스 수를 직접 제한합니다.

**Impact**

노드당 스페이스의 유효 한도는 먼저 도달하는 제약 조건입니다.

# HyperPod의 대화형 스페이스에 대한 태스크 거버넌스
<a name="task-governance"></a>

이 섹션에서는 대화형 스페이스 워크로드를 위해 공유 Amazon SageMaker HyperPod EKS 클러스터를 최적화하는 방법을 다룹니다. 할당량 관리, 우선 순위 예약, 리소스 공유 정책 등 Kueue의 태스크 거버넌스 기능을 구성하여 팀의 훈련, 평가 및 배치 처리 활동 전반에 걸쳐 공정한 할당을 유지하면서 개발 워크로드가 중단 없이 실행되도록 하는 방법을 알아봅니다.

## 대화형 스페이스 관리 작동 방식
<a name="task-governance-how"></a>

공유 HyperPod EKS 클러스터에서 대화형 스페이스를 효과적으로 관리하려면 Kueue의 기존 기능을 사용하여 다음 작업 거버넌스 전략을 구현합니다.

**우선순위 클래스 구성**

다른 작업 유형보다 먼저 개발 포드가 승인되고 예약되도록 가중치가 높은 대화형 공간(예: 100)에 대한 전용 우선 순위 클래스를 정의합니다. 이 구성을 통해 Interactive Spaces는 클러스터 로드 중에 우선순위가 낮은 작업을 선점할 수 있으며, 이는 중단 없는 개발 워크플로를 유지하는 데 매우 중요합니다.

**할당량 크기 조정 및 할당**

팀의 ClusterQueue에 충분한 컴퓨팅 리소스를 예약하여 예상 개발 워크로드를 처리합니다. 개발 리소스가 유휴 상태인 기간에는 사용하지 않는 할당량 리소스를 다른 팀의 작업에 일시적으로 할당할 수 있습니다. 개발 수요가 증가하면 이러한 빌린 리소스를 회수하여 보류 중인 대화형 스페이스 포드의 우선순위를 지정할 수 있습니다.

**리소스 공유 전략**

요구 사항에 따라 두 가지 할당량 공유 접근 방식 중에서 선택합니다.

*엄격한 리소스 제어*: 할당량 대여 및 차용을 비활성화하여 대화형 스페이스에 예약 컴퓨팅 용량을 항상 사용할 수 있도록 합니다. 이 접근 방식을 사용하려면 최대 개발 수요를 독립적으로 처리할 수 있을 만큼 큰 크기 할당량이 필요하며 사용량이 적은 기간에는 유휴 노드가 발생할 수 있습니다.

*유연한 리소스 공유*: 할당량 대출을 활성화하여 다른 팀이 필요할 때 유휴 개발 리소스를 활용할 수 있도록 합니다. 그러나 대화형 스페이스가 예기치 않은 제거로 이어질 수 있는 차용되고 회수 가능한 리소스에서 실행되지 않도록 차용을 비활성화합니다.

**팀 내 선점**

동일한 할당량으로 혼합 워크로드(훈련, 평가 및 대화형 공간)를 실행할 때 팀 내 선점을 활성화합니다. 이를 통해 Kueue는 팀 내에서 우선 순위가 낮은 작업을 선점하여 우선 순위가 높은 대화형 스페이스 포드를 수용할 수 있으므로 외부 할당량 차용에 의존하지 않고도 개발 작업을 진행할 수 있습니다.

## 대화형 스페이스 설정 샘플
<a name="task-governance-space-setup"></a>

다음 예제는 Kueue가 공유 Amazon SageMaker HyperPod 클러스터의 대화형 스페이스에 대한 컴퓨팅 리소스를 관리하는 방법을 보여줍니다.

**클러스터 구성 및 정책 설정**

클러스터가 다음과 같이 구성되어 있습니다.
+ *팀 알파(개발 팀)*: 대화형 스페이스에 대한 CPU 할당량 8개
+ *팀 베타(ML 팀)*: 훈련 및 평가를 위한 CPU 할당량 16개
+ *팀 감마(연구)*: 실험을 위한 CPU 할당량 6개
+ *정적 프로비저닝*: 오토 스케일링 없음
+ *총 용량*: CPU 30CPUs

공유 CPU 풀은 다음 우선 순위 정책을 사용합니다.
+ *대화형 공간*: Priority 100
+ *훈련*: 우선순위 75
+ *평가*: 우선순위 50
+ *배치 처리*: 우선 순위 25

Kueue는 개발 팀에 대해 선점 활성화 및 대여 비활성화된 팀 할당량 및 우선 순위 클래스를 적용합니다.

**초기 상태: 정상 클러스터 사용률**

정상 작업의 경우:
+ *팀 알파*: CPU 6개, 유휴 CPUs 2개를 사용하여 대화형 공간 6개를 실행합니다CPUs 
+ *팀 베타*: 16CPUs 할당량 내에서 훈련 작업(12개 CPU) 및 평가(4CPUs CPU)를 실행합니다.
+ *팀 감마*: 6CPUs 모두에서 연구 워크로드를 실행합니다.
+ *리소스 공유*: Team Beta가 추가 훈련을 위해 Team Alpha의 유휴 CPUs 2개를 빌립니다.

**개발 스파이크: Team Alpha에 추가 리소스 필요**

Team Alpha의 개발자가 개발 작업을 확장해야 하는 경우 추가 대화형 스페이스 포드에는 4CPUs가 더 필요합니다. Kueue는 새 포드가 다음과 같음을 감지합니다.
+ Team Alpha의 네임스페이스 내
+ Priority 100(대화형 공간)
+ 할당량 제약으로 인해 허용 보류 중

**Kueue의 응답 프로세스**

Kueue는 3단계 프로세스를 따라 리소스를 할당합니다.

1. **할당량 확인**

   질문: Team Alpha에 미사용 할당량이 있습니까?
   + *현재 사용량*: 사용된 CPUs 6개, 사용 가능한 CPUs 2개
   + *새로운 요구 사항*: CPU 4CPUs 필요
   + *결과*: 할당량 부족 → 2단계로 진행

1. **Team Alpha 내 자체 사용**

   질문: 우선 순위가 낮은 팀 알파 작업을 선점할 수 있나요?
   + *사용 가능한 대상*: Team Alpha에 우선 순위가 낮은 작업 없음
   + *결과*: 선점 불가 → 3단계로 진행

1. **빌린 리소스 회수**

   질문: 다른 팀에서 Team Alpha 리소스를 빌립니까?
   + *차용된 리소스*: Team Alpha에서 2CPUs를 사용하는 Team Beta
   + *조치*: Kueue는 팀 베타가 빌린 훈련 포드를 제거하여 CPU 2CPUs
   + *나머지 요구* 사항: 여전히 2CPUs가 더 필요함 → 대화형 스페이스는 리소스를 사용할 수 있을 때까지 NotAdmitted 상태로 유지됨

이 접근 방식은 팀 할당량 경계를 유지하고 불안정한 대여 리소스에서 개발 작업이 실행되지 않도록 하면서 대화형 공간의 우선순위를 지정합니다.

# 관찰성
<a name="observability"></a>

## 표준 Kubernetes 모니터링
<a name="observability-monitor"></a>

`kubectl` 설명 및 `kubectl` 로그와 같은 표준 Kubernetes 도구를 사용하여 스페이스를 모니터링할 수 있습니다.

**스페이스 상태 모니터링**

```
# List all Spaces with status
kubectl get workspace -A

# Get detailed information about a specific Space
kubectl describe workspace <workspace-name>
```

**스페이스 로그 보기**

```
# View workspace container logs
kubectl logs -l workspace.jupyter.org/workspace-name=<workspace-name> -c workspace

# View SSM agent sidecar logs (for remote IDE connectivity)
kubectl logs -l workspace.jupyter.org/workspace-name=<workspace-name> -c ssm-agent-sidecar

# Follow logs in real-time
kubectl logs -l workspace.jupyter.org/workspace-name=<workspace-name> -c workspace -f
```

**공간 조건 이해**

스페이스는 상태의 네 가지 조건 유형을 보고합니다.
+ **사용 가능**: 스페이스를 사용할 준비가 된 `True` 경우. 필요한 모든 리소스(포드, 서비스, 스토리지)가 실행 중이고 정상입니다.
+ **진행 중**: 스페이스가 생성, 업데이트 또는 조정되는 `True` 경우. 안정`False`되면 로 전환합니다.
+ **성능 저하됨**: 스페이스 리소스에서 오류가 감지되는 `True` 경우. 자세한 내용은 조건 메시지를 확인하세요.
+ **중지됨**: 원하는 공간 상태가 로 설정된 `True` 경우`Stopped`. 포드는 종료되지만 스토리지 및 구성은 유지됩니다.

## CloudWatch Logs 통합
<a name="observability-cw"></a>

CloudWatch 로깅 추가 기능을 설치하여 중앙 집중식 로그 관리 및 보존을 위해 스페이스 로그를 Amazon CloudWatch Logs로 전송할 수 있습니다. 이를 통해 여러 클러스터에서 로그를 집계하고 쿼리 및 분석을 위해 CloudWatch Insights와 통합할 수 있습니다. 위의 사용 가능한 모든 `kubectl` 로그는이 플러그인을 사용하여 CloudWatch에서 쿼리할 수 있습니다.

**참조: **[https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-cluster-observability-cluster-cloudwatch-ci.html](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-cluster-observability-cluster-cloudwatch-ci.html).

## HyperPod 관찰성 추가 기능
<a name="observability-addon"></a>

SageMaker HyperPod 관찰성 추가 기능은 스페이스 리소스 사용률을 모니터링하기 위한 포괄적인 대시보드를 제공합니다. 추가 기능을 설치한 후 Amazon Managed Grafana 대시보드에 지표를 표시하는 HyperPod 콘솔의 **작업** 탭에서 스페이스 메모리 및 CPU 사용량을 볼 수 있습니다.

**참조: **[https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-observability-addon.html](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-observability-addon.html)

**사용 가능한 주요 지표:**
+ 스페이스당 CPU 및 메모리 사용률
+ GPU 지표(해당하는 경우)

# 스페이스 생성 및 관리
<a name="create-manage-spaces"></a>

데이터 사이언티스트는를 나열하여 액세스할 수 있는 모든 스페이스를 보고, 템플릿 중 하나를 사용하여 스페이스를 생성하고, 스페이스를 업데이트하여 이미지, 파일 시스템 및 기타 스페이스 구성 속성을 업데이트하고, 스페이스를 삭제할 수 있습니다. 사전 조건으로 고객은 HyperPod CLI를 설치하거나 kubectl을 사용하여 스페이스를 생성하고 관리해야 합니다. HyperPod CLI에 대한 자세한 내용은 [이](https://github.com/aws/sagemaker-hyperpod-cli/blob/main/README.md#space) 섹션을 참조하세요. kubectl 명령을 사용하려면 [이 안내서](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)를 참조하여 kubectl을 설치합니다.

## 스페이스 생성
<a name="create-manage-spaces-create"></a>

**HyperPod CLI**

Jupyter 스페이스 생성

```
hyp create hyp-space \ 
    --name myspace \ 
    --display-name "My Space" \ 
    --memory 8Gi \ 
    --template-ref name=sagemaker-jupyter-template,namespace=jupyter-k8s-system
```

코드 편집기 공간 생성

```
hyp create hyp-space \ 
    --name myspace \ 
    --display-name "My Space" \ 
    --memory 8Gi \ 
    --template-ref name=sagemaker-code-editor-template,namespace=jupyter-k8s-system
```

**kubectl**

```
kubectl apply -f - <<EOF
apiVersion: workspace.jupyter.org/v1alpha1
kind: Workspace
metadata:
  name: my-space
spec:
  displayName: my-space
  desiredStatus: Running
EOF
```

또는 단순히 yaml 파일을 적용할 수 있습니다.

```
kubectl apply -f my-workspace.yaml
```

## 공백 나열
<a name="create-manage-spaces-list"></a>

**HyperPod CLI**

```
hyp list hyp-space
```

**kubectl**

```
kubectl get workspaces -n <workspace-namespace> 
```

## 스페이스 설명
<a name="create-manage-spaces-describe"></a>

**HyperPod CLI**

```
hyp describe hyp-space --name myspace
```

**kubectl**

```
# Basic Status reporting
kubectl get workspace my-workspace -n <workspace-namespace>

# Enhanced Workspace Information Retrieval 
kubectl get workspace my-workspace -n <workspace-namespace> -o wide

# Complete Workspace Information Retrieval
kubectl get workspace my-workspace -n <workspace-namespace> -o json
kubectl get workspace my-workspace -n <workspace-namespace> -o yaml
```

## 스페이스 업데이트
<a name="create-manage-spaces-update"></a>

**HyperPod CLI**

```
hyp update hyp-space \
    --name myspace \
    --display-name "Updated My Space"
```

**kubectl**

필요에 따라 원본 워크스페이스 YAML 파일을 업데이트한 다음 다시 적용합니다. 메타데이터 이름이 수정되지 않았는지 확인합니다. 또한이 kubectl 명령을 사용하여 전체 워크스페이스 yaml을 다시 적용하지 않고 필드를 수정할 수 있습니다.

```
# Open a Terminal IDE and modify the Workspace
kubectl edit workspace -n <workspace-namespace>

# Patch a Workspace
kubectl patch workspace <workspace-name> --type='merge' -p \
    '{"spec":{"<field name>":"<desired value>"}}' -n <workspace-namespace>
```

## 스페이스 시작/중지
<a name="create-manage-spaces-stop"></a>

**HyperPod CLI**

```
hyp start hyp-space --name myspace
hyp stop hyp-space --name myspace
```

**kubectl**

Workspace에서 원하는 상태 필드를 업데이트하여 스페이스를 시작/중지할 수 있습니다.

```
# Start a Workspace
kubectl patch workspace <workspace-name> --type='merge' -p \
    '{"spec":{"desiredStatus":"Running"}}' -n <workspace-namespace>
    
# Stop a Workspace
kubectl patch workspace <workspace-name> --type='merge' -p \
    '{"spec":{"desiredStatus":"Stopped"}}' -n <workspace-namespace>
```

## 로그 가져오기
<a name="create-manage-spaces-log"></a>

**HyperPod CLI**

```
hyp get-logs hyp-space --name myspace
```

**kubectl**

```
# Check Pod Logs
kubectl logs -l workspace.jupyter.org/workspace-name=<workspace-metadata-name>

# Check Pod Events
kubectl describe pod -l workspace.jupyter.org/workspace-name=<workspace-metadata-name>

# Check Operator Logs
kubectl logs -n jupyter-k8s-system deployment/jupyter-k8s-controller-manager
```

## 스페이스 삭제
<a name="create-manage-spaces-delete"></a>

**HyperPod CLI**

```
hyp delete hyp-space --name myspace
```

**kubectl**

```
# Delete a Workspace
kubectl delete workspace <workspace-name> -n <namespace>
```

# 웹 브라우저 액세스
<a name="browser-access"></a>

웹 UI 액세스를 사용하면 보안 웹 브라우저 인터페이스를 통해 SageMaker HyperPod 클러스터에서 실행되는 개발 공간에 직접 연결할 수 있습니다. 이를 통해 로컬 소프트웨어 설치 없이 Jupyter Lab 및 기타 웹 기반 개발 환경에 즉시 액세스할 수 있습니다.

## 사전 조건
<a name="browser-access-prereq"></a>

웹 UI 액세스를 설정하기 전에 다음을 완료했는지 확인합니다.
+ *SageMaker Spaces 추가 기능 설치*: [SageMaker Spaces 추가 기능 설치를 ](https://docs.aws.amazon.com/sagemaker/latest/dg/operator-install.html) 따르고 설치 중에 웹 UI 액세스를 활성화합니다.
+ *EKS 클러스터에 대한 사용자 액세스*: 사용자는 적절한 권한으로 구성된 EKS 액세스 항목이 필요합니다. [EKS 액세스 항목 설정 세부 정보는 사용자 추가 및 서비스 계정 설정을 참조하세요](https://docs.aws.amazon.com/sagemaker/latest/dg/add-user.html).
+ *개발 공간*: HyperPod 클러스터에서 개발 공간 생성 및 시작
+ *kubectl 액세스*: kubectl이 EKS 클러스터에 액세스하도록 구성되어 있는지 확인합니다.

## 웹 UI 액세스 URL 생성
<a name="browser-access-url"></a>

**HyperPod CLI 사용**

HyperPod CLI가 설치된 경우 다음 간소화된 명령을 사용할 수 있습니다.

```
hyp create hyp-space-access --name <space-name> --connection-type web-ui
```

**kubectl 사용**

`kubectl` 명령줄을 사용하여 연결 요청을 생성할 수도 있습니다.

```
kubectl create -f - -o yaml <<EOF
apiVersion: connection.workspace.jupyter.org/v1alpha1
kind: WorkspaceConnection
metadata:
  namespace: <space-namespace>
spec:
  workspaceName: <space-name>
  workspaceConnectionType: web-ui
EOF
```

URL은이 명령`status.workspaceConnectionUrl`의 출력에 있는에 있습니다.

## 개발 공간 액세스
<a name="browser-access-develop"></a>

1. 위의 방법 중 하나를 사용하여 *웹 UI URL 생성* 

1. 응답에서 *URL 복사* 

1. 웹 브라우저에서 *URL을 엽니다*.

1. 웹 인터페이스를 통해 *개발 환경에 액세스* 

## 지원되는 개발 환경
<a name="browser-access-develop-env"></a>

웹 UI는 다음에 대한 액세스를 제공합니다.
+ *Jupyter Lab*
+ *코드 편집기*

## 문제 해결
<a name="browser-access-troubleshooting"></a>

**액세스 URLs 생성할 수 없음**

다음을 확인하세요.
+ SageMaker Spaces 추가 기능 실행 중: kubectl get pods -n sagemaker-spaces-system
+ 개발 공간이 실행 중이고 정상임
+ 사용자에게 적절한 EKS 액세스 항목 권한이 있음

# SageMaker Spaces에 대한 원격 액세스
<a name="vscode-access"></a>

원격 액세스를 사용하면 로컬 Visual Studio 코드를 SageMaker HyperPod 클러스터에서 실행되는 개발 공간에 직접 연결할 수 있습니다. 원격 연결은 SSM을 사용하여 로컬 시스템과 개발 공간 간에 암호화된 보안 터널을 설정합니다.

## 사전 조건
<a name="vscode-access-prereq"></a>

원격 액세스를 설정하기 전에 다음을 완료했는지 확인합니다.
+ *SageMaker Spaces 추가 기능 설치*: [SageMaker Spaces 추가 기능 설치를](https://docs.aws.amazon.com/sagemaker/latest/dg/operator-install.html) 따르고 설치 중에 원격 액세스를 활성화합니다(원격 액세스 구성이 활성화된 빠른 설치 또는 사용자 지정 설치).
+ *EKS 클러스터에 대한 사용자 액세스*: 사용자는 적절한 권한으로 구성된 EKS 액세스 항목이 필요합니다. [EKS 액세스 항목 설정 세부 정보는 사용자 추가 및 서비스 계정 설정을 참조하세요](https://docs.aws.amazon.com/sagemaker/latest/dg/add-user.html).
+ *개발 공간*: HyperPod 클러스터에서 개발 공간 생성 및 시작
+ *kubectl 액세스*: kubectl이 EKS 클러스터에 액세스하도록 구성되어 있는지 확인합니다.

## VS Code 원격 연결 생성
<a name="vscode-access-remote"></a>

### HyperPod CLI 사용
<a name="vscode-access-remote-cli"></a>

HyperPod CLI가 설치된 경우 다음 간소화된 명령을 사용할 수 있습니다.

```
hyp create hyp-space-access --name <space-name> --connection-type vscode-remote
```

### kubectl 사용
<a name="vscode-access-remote-kubectl"></a>

`kubectl` 명령줄을 사용하여 연결 요청을 생성할 수도 있습니다.

```
kubectl create -f - -o yaml <<EOF
apiVersion: connection.workspace.jupyter.org/v1alpha1
kind: WorkspaceConnection
metadata:
  namespace: <space-namespace>
spec:
  workspaceName: <space-name>
  workspaceConnectionType: vscode-remote
EOF
```

URL은이 명령`status.workspaceConnectionUrl`의 출력에 있는에 있습니다.

## VS Code로 연결
<a name="vscode-access-remote-vscode"></a>

1. 위의 방법 중 하나를 사용하여 VS Code 연결 URL 생성

1. 응답에서 VS Code URL 복사

1. URL을 클릭하거나 브라우저에 붙여 넣습니다.

1. VS Code가 원격 연결을 열라는 메시지를 표시합니다.

1. 연결을 확인하여 원격 개발 환경 설정

## 지원되는 개발 환경
<a name="vscode-access-remote-dev-env"></a>

웹 UI는 다음에 대한 액세스를 제공합니다.
+ *Jupyter Lab*
+ *코드 편집기*

## 문제 해결
<a name="troubleshooting"></a>

**연결 URLs 생성할 수 없음**

*다음을 확인합니다.*
+ SageMaker Spaces 추가 기능 실행 중: kubectl get pods -n sagemaker-spaces-system
+ 개발 공간이 실행 중이고 정상임
+ 추가 기능 설치 중에 원격 액세스가 활성화됨
+ 사용자에게 적절한 EKS 액세스 항목 권한이 있음