Déployez des modèles personnalisés et affinés depuis Amazon S3 et Amazon à FSx l'aide de kubectl - Amazon SageMaker AI

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déployez des modèles personnalisés et affinés depuis Amazon S3 et Amazon à FSx l'aide de kubectl

Les étapes suivantes vous montrent comment déployer des modèles stockés sur Amazon S3 ou Amazon sur un SageMaker HyperPod cluster Amazon FSx à l'aide de kubectl.

Les instructions suivantes contiennent des cellules de code et des commandes conçues pour être exécutées dans un terminal. Assurez-vous d'avoir configuré votre environnement avec des AWS informations d'identification avant d'exécuter ces commandes.

Prérequis

Avant de commencer, vérifiez que vous avez :

Installation et configuration

Remplacez toutes les valeurs d'espace réservé par vos identificateurs de ressources réels.

  1. Sélectionnez votre région dans votre environnement.

    export REGION=<region>
  2. Initialisez le nom de votre cluster. Cela permet d'identifier le HyperPod cluster dans lequel votre modèle sera déployé.

    Note

    Vérifiez auprès de l'administrateur de votre cluster que les autorisations sont accordées pour ce rôle ou cet utilisateur. Vous pouvez exécuter !aws sts get-caller-identity --query "Arn" pour vérifier le rôle ou l'utilisateur que vous utilisez sur votre 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. Initialisez l'espace de noms de votre cluster. L'administrateur de votre cluster doit déjà avoir créé un compte de service d'inférence d'hyperpodes dans votre espace de noms.

    cluster_namespace="<namespace>"
  4. Créez un CRD à l'aide de l'une des options suivantes :

    Using Amazon FSx as the model source
    1. Définissez un nom de point de SageMaker terminaison.

      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-fsx"
    2. Configurez l'ID du système de FSx fichiers Amazon à utiliser.

      export FSX_FILE_SYSTEM_ID="fs-1234abcd"
    3. Voici un exemple de fichier yaml permettant de créer un point de terminaison avec Amazon FSx et un DeepSeek modèle.

      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. Définissez un nom de point de SageMaker terminaison.

      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-s3"
    2. Configurez l'emplacement du compartiment Amazon S3 où se trouve le modèle.

      export S3_MODEL_LOCATION="deepseek-qwen-1-5b"
    3. Voici un exemple de fichier yaml permettant de créer un point de terminaison avec Amazon S3 et un DeepSeek modèle.

      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

Déployez votre modèle depuis Amazon S3 ou Amazon FSx

  1. Obtenez le nom du cluster Amazon EKS à partir de l'ARN du HyperPod cluster pour l'authentification 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. Déployez votre InferenceEndpointConfig modèle à l'aide de l'une des options suivantes :

    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

Vérifiez l'état de votre déploiement

  1. Vérifiez si le modèle a été correctement déployé.

    kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Vérifiez que le point de terminaison est correctement créé.

    kubectl describe SageMakerEndpointRegistration $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  3. Testez le point de terminaison déployé pour vérifier qu'il fonctionne correctement. Cette étape confirme que votre modèle est correctement déployé et qu'il peut traiter les demandes d'inférence.

    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

Gérez votre déploiement

Lorsque vous avez terminé de tester votre déploiement, utilisez les commandes suivantes pour nettoyer vos ressources.

Note

Vérifiez que vous n'avez plus besoin du modèle déployé ou des données stockées avant de continuer.

Nettoyage de vos ressources
  1. Supprimez le déploiement d'inférence et les ressources Kubernetes associées. Cela arrête les conteneurs de modèles en cours d'exécution et supprime le SageMaker point de terminaison.

    kubectl delete inferenceendpointconfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Vérifiez que le nettoyage a été effectué avec succès.

    # # 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
Résolution des problèmes

Utilisez ces commandes de débogage si votre déploiement ne fonctionne pas comme prévu.

  1. Vérifiez l'état du déploiement de Kubernetes.

    kubectl describe deployment $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Vérifiez le InferenceEndpointConfig statut pour connaître l'état de déploiement de haut niveau et les éventuels problèmes de configuration.

    kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  3. Vérifiez l'état de tous les objets Kubernetes. Bénéficiez d'une vue complète de toutes les ressources Kubernetes associées dans votre espace de noms. Cela vous donne un aperçu rapide de ce qui est en cours d'exécution et de ce qui pourrait manquer.

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