本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
从 1.17.4 及更高版本开始,NVIDIA 容器工具包不再自动挂载 CUDA 兼容性库。这种行为变化可能会使您的 SageMaker AI 端点与最新版本的 NVIDIA 容器工具包不兼容。
我们建议您更新现有的 SageMaker AI 终端节点或创建支持最新默认行为的新终端节点。
为确保您的终端节点与最新版本的 NVIDIA 容器工具包兼容,请按照以下步骤操作:
-
如果您自带容器,请更新设置 CUDA 兼容性库的方式。
-
指定支持最新 NVIDIA 容器工具包行为的推断 Amazon 机器映像 (AMI)。在更新现有终端节点或创建新终端节点时,您可以指定 AMI。
如果您自带容器,请更新 CUDA 兼容性设置
CUDA 兼容性库支持向前兼容性。这种兼容性适用于比 A SageMaker I 实例提供的 NVIDIA 驱动程序更新的任何 CUDA 工具包版本。
只有当 SageMaker AI 实例使用的 NVIDIA 驱动程序的版本低于模型容器中的 CUDA 工具包时,您才必须启用 CUDA 兼容性库。如果您的模型容器不需要 CUDA 兼容性,则可以跳过此步骤。例如,如果您不打算使用比 SageMaker AI 实例提供的工具包更新的 CUDA 工具包,则可以跳过此步骤。
由于 NVIDIA 容器工具包 1.17.4 版本中引入了更改,因此,如果需要,您可以通过将 CUDA 兼容库添加到容器LD_LIBRARY_PATH
中来显式启用 CUDA 兼容性库。
我们建议您根据检测到的 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
参数中,您可以为 AI 终端节点选择 AM SageMaker I。每个支持的图像都 AMIs 是一个预配置的映像。每个映像都 AWS 使用一组软件和驱动程序版本进行配置。
默认情况下, SageMaker AI AMIs 遵循传统行为。它们会自动在容器中挂载 CUDA 兼容性库。要使终端节点使用新行为,您必须指定为新行为配置的推理 AMI 版本。
以下推理 AMI 版本目前遵循新行为。它们不会自动挂载 CUDA 兼容性库。
- al2-2-ami-sagemaker-inference-gpu 1
-
-
NVIDIA 驱动程序版本:535.54.03
-
CUDA 版本:12.2
-
- al2--3-ami-sagemaker-inference-gpu 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 ${NEW_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
# Confirming generated endpoint config looks 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>"