

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Implemente modelos de Amazon S3, Amazon FSx o Hugging Face Hub mediante kubectl
<a name="sagemaker-hyperpod-model-deployment-deploy-ftm"></a>

Los siguientes pasos muestran cómo implementar modelos almacenados en Amazon S3, Amazon FSx o Hugging Face Hub en un clúster de SageMaker HyperPod Amazon mediante kubectl. 

Las siguientes instrucciones contienen celdas de código y comandos diseñados para ejecutarse en una terminal. Asegúrese de haber configurado su entorno con AWS credenciales antes de ejecutar estos comandos.

## Requisitos previos
<a name="sagemaker-hyperpod-model-deployment-deploy-ftm-prereqs"></a>

Antes de comenzar, compruebe que: 
+ Configure capacidades de inferencia en sus SageMaker HyperPod clústeres de Amazon. Para obtener más información, consulte [Configuración de los HyperPod clústeres para la implementación de modelos](sagemaker-hyperpod-model-deployment-setup.md).
+ Ha instalado la utilidad [kubectl](https://kubernetes.io/docs/reference/kubectl/) y configurado [jq](https://jqlang.org/) en su terminal.

## Ajustes y configuración
<a name="sagemaker-hyperpod-model-deployment-deploy-ftm-setup"></a>

Reemplace todos los valores marcadores de posición por los identificadores de recursos reales.

1. Seleccione su región en su entorno.

   ```
   export REGION=<region>
   ```

1. Inicialice el nombre de su clúster. Esto identifica el HyperPod clúster en el que se implementará el modelo.
**nota**  
Consulte con el administrador del clúster para asegurarse de que se concedan los permisos a ese rol o usuario. Puede ejecutar `!aws sts get-caller-identity --query "Arn"` para comprobar qué rol o usuario se está utilizando en la 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"
   ```

1. Inicialice el espacio de nombres de su clúster. El administrador del clúster ya debería haber creado una cuenta de servicio de inferencia de hiperpods en su espacio de nombres.

   ```
   cluster_namespace="<namespace>"
   ```

1. Cree una CRD con una de las siguientes opciones:

------
#### [ Using Amazon FSx as the model source ]

   1. Configure un nombre de SageMaker punto final.

      ```
      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-fsx"
      ```

   1. Configure el ID del sistema de archivos de Amazon FSx que se va a utilizar.

      ```
      export FSX_FILE_SYSTEM_ID="fs-1234abcd"
      ```

   1. A continuación, se muestra un ejemplo de archivo yaml para crear un punto final con Amazon FSx y DeepSeek un modelo.
**nota**  
Para los clústeres con la partición de GPU habilitada, sustitúyala por `nvidia.com/gpu` el nombre de recurso MIG correspondiente, como. `nvidia.com/mig-1g.10gb` Para obtener más información, consulte [Envío de tareas con MIG](sagemaker-hyperpod-eks-gpu-partitioning-task-submission.md).

      ```
      cat <<EOF> deploy_fsx_cluster_inference.yaml
      ---
      apiVersion: inference.sagemaker.aws.amazon.com/v1
      kind: InferenceEndpointConfig
      metadata:
        name: lmcache-test
        namespace: inf-update
      spec:
        modelName: Llama-3.1-8B-Instruct
        instanceType: ml.g5.24xlarge
        invocationEndpoint: v1/chat/completions
        replicas: 2
        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
              # For MIG-enabled instances, use: nvidia.com/mig-1g.10gb: 1
            requests:
              cpu: 30000m
              memory: 100Gi
              nvidia.com/gpu: 1
              # For MIG-enabled instances, use: nvidia.com/mig-1g.10gb: 1
      EOF
      ```

------
#### [ Using Amazon S3 as the model source ]

   1. Configure un nombre de punto SageMaker final.

      ```
      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-s3"
      ```

   1. Configure la ubicación del bucket de Amazon S3 donde se encuentra el modelo.

      ```
      export S3_MODEL_LOCATION="deepseek-qwen-1-5b"
      ```

   1. El siguiente es un ejemplo de archivo yaml para crear un punto final con Amazon S3 y un DeepSeek modelo.
**nota**  
Para los clústeres con la partición de GPU habilitada, `nvidia.com/gpu` sustitúyala por el nombre de recurso MIG correspondiente, como. `nvidia.com/mig-1g.10gb` Para obtener más información, consulte [Envío de tareas con MIG](sagemaker-hyperpod-eks-gpu-partitioning-task-submission.md).

      ```
      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
              # For MIG-enabled instances, use: nvidia.com/mig-1g.10gb: 1
            requests:
              nvidia.com/gpu: 1
              # For MIG-enabled instances, use: nvidia.com/mig-1g.10gb: 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: 8000
            name: http
          modelVolumeMount:
            name: model-weights
            mountPath: /opt/ml/model
          environmentVariables:
            - name: PYTHONHASHSEED
              value: "123"
            - 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"
            - name: MODEL_SERVER_TYPE
              value: "vllm"
            - name: SESSION_KEY
              value: "x-user-id"
      EOF
      ```

------
#### [ Using Amazon S3 as the model source ]

   1. Configure un nombre de punto SageMaker final.

      ```
      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-s3"
      ```

   1. Configure la ubicación del bucket de Amazon S3 donde se encuentra el modelo.

      ```
      export S3_MODEL_LOCATION="deepseek-qwen-1-5b"
      ```

   1. El siguiente es un ejemplo de archivo yaml para crear un punto final con Amazon S3 y un DeepSeek modelo.

      ```
      cat <<EOF> deploy_s3_inference.yaml
      ---
      apiVersion: inference.sagemaker.aws.amazon.com/v1
      kind: InferenceEndpointConfig
      metadata:
        name: lmcache-test
        namespace: inf-update
      spec:
        modelName: Llama-3.1-8B-Instruct
        instanceType: ml.g5.24xlarge
        invocationEndpoint: v1/chat/completions
        replicas: 2
        modelSourceConfig:
          modelSourceType: s3
          s3Storage:
            bucketName: bugbash-ada-resources
            region: us-west-2
          modelLocation: models/Llama-3.1-8B-Instruct
          prefetchEnabled: false
        kvCacheSpec:
          enableL1Cache: true
      #    enableL2Cache: true
      #    l2CacheSpec:
      #      l2CacheBackend: redis/sagemaker
      #      l2CacheLocalUrl: redis://redis.redis-system.svc.cluster.local:6379
        intelligentRoutingSpec:
          enabled: true
        tlsConfig:
          tlsCertificateOutputS3Uri: s3://sagemaker-lmcache-fceb9062-tls-6f6ee470
        metrics:
          enabled: true
          modelMetrics:
            port: 8000
        loadBalancer:
          healthCheckPath: /health
        worker:
          resources:
            limits:
              nvidia.com/gpu: "4"
            requests:
              cpu: "6"
              memory: 30Gi
              nvidia.com/gpu: "4"
          image: lmcache/vllm-openai:latest
          args:
            - "/opt/ml/model"
            - "--max-model-len"
            - "20000"
            - "--tensor-parallel-size"
            - "4"
          modelInvocationPort:
            containerPort: 8000
            name: http
          modelVolumeMount:
            name: model-weights
            mountPath: /opt/ml/model
          environmentVariables:
            - name: PYTHONHASHSEED
              value: "123"
            - 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"
            - name: MODEL_SERVER_TYPE
              value: "vllm"
            - name: SESSION_KEY
              value: "x-user-id"
      EOF
      ```

------
#### [ Using Hugging Face Hub as the model source ]

   1. Crea un secreto de Kubernetes que contenga tu token de API Hugging Face. Este token es obligatorio para los modelos cerrados y se recomienda para todas las descargas. Puedes generar un token en [huggingface. co/settings/tokens.](https://huggingface.co/settings/tokens)
**importante**  
La implementación de modelos desde Hugging Face Hub requiere acceso saliente a Internet desde los nodos del clúster a los dominios de Hugging Face, incluidos y. `*.huggingface.co` `*.hf.co` Asegúrese de que la configuración de red de la VPC (puerta de enlace NAT, grupos de seguridad y ACL de red) permita la salida de HTTPS a estos dominios. Sin acceso a Internet, la descarga del modelo fallará.
**nota**  
Para los entornos de producción, recomendamos utilizar Amazon S3 o Amazon FSx como fuente del modelo en lugar de Hugging Face Hub. Con Amazon S3 y Amazon FSx, los artefactos del modelo se almacenan en su AWS cuenta, lo que elimina la dependencia de la conectividad externa a Internet y proporciona tiempos de implementación más predecibles. Hugging Face Hub es ideal para el desarrollo, la experimentación y la creación rápida de prototipos, cuando es conveniente acceder directamente al repositorio de modelos Hugging Face.

      ```
      kubectl create secret generic hf-token-secret \
        --from-literal=token=hf_YOUR_TOKEN_HERE \
        -n $CLUSTER_NAMESPACE
      ```

   1. Configure un nombre de punto final SageMaker .

      ```
      export SAGEMAKER_ENDPOINT_NAME="mistral7b-hf"
      ```

   1. El siguiente es un ejemplo de un archivo YAML para implementar un modelo Mistral 7B de Hugging Face Hub utilizando vLLM como tiempo de ejecución de inferencia. Con`prefetchEnabled: true`, el operador utiliza un contenedor de inicio para descargar el modelo antes de que se inicie el contenedor de inferencias.
**nota**  
Para los clústeres con la partición de GPU habilitada, sustitúyala por `nvidia.com/gpu` el nombre de recurso MIG correspondiente, como. `nvidia.com/mig-1g.10gb` Para obtener más información, consulte [Envío de tareas con MIG](sagemaker-hyperpod-eks-gpu-partitioning-task-submission.md).

      ```
      cat <<EOF> deploy_hf_inference.yaml
      ---
      apiVersion: inference.sagemaker.aws.amazon.com/v1
      kind: InferenceEndpointConfig
      metadata:
        name: $SAGEMAKER_ENDPOINT_NAME
        namespace: $CLUSTER_NAMESPACE
      spec:
        modelName: mistral-7b
        modelSourceConfig:
          modelSourceType: huggingface
          prefetchEnabled: true
          huggingFaceModel:
            modelId: "mistralai/Mistral-7B-Instruct-v0.3"
            tokenSecretRef:
              name: hf-token-secret
              key: token
        instanceType: "ml.g5.24xlarge"
        invocationEndpoint: v1/chat/completions
        worker:
          image: "vllm/vllm-openai:v0.10.1"
          modelInvocationPort:
            containerPort: 8000
            name: http
          modelVolumeMount:
            name: model-weights
            mountPath: /opt/ml/model
          resources:
            requests:
              nvidia.com/gpu: "4"
              memory: "96Gi"
              cpu: "16"
            limits:
              nvidia.com/gpu: "4"
              memory: "96Gi"
              cpu: "16"
          args:
            - "--model"
            - "/opt/ml/model"
            - "--port"
            - "8000"
            - "--tensor-parallel-size"
            - "4"
            - "--served-model-name"
            - "mistralai/Mistral-7B-Instruct-v0.3"
          environmentVariables:
            - name: VLLM_REQUEST_TIMEOUT
              value: "600"
      EOF
      ```

   1. Los campos clave de configuración de Hugging Face son:
      + `modelSourceType`(obligatorio): se establece en. `huggingface`
      + `huggingFaceModel.modelId`(obligatorio): el identificador del modelo Hugging Face Hub `org/model` en formato (por ejemplo`mistralai/Mistral-7B-Instruct-v0.3`,).
      + `huggingFaceModel.commitSHA`(opcional): un Git de 40 caracteres compromete a SHA a fijar una versión específica del modelo. Si se omite, el valor predeterminado es la rama. `main`
      + `huggingFaceModel.tokenSecretRef`(opcional): referencia a un secreto de Kubernetes que contiene tu token de la API Hugging Face. Necesario para los modelos cerrados. El token solo se usa durante la descarga del modelo y no está expuesto al contenedor de inferencias.
      + `prefetchEnabled`(opcional): cuando `true` un contenedor de inicio descarga el modelo antes de que se inicie el contenedor de inferencia. Cuando`false`, el tiempo de ejecución de la inferencia (vLLM, TGI, SGLang) descarga el modelo de forma nativa al iniciarse. El valor predeterminado es `false`.

------

## Configure el almacenamiento en caché KV y el enrutamiento inteligente para mejorar el rendimiento
<a name="sagemaker-hyperpod-model-deployment-deploy-ftm-cache-route"></a>

1. Habilite el almacenamiento en caché de KV configurando `enableL1Cache` y en `enableL2Cache` `true` .A continuación, configúrelo `redis` y actualícelo `l2CacheLocalUrl` con `l2CacheSpec` la URL del clúster de Redis.

   ```
     kvCacheSpec:
       enableL1Cache: true
       enableL2Cache: true
       l2CacheSpec:
         l2CacheBackend: <redis | tieredstorage>
         l2CacheLocalUrl: <redis cluster URL if l2CacheBackend is redis >
   ```
**nota**  
Si el clúster de Redis no está dentro de la misma Amazon VPC que HyperPod el clúster, no se garantiza el cifrado de los datos en tránsito.
**nota**  
No necesita l2 CacheLocalUrl si se selecciona el almacenamiento por niveles.

1. Habilite el enrutamiento inteligente configurándolo en under`enabled`. `true` `intelligentRoutingSpec` Puede especificar la estrategia de enrutamiento que desea utilizar`routingStrategy`. Si no se especifica ninguna estrategia de enrutamiento, el valor predeterminado es. `prefixaware`

   ```
   intelligentRoutingSpec:
       enabled: true
       routingStrategy: <routing strategy to use>
   ```

1. Habilite las métricas del router y las métricas de almacenamiento en caché `enabled` configurándolas en debajo. `true` `metrics` El `port` valor debe ser el mismo que el `containerPort` valor inferior`modelInvocationPort`.

   ```
   metrics:
       enabled: true
       modelMetrics:
         port: <port value>
       ...
       modelInvocationPort:
         containerPort: <port value>
   ```

## Implemente su modelo desde Amazon S3, Amazon FSx o Hugging Face Hub
<a name="sagemaker-hyperpod-model-deployment-deploy-ftm-deploy"></a>

1. Obtenga el nombre del clúster de Amazon EKS del ARN del HyperPod clúster para la autenticación de 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
   ```

1. Implemente su InferenceEndpointConfig modelo con una de las siguientes opciones:

------
#### [ 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
   ```

------
#### [ Deploy with Hugging Face Hub as a source ]

   ```
   kubectl apply -f deploy_hf_inference.yaml
   ```

   Si la implementación falla, compruebe los InferenceEndpointConfig eventos para obtener información de diagnóstico. Para obtener información sobre problemas comunes, como errores de token, conectividad de red o falta de modelo, consulte[Fallos en la implementación del modelo Hugging Face Hub](sagemaker-hyperpod-model-deployment-ts-huggingface.md).

------

## Verificación del estado de la implementación
<a name="sagemaker-hyperpod-model-deployment-deploy-ftm-verify"></a>

1. Compruebe si el modelo se ha implementado correctamente.

   ```
   kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
   ```

1. Compruebe que el punto de conexión se haya creado correctamente.

   ```
   kubectl describe SageMakerEndpointRegistration $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
   ```

1. Pruebe el punto de conexión implementado para comprobar que funciona correctamente. Este paso confirma que el modelo se ha implementado correctamente y que puede procesar las solicitudes de inferencia.

   ```
   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
   ```

## Administración de la implementación
<a name="sagemaker-hyperpod-model-deployment-deploy-ftm-manage"></a>

Cuando termine de probar la implementación, utilice los siguientes comandos para limpiar los recursos.

**nota**  
Verifique que ya no necesita el modelo implementado ni los datos almacenados antes de continuar.

**Eliminación de sus recursos**

1. Elimine la implementación de la inferencia y los recursos de Kubernetes asociados. Esto detiene los contenedores del modelo en ejecución y elimina el SageMaker punto final.

   ```
   kubectl delete inferenceendpointconfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
   ```

1. Compruebe que la limpieza se ha realizado correctamente.

   ```
   # # 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
   ```

**Resolución de problemas**

Use estos comandos de depuración si la implementación no funciona según lo previsto.

1. Compruebe el estado de la implementación de Kubernetes.

   ```
   kubectl describe deployment $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
   ```

1. Compruebe el InferenceEndpointConfig estado para ver el estado de la implementación de alto nivel y cualquier problema de configuración.

   ```
   kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
   ```

1. Compruebe el estado de todos los objetos de Kubernetes. Obtendrá una visión completa de todos los recursos de Kubernetes relacionados en su espacio de nombres. Esto le proporciona una visión general rápida de lo que se está ejecutando y lo que podría faltar.

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