As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
A partir das versões 1.17.4 e superiores, o NVIDIA Container Toolkit não monta mais bibliotecas de compatibilidade CUDA automaticamente. Essa mudança de comportamento pode tornar seus endpoints de SageMaker IA incompatíveis com as versões mais recentes do NVIDIA Container Toolkit.
Recomendamos que você atualize seus endpoints de SageMaker IA existentes ou crie novos que suportem o comportamento padrão mais recente.
Para garantir que seu endpoint seja compatível com as versões mais recentes do NVIDIA Container Toolkit, siga estas etapas:
-
Atualize a forma como você configura as bibliotecas de compatibilidade CUDA se você trouxer seu próprio contêiner.
-
Especifique uma Amazon Machine Image (AMI) de inferência que suporte o comportamento mais recente do NVIDIA Container Toolkit. Você especifica uma AMI ao atualizar um endpoint existente ou criar um novo.
Atualizando a configuração de compatibilidade do CUDA se você trouxer seu próprio contêiner
As bibliotecas de compatibilidade CUDA permitem compatibilidade futura. Essa compatibilidade se aplica a qualquer versão do kit de ferramentas CUDA que seja mais recente do que o driver NVIDIA fornecido pela instância de IA. SageMaker
Você deve ativar as bibliotecas de compatibilidade CUDA somente quando o driver NVIDIA usado pela instância de SageMaker IA tiver uma versão mais antiga do que o kit de ferramentas CUDA no contêiner do modelo. Se o contêiner do seu modelo não exigir compatibilidade com CUDA, você pode pular esta etapa. Por exemplo, você pode pular essa etapa se não planeja usar um kit de ferramentas CUDA mais recente do que os fornecidos pelas instâncias de IA. SageMaker
Devido às mudanças introduzidas na versão 1.17.4 do NVIDIA Container Toolkit, você pode habilitar explicitamente as bibliotecas de compatibilidade CUDA, se necessário, adicionando-as ao contêiner. LD_LIBRARY_PATH
Sugerimos que você ative a compatibilidade com CUDA com base na versão detectada do driver NVIDIA. Para habilitá-lo, adicione o trecho de código abaixo ao script do shell de inicialização do contêiner. Adicione esse código no ENTRYPOINT
script.
O script a seguir demonstra como alternar dinamicamente o uso da compatibilidade CUDA com base na versão do driver NVIDIA detectada no host implantado para seu contêiner de modelo.
#!/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
Especificação de uma AMI de inferência compatível com o NVIDIA Container Toolkit
No InferenceAmiVersion
parâmetro do tipo de ProductionVariant
dados, você pode selecionar a AMI para um endpoint de SageMaker IA. Cada uma das imagens suportadas AMIs é pré-configurada. Cada imagem é configurada AWS com um conjunto de versões de software e driver.
Por padrão, a SageMaker IA AMIs segue o comportamento legado. Eles montam automaticamente as bibliotecas de compatibilidade CUDA no contêiner. Para fazer um endpoint usar o novo comportamento, você deve especificar uma versão da AMI de inferência que esteja configurada para o novo comportamento.
Atualmente, as seguintes versões da AMI de inferência seguem o novo comportamento. Eles não montam bibliotecas de compatibilidade CUDA automaticamente.
- al2- ami-sagemaker-inference-gpu -2-1
-
-
Versão do driver NVIDIA: 535.54.03
-
Versão CUDA: 12.2
-
- al2- ami-sagemaker-inference-gpu -3-1
-
-
Versão do driver NVIDIA: 550.144.01
-
Versão CUDA: 12.4
-
Atualizando um endpoint existente
Use o exemplo a seguir para atualizar um endpoint existente. O exemplo usa uma versão da AMI de inferência que desativa a montagem automática de bibliotecas de compatibilidade 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
Criando um novo endpoint
Use o exemplo a seguir para criar um novo endpoint. O exemplo usa uma versão da AMI de inferência que desativa a montagem automática de bibliotecas de compatibilidade 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>"