

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

# NVIDIA Container Toolkit に準拠するための推論コンテナの更新
<a name="container-nvidia-compliance"></a>

バージョン 1.17.4 以降、NVIDIA Container Toolkit では CUDA 互換ライブラリが自動的にマウントされなくなりました。この動作の変更に伴い、SageMaker AI 推論ワークロードが影響を受ける可能性があります。SageMaker AI エンドポイントとバッチ変換ジョブでは、NVIDIA Container Toolkit の最新バージョンと互換性のないコンテナを使用している場合があります。ワークロードで最新の要件に準拠するようにするには、エンドポイントの更新かバッチ変換ジョブの設定が必要になる場合があります。

## 互換性を維持するための SageMaker AI エンドポイントの更新
<a name="endpoint-compliance"></a>

既存の SageMaker AI エンドポイントを更新するか、最新のデフォルト動作をサポートする新しいエンドポイントを作成することが推奨されています。

エンドポイントが NVIDIA Container Toolkit の最新バージョンと互換性があることを確認するには、次の手順に従います。

1. 独自のコンテナを持ち込む場合は、CUDA 互換ライブラリの設定方法を更新します。

1. 最新の NVIDIA Container Toolkit の動作をサポートする推論 Amazon マシンイメージ (AMI) を指定します。既存のエンドポイントを更新するか、新しいエンドポイントを作成するときに AMI を指定します。

### 独自のコンテナを持ち込む場合の CUDA 互換設定の更新
<a name="cuda-compatibility"></a>

CUDA 互換ライブラリによって前方互換が可能になります。この互換性は、SageMaker AI インスタンスが提供する NVIDIA ドライバーよりも新しい CUDA ツールキットバージョンに適用されます。

SageMaker AI インスタンスで使用する NVIDIA ドライバーにモデルコンテナの CUDA ツールキットよりも古いバージョンがある場合にのみ、CUDA 互換ライブラリを有効にする必要があります。モデルコンテナに CUDA 互換性が必要ない場合は、このステップをスキップしても構いません。たとえば、SageMaker AI インスタンスが提供するものよりも新しい CUDA ツールキットを使用する予定がない場合は、このステップをスキップして構いません。

NVIDIA Container Toolkit バージョン 1.17.4 で導入された変更により、必要に応じてコンテナの `LD_LIBRARY_PATH` に追加することで CUDA 互換ライブラリを明示的に有効にできます。

検出された NVIDIA ドライバーのバージョンに基づいて CUDA 互換性を有効にすることが推奨されています。これを有効にするには、以下のコードスニペットをコンテナ起動シェルスクリプトに追加します。このコードを `ENTRYPOINT` スクリプトに追加します。

次のスクリプトは、モデルコンテナのデプロイされたホストで検出された NVIDIA ドライバーバージョンに基づいて、CUDA 互換性の使用を動的に切り替える方法を示しています。

```
#!/bin/bash

verlt() {
    [ "$1" = "$2" ] && return 1 || [ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
}

if [ -f /usr/local/cuda/compat/libcuda.so.1 ]; then
    CUDA_COMPAT_MAX_DRIVER_VERSION=$(readlink /usr/local/cuda/compat/libcuda.so.1 | cut -d'.' -f 3-)
    echo "CUDA compat package should be installed for NVIDIA driver smaller than ${CUDA_COMPAT_MAX_DRIVER_VERSION}"
    NVIDIA_DRIVER_VERSION=$(sed -n 's/^NVRM.*Kernel Module *\([0-9.]*\).*$/\1/p' /proc/driver/nvidia/version 2>/dev/null || true)
    echo "Current installed NVIDIA driver version is ${NVIDIA_DRIVER_VERSION}"
    if verlt $NVIDIA_DRIVER_VERSION $CUDA_COMPAT_MAX_DRIVER_VERSION; then
        echo "Adding CUDA compat to LD_LIBRARY_PATH"
        export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH
        echo $LD_LIBRARY_PATH
    else
        echo "Skipping CUDA compat setup as newer NVIDIA driver is installed"
    fi
else
    echo "Skipping CUDA compat setup as package not found"
fi
```

### NVIDIA Container Toolkit に準拠する推論 AMI の指定
<a name="specify-inference-ami"></a>

`ProductionVariant` データ型の `InferenceAmiVersion` パラメータでは、SageMaker AI エンドポイントの AMI を選択できます。サポートされている各 AMI は事前設定されたイメージです。各イメージは、一連のソフトウェアおよびドライバーバージョン AWS で によって設定されます。

デフォルトでは、SageMaker AI AMI は従来の動作に従います。CUDA 互換ライブラリはコンテナ内に自動的にマウントされます。エンドポイントで新しい動作を使用するには、新しい動作用に設定されている推論 AMI バージョンを指定する必要があります。

現在、次の推論 AMI バージョンが新しい動作に従います。CUDA 互換ライブラリは自動的にマウントされません。

al2-ami-sagemaker-inference-gpu-2-1  
+ NVIDIA ドライバーバージョン: 535.54.03
+ CUDA バージョン: 12.2

al2-ami-sagemaker-inference-gpu-3-1  
+ NVIDIA ドライバーバージョン: 550.144.01
+ CUDA バージョン: 12.4

### 既存のエンドポイントの更新
<a name="update-existing-endpoint"></a>

次の例を使用して既存のエンドポイントを更新します。この例では、CUDA 互換ライブラリの自動マウントを無効にする推論 AMI バージョンを使用しています。

```
ENDPOINT_NAME="<endpoint name>"
INFERENCE_AMI_VERSION="al2-ami-sagemaker-inference-gpu-3-1"

# Obtaining current endpoint configuration
CURRENT_ENDPOINT_CFG_NAME=$(aws sagemaker describe-endpoint --endpoint-name "$ENDPOINT_NAME" --query "EndpointConfigName" --output text)
NEW_ENDPOINT_CFG_NAME="${CURRENT_ENDPOINT_CFG_NAME}new"

# Copying Endpoint Configuration with AMI version specified
aws sagemaker describe-endpoint-config \
    --endpoint-config-name ${CURRENT_ENDPOINT_CFG_NAME} \
    --output json | \
jq "del(.EndpointConfigArn, .CreationTime) | . + {
    EndpointConfigName: \"${NEW_ENDPOINT_CFG_NAME}\",
    ProductionVariants: (.ProductionVariants | map(.InferenceAmiVersion = \"${INFERENCE_AMI_VERSION}\"))
}" > /tmp/new_endpoint_config.json

# Make sure all fields in the new endpoint config look as expected
cat /tmp/new_endpoint_config.json

# Creating new endpoint config
aws sagemaker create-endpoint-config \
   --cli-input-json file:///tmp/new_endpoint_config.json
    
# Updating the endpoint
aws sagemaker update-endpoint \
    --endpoint-name "$ENDPOINT_NAME" \
    --endpoint-config-name "$NEW_ENDPOINT_CFG_NAME" \
    --retain-all-variant-properties
```

### 新しいエンドポイントの作成
<a name="create-new-endpoint"></a>

次の例を使用して新しいエンドポイントを作成します。この例では、CUDA 互換ライブラリの自動マウントを無効にする推論 AMI バージョンを使用しています。

```
INFERENCE_AMI_VERSION="al2-ami-sagemaker-inference-gpu-3-1"

aws sagemakercreate-endpoint-config \
 --endpoint-config-name "<endpoint_config>" \
 --production-variants '[{ \
    ....
    "InferenceAmiVersion":  "${INFERENCE_AMI_VERSION}", \
    ...
    "}]'

aws sagemaker create-endpoint \
--endpoint-name "<endpoint_name>" \
--endpoint-config-name "<endpoint_config>"
```

## 要件に準拠したバッチ変換ジョブの実行
<a name="batch-compliance"></a>

*バッチ変換*は、大量のデータをオフラインで処理するリクエストに最適な推論オプションです。バッチ変換ジョブを作成するには、`CreateTransformJob` API アクションを使用します。詳細については、「[Amazon SageMaker AI による推論のためのバッチ変換](batch-transform.md)」を参照してください。

NVIDIA Container Toolkit の変更された動作はバッチ変換ジョブに影響します。NVIDIA Container Toolkit の要件に準拠したバッチ変換を実行するには、次の手順を実行します。

1. 独自のコンテナを持ち込んだモデルでバッチ変換を実行する場合は、まず CUDA 互換性のためにコンテナを更新します。コンテナを更新するには、「[独自のコンテナを持ち込む場合の CUDA 互換設定の更新](#cuda-compatibility)」のプロセスに従います。

1. `CreateTransformJob` API アクションを使用してバッチ変換ジョブを作成します。リクエストで、`SAGEMAKER_CUDA_COMPAT_DISABLED` 環境変数を `true` に設定します。このパラメータでは、CUDA 互換ライブラリを自動的にマウントしないようコンテナに指示します。

   たとえば、 を使用してバッチ変換ジョブを作成する場合 AWS CLI、 `--environment`パラメータを使用して 環境変数を設定します。

   ```
   aws sagemaker create-transform-job \
       --environment '{"SAGEMAKER_CUDA_COMPAT_DISABLED": "true"}'\
       . . .
   ```