

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

# SOCI를 사용하여 컨테이너 시작 속도 향상
<a name="soci-indexing"></a>

SOCI(Seekable Open Container Initiative) 인덱싱을 사용하면 [Amazon SageMaker Studio](studio-updated.md) 또는 [Amazon SageMaker Unified Studio](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/what-is-sagemaker-unified-studio.html)에서 사용자 지정 컨테이너 이미지를 느리게 로드할 수 있습니다. SOCI는 사용자 지정 [기존 보유 이미지 사용(BYOI)](studio-updated-byoi.md) 컨테이너의 시작 시간을 약 30\$170% 크게 줄입니다. 지연 시간 개선은 이미지 크기, 호스팅 인스턴스 가용성 및 기타 애플리케이션 종속성에 따라 달라집니다. SOCI는 필요한 구성 요소만으로 컨테이너를 시작할 수 있도록 하는 인덱스를 생성하여 필요에 따라 추가 파일을 온디맨드로 가져옵니다.

SOCI는 사용자 지정 이미지에 대해 반복 기계 학습(ML) 개발 워크플로를 방해하는 느린 컨테이너 시작 시간을 해결합니다. ML 워크로드가 더 복잡해짐에 따라 컨테이너 이미지가 더 커져 개발 주기를 방해하는 시작 지연이 발생했습니다.

**Topics**
+ [주요 이점](#soci-indexing-key-benefits)
+ [SOCI 인덱싱 작동 방식](#soci-indexing-how-works)
+ [아키텍처 구성 요소](#soci-indexing-architecture-components)
+ [지원되는 도구](#soci-indexing-supported-tools)
+ [SOCI 인덱싱에 대한 권한](soci-indexing-setup.md)
+ [nerdctl 및 SOCI CLI 예제를 사용하여 SOCI 인덱스 생성](soci-indexing-example-create-indexes.md)
+ [SOCI 인덱싱된 이미지를 Studio 예제와 통합](soci-indexing-example-integrate-studio.md)

## 주요 이점
<a name="soci-indexing-key-benefits"></a>
+ **더 빠른 반복 주기**: 이미지 및 인스턴스 유형에 따라 컨테이너 시작 감소
+ **범용 최적화**: Studio의 모든 사용자 지정 BYOI 컨테이너로 성능 이점 확장

## SOCI 인덱싱 작동 방식
<a name="soci-indexing-how-works"></a>

SOCI는 컨테이너 이미지의 내부 파일 구조를 매핑하는 특수 메타데이터 인덱스를 생성합니다. 이 인덱스를 사용하면 전체 이미지를 다운로드하지 않고도 개별 파일에 액세스할 수 있습니다. SOCI 인덱스는 [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)에 OCI(Open Container Initiative) 준수 아티팩트로 저장되고 원본 컨테이너 이미지에 연결되어 이미지 다이제스트와 서명 유효성을 유지합니다.

Studio에서 컨테이너를 시작하면 시스템은 SOCI 인덱스를 사용하여 시작에 필요한 필수 파일만 식별하고 다운로드합니다. 추가 구성 요소는 애플리케이션에 필요하므로 병렬로 가져옵니다.

## 아키텍처 구성 요소
<a name="soci-indexing-architecture-components"></a>
+ **원본 컨테이너 이미지**: Amazon ECR에 저장된 기본 컨테이너
+ **SOCI 인덱스 아티팩트**: 이미지의 파일 구조 메타데이터 매핑
+ **OCI 이미지 인덱스 매니페스트**: 원본 이미지와 SOCI 인덱스를 연결합니다.
+ **Finch 컨테이너 런타임**: Studio와의 지연 로딩 통합을 활성화합니다.

## 지원되는 도구
<a name="soci-indexing-supported-tools"></a>


| 도구 | 통합 | 
| --- | --- | 
| nerdctl | 컨테이너 설정 필요 | 
| Finch CLI | 기본 SOCI 지원 | 
| Docker \$1 SOCI CLI | 추가 도구 필요 | 

**Topics**
+ [주요 이점](#soci-indexing-key-benefits)
+ [SOCI 인덱싱 작동 방식](#soci-indexing-how-works)
+ [아키텍처 구성 요소](#soci-indexing-architecture-components)
+ [지원되는 도구](#soci-indexing-supported-tools)
+ [SOCI 인덱싱에 대한 권한](soci-indexing-setup.md)
+ [nerdctl 및 SOCI CLI 예제를 사용하여 SOCI 인덱스 생성](soci-indexing-example-create-indexes.md)
+ [SOCI 인덱싱된 이미지를 Studio 예제와 통합](soci-indexing-example-integrate-studio.md)

# SOCI 인덱싱에 대한 권한
<a name="soci-indexing-setup"></a>

[Amazon SageMaker Studio](studio-updated.md) 또는 Amazon [Amazon SageMaker ](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/what-is-sagemaker-unified-studio.html)ECR에 저장합니다.

**Topics**
+ [사전 조건](#soci-indexing-setup-prerequisites)
+ [필수 IAM 권한](#soci-indexing-setup-iam-permissions)

## 사전 조건
<a name="soci-indexing-setup-prerequisites"></a>
+ AWS 계정 관리 권한이 있는 [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) (IAM) 역할 사용
  + [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
  + [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/gs.html)
+ 컨테이너 이미지를 저장하기 위한 [Amazon ECR 프라이빗 리포지토리](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html) 
+ 적절한 자격 증명으로 구성된 [AWS CLI v2.0 이상](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 
+ 다음 컨테이너 도구:
  + 필수: [soci-snapshotter](https://github.com/awslabs/soci-snapshotter)
  + 옵션:
    + [nerdctl](https://github.com/containerd/nerdctl)
    + [핀치](https://github.com/runfinch/finch)

## 필수 IAM 권한
<a name="soci-indexing-setup-iam-permissions"></a>

IAM 역할에는 다음과 같은 권한이 필요합니다.
+ SageMaker AI 리소스(도메인, 이미지, 앱 구성)를 생성하고 관리합니다.
  + [SageMakerFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html) AWS 관리형 정책을 사용할 수 있습니다. 권한에 대한 자세한 내용은 섹션을 참조하세요[AWS 관리형 정책: AmazonSageMakerFullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonSageMakerFullAccess).
+ [이미지를 Amazon ECR 프라이빗 리포지토리로 푸시하기 위한 IAM 권한](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-push-iam.html)입니다.

# nerdctl 및 SOCI CLI 예제를 사용하여 SOCI 인덱스 생성
<a name="soci-indexing-example-create-indexes"></a>

다음 페이지에서는 nerdctl 및 SOCI CLI를 사용하여 SOCI 인덱스를 생성하는 방법에 대한 예제를 제공합니다.

**SOCI 인덱스 생성 예제**

1. 먼저 다음 AWS CLI 명령에 대한 변수를 설정합니다. 다음은 변수를 설정하는 예제입니다.

   ```
   ACCOUNT_ID="111122223333"
   REGION="us-east-1"
   REPOSITORY_NAME="repository-name"
   ORIGINAL_IMAGE_TAG="original-image-tag"
   SOCI_IMAGE_TAG="soci-indexed-image-tag"
   ```

   변수 정의:
   + `ACCOUNT_ID`는 ID입니다 AWS 계정 .
   + `REGION`는 Amazon ECR 프라이빗 레지스트리 AWS 리전 의 입니다.
   + `REPOSITORY_NAME`는 Amazon ECR 프라이빗 레지스트리의 이름입니다.
   + `ORIGINAL_IMAGE_TAG`는 원본 이미지의 태그입니다.
   + `SOCI_IMAGE_TAG`는 SOCI로 인덱싱된 이미지의 태그입니다.

1. 필요한 도구를 설치합니다.

   ```
   # Install SOCI CLI, containerd, and nerdctl
   sudo yum install soci-snapshotter
   sudo yum install containerd jq  
   sudo systemctl start soci-snapshotter
   sudo systemctl restart containerd
   sudo yum install nerdctl
   ```

1. 레지스트리 변수를 설정합니다.

   ```
   REGISTRY_USER=AWS
   REGISTRY="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com"
   ```

1. 리전을 내보내고 Amazon ECR에 인증합니다.

   ```
   export AWS_REGION=$REGION
   REGISTRY_PASSWORD=$(/usr/local/bin/aws ecr get-login-password --region $AWS_REGION)
   echo $REGISTRY_PASSWORD | sudo nerdctl login -u $REGISTRY_USER --password-stdin $REGISTRY
   ```

1. 원래 컨테이너 이미지를 가져옵니다.

   ```
   sudo nerdctl pull $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG
   ```

1. SOCI 인덱스를 생성합니다.

   ```
   sudo nerdctl image convert --soci $REGISTRY/$REPOSITORY_NAME:$ORIGINAL_IMAGE_TAG $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG
   ```

1. SOCI로 인덱싱된 이미지를 푸시합니다.

   ```
   sudo nerdctl push --platform linux/amd64 $REGISTRY/$REPOSITORY_NAME:$SOCI_IMAGE_TAG
   ```

이 프로세스는 ECR 리포지토리의 원래 컨테이너 이미지에 대해 두 개의 아티팩트를 생성합니다.
+ SOCI 인덱스 - 지연 로딩을 활성화하는 메타데이터
+ 이미지 인덱스 매니페스트 - OCI 준수 매니페스트

# SOCI 인덱싱된 이미지를 Studio 예제와 통합
<a name="soci-indexing-example-integrate-studio"></a>

원본 컨테이너 이미지 태그가 아닌 Studio에서 SOCI 인덱스 이미지를 사용하려면 SOCI 인덱스 이미지 태그를 참조해야 합니다. SOCI 변환 프로세스 중에 지정한 태그를 사용합니다(예: `SOCI_IMAGE_TAG`에서[nerdctl 및 SOCI CLI 예제를 사용하여 SOCI 인덱스 생성](soci-indexing-example-create-indexes.md)).

**SOCI 인덱싱 이미지 통합 예제**

1. 먼저 다음 AWS CLI 명령에 대한 변수를 설정합니다. 다음은 변수를 설정하는 예제입니다.

   ```
   ACCOUNT_ID="111122223333"
   REGION="us-east-1"
   IMAGE_NAME="sagemaker-image-name"
   IMAGE_CONFIG_NAME="sagemaker-image-config-name"
   ROLE_ARN="your-role-arn"
   DOMAIN_ID="domain-id"
   SOCI_IMAGE_TAG="soci-indexed-image-tag"
   ```

   변수 정의:
   + `ACCOUNT_ID`는 ID입니다 AWS 계정 .
   + `REGION`는 Amazon ECR 프라이빗 레지스트리 AWS 리전 의 입니다.
   + `IMAGE_NAME`는 SageMaker 이미지의 이름입니다.
   + `IMAGE_CONFIG_NAME`는 SageMaker 이미지 구성의 이름입니다.
   + `ROLE_ARN`는 [필수 IAM](soci-indexing-setup.md#soci-indexing-setup-iam-permissions) 권한에 나열된 권한을 가진 실행 역할의 ARN입니다.
   + `DOMAIN_ID`는 [도메인 ID](https://docs.aws.amazon.com/sagemaker/latest/dg/domain-view.html)입니다.
**참고**  
이미지를 SageMaker Unified Studio 프로젝트에 연결하고 사용할 도메인에 대한 설명이 필요한 경우 [프로젝트와 연결된 SageMaker AI 도메인 세부 정보 보기를 참조하세요](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/view-project-details.html#view-project-details-smai-domain).
   + `SOCI_IMAGE_TAG`는 SOCI로 인덱싱된 이미지의 태그입니다.

1. 리전을 내보냅니다.

   ```
   export AWS_REGION=$REGION
   ```

1. SageMaker 이미지 생성:

   ```
   aws sagemaker create-image \
       --image-name "$IMAGE_NAME" \
       --role-arn "$ROLE_ARN"
   ```

1. SOCI 인덱스 URI를 사용하여 SageMaker 이미지 버전을 생성합니다.

   ```
   IMAGE_INDEX_URI="$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$IMAGE_NAME:$SOCI_IMAGE_TAG"
   
   aws sagemaker create-image-version \
       --image-name "$IMAGE_NAME" \
       --base-image "$IMAGE_INDEX_URI"
   ```

1. 애플리케이션 이미지 구성을 생성하고 Amazon SageMaker AI 도메인을 업데이트하여 앱의 사용자 지정 이미지를 포함합니다. Code-OSS, Visual Studio Code - Open Source(Code Editor) 및 JupyterLab 애플리케이션을 기반으로 Code Editor에 대해이 작업을 수행할 수 있습니다. 아래 애플리케이션 옵션을 선택하여 단계를 확인합니다.

------
#### [ Code Editor ]

   코드 편집기에 대한 애플리케이션 이미지 구성을 생성합니다.

   ```
   aws sagemaker create-app-image-config \
       --app-image-config-name "$IMAGE_CONFIG_NAME" \
       --code-editor-app-image-config '{ "FileSystemConfig": { "MountPath": "/home/sagemaker-user", "DefaultUid": 1000, "DefaultGid": 100 } }'
   ```

   코드 편집기의 사용자 지정 이미지를 포함하도록 Amazon SageMaker AI 도메인을 업데이트합니다.

   ```
   aws sagemaker update-domain \
       --domain-id "$DOMAIN_ID" \
       --default-user-settings '{
           "CodeEditorAppSettings": {
           "CustomImages": [{
               "ImageName": "$IMAGE_NAME", 
               "AppImageConfigName": "$IMAGE_CONFIG_NAME"
           }]
       }
   }'
   ```

------
#### [ JupyterLab ]

   JupyterLab에 대한 애플리케이션 이미지 구성을 생성합니다.

   ```
   aws sagemaker create-app-image-config \
       --app-image-config-name "$IMAGE_CONFIG_NAME" \
       --jupyter-lab-app-image-config '{ "FileSystemConfig": { "MountPath": "/home/sagemaker-user", "DefaultUid": 1000, "DefaultGid": 100 } }'
   ```

   JupyterLab용 사용자 지정 이미지를 포함하도록 Amazon SageMaker AI 도메인을 업데이트합니다.

   ```
   aws sagemaker update-domain \
       --domain-id "$DOMAIN_ID" \
       --default-user-settings '{
           "JupyterLabAppSettings": {
           "CustomImages": [{
               "ImageName": "$IMAGE_NAME", 
               "AppImageConfigName": "$IMAGE_CONFIG_NAME"
           }]
       }
   }'
   ```

------

1. 사용자 지정 이미지를 포함하도록 도메인을 업데이트한 후 사용자 지정 이미지를 사용하여 Studio에서 애플리케이션을 생성할 수 있습니다. 사용자 지정 이미지를 사용하고 있는지 [Studio에서 사용자 지정 이미지 시작](studio-updated-byoi-how-to-launch.md) 확인하는 경우.