

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 は、カスタム[Bring your own image (BYOI)](studio-updated-byoi.md)コンテナの起動時間を約 30～70% 大幅に短縮します。レイテンシーの改善は、イメージのサイズ、ホスティングインスタンスの可用性、その他のアプリケーションの依存関係によって異なります。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 インデックスは、OCI (Open Container Initiative) 準拠のアーティファクトとして [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) に保存され、元のコンテナイメージにリンクされ、イメージダイジェストと署名の有効性が保持されます。

Studio でコンテナを起動すると、システムは SOCI インデックスを使用して、起動に必要な必須ファイルのみを識別してダウンロードします。アプリケーションが必要とする追加のコンポーネントは並行して取得されます。

## アーキテクチャのコンポーネント
<a name="soci-indexing-architecture-components"></a>
+ **元のコンテナイメージ**: Amazon ECR に保存されているベースコンテナ
+ **SOCI インデックスアーティファクト**: イメージのファイル構造のメタデータマッピング
+ **OCI イメージインデックスマニフェスト**: 元のイメージと SOCI インデックスをリンクします
+ **Finch コンテナランタイム**: Studio との遅延ロード統合を有効にします

## サポートされているツール
<a name="soci-indexing-supported-tools"></a>


| ツール | 統合 | 
| --- | --- | 
| ノード | コンテナ化されたセットアップが必要 | 
| 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\$1](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 
+ 次のコンテナツール:
  + 必須: [soci-snapshotter](https://github.com/awslabs/soci-snapshotter)
  + オプション:
    + [ノード](https://github.com/containerd/nerdctl)
    + [finch](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` は AWS アカウント ID です
   + `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 リポジトリ内の元のコンテナイメージに 2 つのアーティファクトを作成します。
+ SOCI インデックス - 遅延ロードを有効にするメタデータ
+ Image Index マニフェスト - 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` は AWS アカウント ID です
   + `REGION` は Amazon ECR プライベートレジストリ AWS リージョン の です。
   + `IMAGE_NAME` は SageMaker イメージの名前です
   + `IMAGE_CONFIG_NAME` は SageMaker イメージ設定の名前です。
   + `ROLE_ARN` は、[必要な IAM アクセス許可に記載されているアクセス許可を持つ実行ロールの ARN ](soci-indexing-setup.md#soci-indexing-setup-iam-permissions)です。
   + `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 ]

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

   Amazon SageMaker AI ドメインを更新して、JupyterLab のカスタムイメージを含めます。

   ```
   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)ていることを確認する場合。