本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
最小化GPU驅動程式升級期間中斷的最佳實務
SageMaker 模型部署會隨著時間升級 ML 執行個體上的即時、批次和非同步推論選項的GPU驅動程式,讓客戶能夠存取驅動程式提供者的改進。您可以在下方查看每個推論選項支援的GPU版本。不同的驅動程式版本可以變更模型與 互動的方式GPUs。以下是一些策略,可協助您瞭解應用程式如何搭配不同的驅動程式版本運作。
目前版本和支援的執行個體系列
Amazon SageMaker Inference 支援下列驅動程式和執行個體系列:
服務 | GPU | 驅動程式版本 | 執行個體類型 |
---|---|---|---|
Real-time | NVIDIA | 470.57.02 | ml.p2.*, ml.p3.*, ml.p4d.*, ml.p4de.*, ml.g4dn.*, ml.g5.* |
535.54.03 | ml.p5.*、ml.g6.* | ||
批次 | NVIDIA | 470.57.02 | ml.p2.*, ml.p3.*, ml.p4d.*, ml.p4de.*, ml.g4dn.*, ml.g5* |
非同步推論 | NVIDIA | 470.57.02 | ml.p2.*, ml.p3.*, ml.p4d.*, ml.p4de.*, ml.g4dn.*, ml.g5* |
535.54.03 | ml.p5.*、ml.g6.* |
使用 GPU功能對模型容器進行故障診斷
如果您在執行GPU工作負載時遇到問題,請參閱下列指引:
從 Docker 容器內執行 nvidia-smi
(NVIDIA 系統管理介面) 命令。如果NVIDIA系統管理介面偵測到GPU偵測錯誤或NVIDIA初始化錯誤,則會傳回下列錯誤訊息:
Failed to initialize NVML: Driver/library version mismatch
根據您的使用案例,請遵循下列最佳作法來解決失敗或錯誤:
請遵循如果您攜帶自己的 (BYO) 模型容器下拉式清單中描述的最佳作法建議。
請遵循如果您使用CUDA相容性層下拉式清單中描述的最佳作法建議。
如需詳細資訊,請參閱 NVIDIA網站上的NVIDIA系統管理介面頁面
如果您的GPU執行個體使用與 Docker 容器中的版本不相容的NVIDIA驅動程式CUDA版本,則部署端點將會失敗,並顯示下列錯誤訊息:
Failure reason CannotStartContainerError. Please ensure the model container for variant <variant_name> starts correctly when invoked with 'docker run <image> serve'
根據您的使用案例,請遵循下列最佳作法來解決失敗或錯誤:
請遵循我的容器所依賴的驅動程式大於 ML GPU執行個體上的版本下拉式清單中描述的最佳作法建議。
請遵循如果您使用CUDA相容性層下拉式清單中描述的最佳作法建議。
使用不相符驅動程式版本的最佳實務
下列提供如何更新GPU驅動程式的相關資訊:
無需採取任何動作。NVIDIA 提供向後相容性。
如果這是一個較小的版本差異,則不需要採取任何行動。NVIDIA 提供次要版本轉送相容性。
如果是主要版本差異,則需要安裝CUDA相容性套件。請參閱 NVIDIA 文件中的CUDA相容性套件
重要
CUDA 相容性套件不向後相容,因此如果執行個體上的驅動程式版本大於相容性套件版本,則需要停用CUDA該套件。
確保映像中沒有套件NVIDIA驅動程式套件,這可能會導致主機NVIDIA驅動程式版本與 衝突。
若要驗證平台 Nvidia 驅動程式版本是否支援安裝在模型容器中的CUDA相容性套件版本,請參閱 CUDA 文件 ENTRYPOINT
指令碼中)。
此指令碼示範如何根據模型容器部署的主機上偵測到的 Nvidia CUDA 驅動程式版本,動態切換相容性套件的使用。當 SageMaker 發行較新的 Nvidia CUDA 驅動程式版本時,如果新驅動程式原生支援CUDA應用程式,則會自動關閉已安裝的相容性套件。
#!/bin/bash verlte() { [ "$1" = "$2" ] && return 1 || [ "$2" = "`echo -e "$1\n$2" | sort -V | head -n1`" ] } if [ -f /usr/local/cuda/compat/libcuda.so.1 ]; then cat /usr/local/cuda/version.txt CUDA_COMPAT_MAX_DRIVER_VERSION=$(readlink /usr/local/cuda/compat/libcuda.so.1 |cut -d'.' -f 3-) echo "CUDA compat package requires Nvidia driver ⩽${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 [ $(verlte $CUDA_COMPAT_MAX_DRIVER_VERSION $NVIDIA_DRIVER_VERSION) ]; then echo "Setup CUDA compatibility libs path to LD_LIBRARY_PATH" export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH echo $LD_LIBRARY_PATH else echo "Skip CUDA compat libs setup as newer Nvidia driver is installed" fi else echo "Skip CUDA compat libs setup as package not found" fi