Implante modelos personalizados e ajustados do Amazon S3 e da Amazon usando kubectl FSx - SageMaker Inteligência Artificial 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á.

Implante modelos personalizados e ajustados do Amazon S3 e da Amazon usando kubectl FSx

As etapas a seguir mostram como implantar modelos armazenados no Amazon S3 ou na Amazon em um SageMaker HyperPod cluster da Amazon FSx usando kubectl.

As instruções a seguir contêm células de código e comandos projetados para serem executados em um terminal. Certifique-se de ter configurado seu ambiente com AWS credenciais antes de executar esses comandos.

Pré-requisitos

Antes de começar, verifique se você:

Definição e configuração

Substitua todos os valores de espaço reservado por seus identificadores de recursos reais.

  1. Selecione sua região em seu ambiente.

    export REGION=<region>
  2. Inicialize o nome do seu cluster. Isso identifica o HyperPod cluster em que seu modelo será implantado.

    nota

    Consulte o administrador do cluster para garantir que as permissões sejam concedidas para essa função ou usuário. Você pode executar !aws sts get-caller-identity --query "Arn" para verificar qual função ou usuário você está usando no seu terminal.

    # Specify your hyperpod cluster name here HYPERPOD_CLUSTER_NAME="<Hyperpod_cluster_name>" # NOTE: For sample deployment, we use g5.8xlarge for deepseek-r1 1.5b model which has sufficient memory and GPU instance_type="ml.g5.8xlarge"
  3. Inicialize seu namespace de cluster. Seu administrador de cluster já deve ter criado uma conta de serviço de inferência de hyperpod em seu namespace.

    cluster_namespace="<namespace>"
  4. Crie um CRD usando uma das seguintes opções:

    Using Amazon FSx as the model source
    1. Configure um nome SageMaker de endpoint.

      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-fsx"
    2. Configure o ID FSx do sistema de arquivos da Amazon a ser usado.

      export FSX_FILE_SYSTEM_ID="fs-1234abcd"
    3. Veja a seguir um exemplo de arquivo yaml para criar um endpoint com a Amazon FSx e um DeepSeek modelo.

      cat <<EOF> deploy_fsx_cluster_inference.yaml
      ---
      apiVersion: inference.sagemaker.aws.amazon.com/v1alpha1
      kind: InferenceEndpointConfig
      metadata:
        name: $SAGEMAKER_ENDPOINT_NAME
        namespace: $CLUSTER_NAMESPACE
      spec:
        endpointName: $SAGEMAKER_ENDPOINT_NAME
        instanceType: $INSTANCE_TYPE
        invocationEndpoint: invocations
        modelName: deepseek15b
        modelSourceConfig:
          fsxStorage:
            fileSystemId: $FSX_FILE_SYSTEM_ID
          modelLocation: deepseek-1-5b
          modelSourceType: fsx
        worker:
          environmentVariables:
          - name: HF_MODEL_ID
            value: /opt/ml/model
          - name: SAGEMAKER_PROGRAM
            value: inference.py
          - name: SAGEMAKER_SUBMIT_DIRECTORY
            value: /opt/ml/model/code
          - name: MODEL_CACHE_ROOT
            value: /opt/ml/model
          - name: SAGEMAKER_ENV
            value: '1'
          image: 763104351884.dkr.ecr.us-east-2.amazonaws.com/huggingface-pytorch-tgi-inference:2.4.0-tgi2.3.1-gpu-py311-cu124-ubuntu22.04-v2.0
          modelInvocationPort:
            containerPort: 8080
            name: http
          modelVolumeMount:
            mountPath: /opt/ml/model
            name: model-weights
          resources:
            limits:
              nvidia.com/gpu: 1
            requests:
              cpu: 30000m
              memory: 100Gi
              nvidia.com/gpu: 1
      EOF
    Using Amazon S3 as the model source
    1. Configure um nome SageMaker de endpoint.

      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-s3"
    2. Configure a localização do bucket do Amazon S3 em que o modelo está localizado.

      export S3_MODEL_LOCATION="deepseek-qwen-1-5b"
    3. Veja a seguir um exemplo de arquivo yaml para criar um endpoint com o Amazon S3 e um modelo. DeepSeek

      cat <<EOF> deploy_s3_inference.yaml
      ---
      apiVersion: inference.sagemaker.aws.amazon.com/v1alpha1
      kind: InferenceEndpointConfig
      metadata:
        name: $SAGEMAKER_ENDPOINT_NAME
        namespace: $CLUSTER_NAMESPACE
      spec:
        modelName: deepseek15b
        endpointName: $SAGEMAKER_ENDPOINT_NAME
        instanceType: ml.g5.8xlarge
        invocationEndpoint: invocations
        modelSourceConfig:
          modelSourceType: s3
          s3Storage:
            bucketName: $S3_MODEL_LOCATION
            region: $REGION
          modelLocation: deepseek15b
          prefetchEnabled: true
        worker:
          resources:
            limits:
              nvidia.com/gpu: 1
            requests:
              nvidia.com/gpu: 1
              cpu: 25600m
              memory: 102Gi
          image: 763104351884.dkr.ecr.us-east-2.amazonaws.com/djl-inference:0.32.0-lmi14.0.0-cu124
          modelInvocationPort:
            containerPort: 8080
            name: http
          modelVolumeMount:
            name: model-weights
            mountPath: /opt/ml/model
          environmentVariables:
            - name: OPTION_ROLLING_BATCH
              value: "vllm"
            - name: SERVING_CHUNKED_READ_TIMEOUT
              value: "480"
            - name: DJL_OFFLINE
              value: "true"
            - name: NUM_SHARD
              value: "1"
            - name: SAGEMAKER_PROGRAM
              value: "inference.py"
            - name: SAGEMAKER_SUBMIT_DIRECTORY
              value: "/opt/ml/model/code"
            - name: MODEL_CACHE_ROOT
              value: "/opt/ml/model"
            - name: SAGEMAKER_MODEL_SERVER_WORKERS
              value: "1"
            - name: SAGEMAKER_MODEL_SERVER_TIMEOUT
              value: "3600"
            - name: OPTION_TRUST_REMOTE_CODE
              value: "true"
            - name: OPTION_ENABLE_REASONING
              value: "true"
            - name: OPTION_REASONING_PARSER
              value: "deepseek_r1"
            - name: SAGEMAKER_CONTAINER_LOG_LEVEL
              value: "20"
            - name: SAGEMAKER_ENV
              value: "1"
      EOF

Implante seu modelo a partir do Amazon S3 ou da Amazon FSx

  1. Obtenha o nome do cluster Amazon EKS do ARN do HyperPod cluster para autenticação kubectl.

    export EKS_CLUSTER_NAME=$(aws --region $REGION sagemaker describe-cluster --cluster-name $HYPERPOD_CLUSTER_NAME \ --query 'Orchestrator.Eks.ClusterArn' --output text | \ cut -d'/' -f2) aws eks update-kubeconfig --name $EKS_CLUSTER_NAME --region $REGION
  2. Implante seu InferenceEndpointConfig modelo com uma das seguintes opções:

    Deploy with Amazon FSx as a source
    kubectl apply -f deploy_fsx_luster_inference.yaml
    Deploy with Amazon S3 as a source
    kubectl apply -f deploy_s3_inference.yaml

Verifique o status da sua implantação

  1. Verifique se o modelo foi implantado com sucesso.

    kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Verifique se o endpoint foi criado com sucesso.

    kubectl describe SageMakerEndpointRegistration $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  3. Teste o endpoint implantado para verificar se ele está funcionando corretamente. Essa etapa confirma que seu modelo foi implantado com sucesso e pode processar solicitações de inferência.

    aws sagemaker-runtime invoke-endpoint \ --endpoint-name $SAGEMAKER_ENDPOINT_NAME \ --content-type "application/json" \ --body '{"inputs": "What is AWS SageMaker?"}' \ --region $REGION \ --cli-binary-format raw-in-base64-out \ /dev/stdout

Gerencie sua implantação

Quando terminar de testar sua implantação, use os comandos a seguir para limpar seus recursos.

nota

Verifique se você não precisa mais do modelo implantado ou dos dados armazenados antes de continuar.

Limpe os seus recursos
  1. Exclua a implantação de inferência e os recursos associados do Kubernetes. Isso interrompe a execução dos contêineres do modelo e remove o SageMaker endpoint.

    kubectl delete inferenceendpointconfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Verifique se a limpeza foi feita com sucesso.

    # # Check that Kubernetes resources are removed kubectl get pods,svc,deployment,InferenceEndpointConfig,sagemakerendpointregistration -n $CLUSTER_NAMESPACE
    # Verify SageMaker endpoint is deleted (should return error or empty) aws sagemaker describe-endpoint --endpoint-name $SAGEMAKER_ENDPOINT_NAME --region $REGION
Solução de problemas

Use esses comandos de depuração se sua implantação não estiver funcionando conforme o esperado.

  1. Verifique o status de implantação do Kubernetes.

    kubectl describe deployment $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Verifique o InferenceEndpointConfig status para ver o estado de implantação de alto nível e quaisquer problemas de configuração.

    kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  3. Verifique o status de todos os objetos do Kubernetes. Tenha uma visão abrangente de todos os recursos relacionados do Kubernetes em seu namespace. Isso fornece uma visão geral rápida do que está em execução e do que pode estar faltando.

    kubectl get pods,svc,deployment,InferenceEndpointConfig,sagemakerendpointregistration -n $CLUSTER_NAMESPACE