

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

# GPU ドライバーのアップグレード中の中断を最小限に抑えるためのベストプラクティス
<a name="inference-gpu-drivers"></a>

SageMaker AI モデルのデプロイでは、リアルタイム、バッチ、および非同期推論オプションの GPU ドライバーが ML インスタンスで経時的にアップグレードされ、ドライバープロバイダーによる改善点をお客様が享受できます。以下に、各推論オプションでサポートされている GPU バージョンを示します。ドライバーのバージョンが異なると、モデルが GPU とやり取りする方法が変わる可能性があります。以下は、アプリケーションがさまざまなドライバーバージョンでどのように動作するかを理解するのに役立つ戦略の一部です。

## 現在のバージョンとサポートされているインスタンスファミリー
<a name="inference-gpu-drivers-versions"></a>

Amazon SageMaker AI 推論では、以下のドライバーとインスタンスファミリーがサポートされています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/inference-gpu-drivers.html)

## GPU 機能に関連するモデルコンテナのトラブルシューティング
<a name="inference-gpu-drivers-troubleshoot"></a>

GPU ワークロードを実行中に問題が発生した場合は、次のガイダンスを参照してください。

### GPU カードの検出エラーまたは NVIDIA 初期化エラー
<a name="collapsible-section-0"></a>

Docker コンテナ内から `nvidia-smi` (NVIDIA システム管理インターフェイス) コマンドを実行します。NVIDIA システム管理インターフェイスにより GPU 検出エラーまたは NVIDIA 初期化エラーが検出されると、次のエラーメッセージが返されます。

```
Failed to initialize NVML: Driver/library version mismatch
```

ユースケースに応じて、以下のベストプラクティスに従って障害またはエラーを解決します。
+ [BYO（Bring Your Own）モデルのコンテナの場合](#collapsible-byoc) ドロップダウンに表示されるベストプラクティスの推奨事項に従います。
+ [CUDA 互換性レイヤーを使用する場合](#collapsible-cuda-compat) ドロップダウンに表示されるベストプラクティスの推奨事項に従います。

詳細については、NVIDIA Web サイトの [NVIDIA システム管理インターフェイスのページ](https://developer.nvidia.com/nvidia-system-management-interface)を参照してください。

### `CannotStartContainerError`
<a name="collapsible-section-cannot-start-container"></a>

 GPU インスタンスで使用されている NVIDIA ドライバーのバージョンが Docker コンテナの CUDA バージョンと互換性がない場合、エンドポイントのデプロイは失敗し、次のエラーメッセージが表示されます。

```
 Failure reason CannotStartContainerError. Please ensure the model container for variant <variant_name> starts correctly when invoked with 'docker run <image> serve'
```

ユースケースに応じて、以下のベストプラクティスに従って障害またはエラーを解決します。
+ [コンテナが依存しているドライバーが ML GPU インスタンスのバージョンよりも新しい](#collapsible-driver-dependency-higher) ドロップダウンに表示されるベストプラクティスの推奨事項に従います。
+ [CUDA 互換性レイヤーを使用する場合](#collapsible-cuda-compat) ドロップダウンに表示されるベストプラクティスの推奨事項に従います。

## ドライバのバージョンが一致しない場合のベストプラクティス
<a name="inference-gpu-drivers-cuda-toolkit-updates"></a>

以下に、GPU ドライバーの更新方法に関する情報を示します。

### コンテナが依存しているドライバーが ML GPU インスタンスのバージョンよりも古い
<a name="collapsible-driver-dependency-lower"></a>

アクションは必要ありません。NVIDIA には下位互換性があります。

### コンテナが依存しているドライバーが ML GPU インスタンスのバージョンよりも新しい
<a name="collapsible-driver-dependency-higher"></a>

マイナーバージョンアップによる違いであれば、何もする必要はありません。NVIDIA はマイナーバージョンでの上位互換性を備えています。

メジャーバージョンアップによる違いであれば、CUDA Compatibility Package をインストールする必要があります。NVIDIA ドキュメントの 「[CUDA Compatibility Package](https://docs.nvidia.com/deploy/cuda-compatibility/index.html)」を参照してください。

**重要**  
CUDA Compatibility Package は下位互換性を備えていないため、インスタンスのドライバーバージョンが CUDA Compatibility Package バージョンよりも新しい場合は、無効にする必要があります。

### BYO（Bring Your Own）モデルのコンテナの場合
<a name="collapsible-byoc"></a>

ホスト上の NVIDIA ドライバーバージョンと競合する可能性のある NVIDIA ドライバーパッケージがイメージにバンドルされていないことを確認してください。

### CUDA 互換性レイヤーを使用する場合
<a name="collapsible-cuda-compat"></a>

プラットフォームの Nvidia ドライバーバージョンが、モデルコンテナにインストールされている CUDA Compatibility Package バージョンをサポートしているかどうかを確認するには、[CUDA のドキュメント](https://docs.nvidia.com/deploy/cuda-compatibility/index.html#use-the-right-compat-package)を参照してください。プラットフォームの Nvidia ドライバーバージョンが CUDA Compatibility Package をサポートしていない場合は、CUDA Compatibility Package を無効化するか、モデルコンテナイメージから CUDA Compatibility Package 削除します。CUDA Compatibility libs のバージョンが最新の Nvidia ドライバーバージョンでサポートされている場合は、以下のコードスニペットをコンテナ起動シェルスクリプト (`ENTRYPOINT` スクリプト) に追加して、将来の互換性を保障するために、検出された Nvidia ドライバーバージョンに基づいて CUDA Compatibility Package を有効にすることをお勧めします。

このスクリプトは、モデルコンテナのデプロイされたホストで検出された Nvidia ドライバーバージョンに基づいて、CUDA Compatibility Package の使用を動的に切り替える方法を示しています。SageMaker が新しいバージョンの Nvidia ドライバーをリリースする際、CUDA アプリケーションが新しいドライバーでネイティブにサポートされていれば、インストールされている CUDA Compatibility Package が自動的にオフになります。

```
#!/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
```