Atualizar de contêineres de inferência para conformidade com o NVIDIA Container Toolkit - SageMaker IA da Amazon

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á.

Atualizar de contêineres de inferência para conformidade com o NVIDIA Container Toolkit

A partir das versões 1.17.4 e posteriores, o NVIDIA Container Toolkit não monta mais bibliotecas compatíveis com CUDA automaticamente. Essa mudança de comportamento pode afetar suas cargas de trabalho de inferência de SageMaker IA. Seus endpoints de SageMaker IA e trabalhos de transformação em lote podem usar contêineres incompatíveis com as versões mais recentes do NVIDIA Container Toolkit. Para garantir que suas workloads atendam aos requisitos mais recentes, talvez seja necessário atualizar seus endpoints ou configurar suas tarefas de transformação em lote.

Atualização de endpoints de SageMaker IA para fins de conformidade

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:

  1. Atualize a forma como você configura as bibliotecas compatíveis com CUDA se você trouxer seu próprio contêiner.

  2. Especifique uma imagem de máquina da Amazon (AMI) de inferência compatível com o comportamento mais recente do NVIDIA Container Toolkit. Você especifica uma AMI ao atualizar um endpoint ou ao criar outro.

Atualizar a configuração de compatibilidade CUDA se você trouxer seu próprio contêiner

As bibliotecas compatíveis com 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 modelo não exigir compatibilidade com CUDA, você pode ignorar 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 compatíveis com CUDA, se necessário, adicionando-as ao LD_LIBRARY_PATH no contêiner.

Sugerimos que você habilite a compatibilidade CUDA com base na versão detectada do driver da NVIDIA. Para habilitá-la, adicione o trecho de código abaixo ao script shell de inicialização do contêiner. Adicione esse código ao script ENTRYPOINT.

O script demonstra como alternar dinamicamente o uso do pacote de compatibilidade CUDA com base na versão detectada do driver da NVIDIA no host implantado para o contêiner do seu 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

Especificar 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. Elas montam automaticamente as bibliotecas compatíveis com CUDA no contêiner. Para que o endpoint use o novo comportamento, você deve especificar uma versão da AMI de inferência que esteja configurada para o novo comportamento.

No momento, as versões de AMI de inferência abaixo seguem o novo comportamento. Elas não montam bibliotecas compatíveis com CUDA automaticamente.

al2- ami-sagemaker-inference-gpu -2-1
  • Versão do driver da NVIDIA: 535.54.03

  • Versão do CUDA: 12.2

al2- ami-sagemaker-inference-gpu -3-1
  • Versão do driver da NVIDIA: 550.144.01

  • Versão do CUDA: 12.4

Atualizar um endpoint existente

Use o exemplo a seguir para atualizar um endpoint. O exemplo usa uma versão da AMI de inferência que desabilita 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 ${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

Criar um endpoint

Use o seguinte exemplo para criar um endpoint. O exemplo usa uma versão da AMI de inferência que desabilita 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>"

Executar trabalhos de transformação em lote compatíveis

A transformação em lote é a opção de inferência mais adequada para solicitações de processamento de grandes quantidades de dados off-line. Para criar trabalhos de transformação em lote, você usa a ação de API CreateTransformJob. Para obter mais informações, consulte Transformação em lote para inferência com a Amazon AI SageMaker .

O comportamento alterado do NVIDIA Container Toolkit afeta os trabalhos de transformação em lote. Para executar uma transformação em lote que atenda aos requisitos do NVIDIA Container Toolkit, faça o seguinte:

  1. Se você quiser executar a transformação em lote com um modelo para o qual você trouxe seu próprio contêiner, primeiro atualize o contêiner para compatibilidade CUDA. Para atualizá-lo, siga o processo em Atualizar a configuração de compatibilidade CUDA se você trouxer seu próprio contêiner.

  2. Use a ação de API CreateTransformJob para criar o trabalho de transformação em lote. Em sua solicita, defina a variável de ambiente SAGEMAKER_CUDA_COMPAT_DISABLED como true. Esse parâmetro instrui o contêiner a não montar automaticamente as bibliotecas compatíveis com CUDA.

    Por exemplo, ao criar um trabalho de transformação em lote usando oAWS CLI, você define a variável de ambiente com o --environment parâmetro:

    aws sagemaker create-transform-job \ --environment '{"SAGEMAKER_CUDA_COMPAT_DISABLED": "true"}'\ . . .