本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
更新推論容器以符合 NVIDIA 容器工具組
從 1.17.4 版及更新版本開始,NVIDIA 容器工具組不再自動掛載 CUDA 相容性程式庫。此行為變更可能會影響 SageMaker AI 推論工作負載。您的 SageMaker AI 端點和批次轉換任務可能會使用與最新版 NVIDIA 容器工具組不相容的容器。為了確保工作負載符合最新需求,您可能需要更新端點或設定批次轉換任務。
更新 SageMaker AI 端點以確保合規性
我們建議您更新現有的 SageMaker AI 端點,或建立支援最新預設行為的新端點。
若要確保端點與最新版的 NVIDIA 容器工具組相容,請依照下列步驟執行:
-
如果您使用自有容器,請更新如何設定 CUDA 相容性程式庫。
-
指定支援最新 NVIDIA 容器工具組行為的推論 Amazon Machine Image (AMI)。您可以在更新現有端點或建立新的端點時指定 AMI。
如果您使用自有容器,請更新 CUDA 相容性設定
CUDA 相容性程式庫能夠向前相容。此相容性適用於比 SageMaker AI 執行個體所提供 NVIDIA 驅動程式新的任何 CUDA 工具組版本。
只有當 SageMaker AI 執行個體使用的 NVIDIA 驅動程式其版本比模型容器中的 CUDA 工具組舊時,您才必須啟用 CUDA 相容性程式庫。如果您的模型容器不需要 CUDA 相容性,可以略過此步驟。例如,如果您不打算使用比 SageMaker AI 執行個體所提供 CUDA 工具組還新的工具組,則可以略過此步驟。
由於 NVIDIA 容器工具組 1.17.4 版中引入的變更,您可以視需要明確啟用 CUDA 相容性程式庫,方法是將程式庫新增至容器中的 LD_LIBRARY_PATH。
我們建議您根據偵測到的 NVIDIA 驅動程式版本啟用 CUDA 相容性。若要啟用它,請將下方的程式碼片段新增至容器啟動 shell 指令碼。在 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 容器工具組的推論 AMI
在 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
-
更新現有端點
使用下列範例來更新現有的端點。此範例使用推論 AMI 版本,可停用 CUDA 相容性程式庫的自動掛載。
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
建立新的端點
使用以下範例建立新端點。此範例使用推論 AMI 版本,可停用 CUDA 相容性程式庫的自動掛載。
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>"
執行合規批次轉換任務
批次轉換是推論選項,最適合離線處理大量資料的請求。若要建立批次轉換任務,您可以使用 CreateTransformJob API 動作。如需詳細資訊,請參閱使用 Amazon SageMaker AI 進行批次轉換以進行推論。
NVIDIA 容器工具組的變更行為會影響批次轉換任務。若要執行符合 NVIDIA 容器工具組需求的批次轉換,請執行以下操作:
-
如果您想要透過您已使用自有容器的模型執行批次轉換,請先更新容器以取得 CUDA 相容性。若要更新它,請遵循 如果您使用自有容器,請更新 CUDA 相容性設定 中的程序。
-
使用
CreateTransformJobAPI 動作來建立批次轉換任務。在您的請求中,將SAGEMAKER_CUDA_COMPAT_DISABLED環境變數設定為true。此參數會指示容器不要自動掛載 CUDA 相容性程式庫。例如,當您使用 建立批次轉換任務時AWS CLI,您可以使用
--environment參數設定環境變數:aws sagemaker create-transform-job \ --environment '{"SAGEMAKER_CUDA_COMPAT_DISABLED": "true"}'\ . . .