Stellen Sie mit kubectl benutzerdefinierte, fein abgestimmte Modelle von Amazon S3 und Amazon FSx bereit - Amazon SageMaker KI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Stellen Sie mit kubectl benutzerdefinierte, fein abgestimmte Modelle von Amazon S3 und Amazon FSx bereit

Die folgenden Schritte zeigen Ihnen, wie Sie auf Amazon S3 oder Amazon gespeicherte Modelle mithilfe von FSx kubectl in einem SageMaker HyperPod Amazon-Cluster bereitstellen.

Die folgenden Anweisungen enthalten Codezellen und Befehle, die für die Ausführung in einem Terminal konzipiert sind. Stellen Sie sicher, dass Sie Ihre Umgebung mit AWS Anmeldeinformationen konfiguriert haben, bevor Sie diese Befehle ausführen.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie:

Einrichtung und Konfiguration

Ersetzen Sie alle Platzhalterwerte durch Ihre tatsächlichen Ressourcen-IDs.

  1. Wählen Sie Ihre Region in Ihrer Umgebung aus.

    export REGION=<region>
  2. Initialisieren des -Cluster-Namens Dadurch wird der HyperPod Cluster identifiziert, in dem Ihr Modell bereitgestellt wird.

    Anmerkung

    Erkundigen Sie sich bei Ihrem Cluster-Administrator, ob für diese Rolle oder diesen Benutzer Berechtigungen erteilt wurden. Sie können ausführen!aws sts get-caller-identity --query "Arn", um zu überprüfen, welche Rolle oder welchen Benutzer Sie in Ihrem Terminal verwenden.

    # 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. Initialisieren Sie Ihren Cluster-Namespace. Ihr Clusteradministrator sollte bereits ein Hyperpod-Inferenzdienstkonto in Ihrem Namespace erstellt haben.

    cluster_namespace="<namespace>"
  4. Erstellen Sie ein CRD mithilfe einer der folgenden Optionen:

    Using Amazon FSx as the model source
    1. Richten Sie einen SageMaker Endpunktnamen ein.

      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-fsx"
    2. Konfigurieren Sie die zu verwendende FSx Amazon-Dateisystem-ID.

      export FSX_FILE_SYSTEM_ID="fs-1234abcd"
    3. Im Folgenden finden Sie ein Beispiel für eine Yaml-Datei zum Erstellen eines Endpunkts mit Amazon FSx und einem DeepSeek Modell.

      Anmerkung

      Bei Clustern mit aktivierter GPU-Partitionierung nvidia.com/gpu ersetzen Sie diesen durch den entsprechenden MIG-Ressourcennamen, z. B. nvidia.com/mig-1g.10gb Weitere Informationen finden Sie unter Einreichung von Aufgaben mit MIG.

      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. Richten Sie einen SageMaker Endpunktnamen ein.

      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-s3"
    2. Konfigurieren Sie den Amazon-S3-Bucket-Speicherort, an dem sich das Modell befindet.

      export S3_MODEL_LOCATION="deepseek-qwen-1-5b"
    3. Im Folgenden finden Sie ein Beispiel für eine Yaml-Datei zum Erstellen eines Endpunkts mit Amazon S3 und einem DeepSeek Modell.

      Anmerkung

      Bei Clustern mit aktivierter GPU-Partitionierung nvidia.com/gpu ersetzen Sie diesen durch den entsprechenden MIG-Ressourcennamen, z. B. nvidia.com/mig-1g.10gb Weitere Informationen finden Sie unter Einreichung von Aufgaben mit MIG.

      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. Richten Sie einen SageMaker Endpunktnamen ein.

      export SAGEMAKER_ENDPOINT_NAME="deepseek15b-s3"
    2. Konfigurieren Sie den Amazon-S3-Bucket-Speicherort, an dem sich das Modell befindet.

      export S3_MODEL_LOCATION="deepseek-qwen-1-5b"
    3. Im Folgenden finden Sie ein Beispiel für eine Yaml-Datei zum Erstellen eines Endpunkts mit Amazon S3 und einem DeepSeek Modell.

      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

Konfigurieren Sie KV-Caching und intelligentes Routing für eine verbesserte Leistung

  1. Aktivieren Sie KV-Caching, indem Sie enableL1Cache und enableL2Cache auf einstellen. Stellen true l2CacheSpec Sie dann auf redis und aktualisieren Sie l2CacheLocalUrl mit der Redis-Cluster-URL.

    kvCacheSpec: enableL1Cache: true enableL2Cache: true l2CacheSpec: l2CacheBackend: <redis | tieredstorage> l2CacheLocalUrl: <redis cluster URL if l2CacheBackend is redis >
    Anmerkung

    Wenn sich der Redis-Cluster nicht in derselben Amazon VPC wie der HyperPod Cluster befindet, ist die Verschlüsselung der Daten während der Übertragung nicht garantiert.

    Anmerkung

    Sie benötigen l2 nicht, CacheLocalUrl wenn TieredStorage ausgewählt ist.

  2. Aktivieren Sie intelligentes Routing, indem Sie die Einstellung enabled auf unter setzen. true intelligentRoutingSpec Sie können unter angeben, welche Routing-Strategie verwendet werden sollroutingStrategy. Wenn keine Routingstrategie angegeben ist, wird standardmäßig verwendet. prefixaware

    intelligentRoutingSpec: enabled: true routingStrategy: <routing strategy to use>
  3. Aktivieren Sie Router-Metriken und Caching-Metriken, indem Sie enabled auf true unter setzen. metrics Der port Wert muss mit dem containerPort Wert unter modelInvocationPort übereinstimmen.

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

Stellen Sie Ihr Modell von Amazon S3 oder Amazon aus bereit FSx

  1. Rufen Sie den Namen des Amazon EKS-Clusters aus dem HyperPod Cluster-ARN für die Kubectl-Authentifizierung ab.

    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. Stellen Sie Ihr InferenceEndpointConfig Modell mit einer der folgenden Optionen bereit:

    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

Überprüfen des Status Ihrer Bereitstellung

  1. Überprüfen Sie, ob das Modell erfolgreich eingesetzt wurde.

    kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Stellen Sie sicher, dass der Endpunkt erfolgreich erstellt wurde.

    kubectl describe SageMakerEndpointRegistration $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  3. Testen Sie den bereitgestellten Endpunkt, um sicherzustellen, dass er ordnungsgemäß funktioniert. Dieser Schritt bestätigt, dass Ihr Modell erfolgreich bereitgestellt wurde und Inferenzanfragen verarbeiten kann.

    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

Planen Ihrer Bereitstellung

Wenn Sie mit dem Testen Ihrer Bereitstellung fertig sind, verwenden Sie die folgenden Befehle, um Ihre Ressourcen zu bereinigen.

Anmerkung

Stellen Sie sicher, dass Sie das bereitgestellte Modell oder die gespeicherten Daten nicht mehr benötigen, bevor Sie fortfahren.

Bereinigen Ihrer Ressourcen
  1. Löschen Sie die Inferenzbereitstellung und die zugehörigen Kubernetes-Ressourcen. Dadurch werden die laufenden Modellcontainer gestoppt und der SageMaker Endpunkt entfernt.

    kubectl delete inferenceendpointconfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Stellen Sie sicher, dass die Bereinigung erfolgreich durchgeführt wurde.

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

Verwenden Sie diese Debugging-Befehle, wenn Ihre Bereitstellung nicht wie erwartet funktioniert.

  1. Überprüfen Sie den Kubernetes-Bereitstellungsstatus.

    kubectl describe deployment $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  2. Überprüfen Sie den InferenceEndpointConfig Status, um den allgemeinen Bereitstellungsstatus und etwaige Konfigurationsprobleme zu überprüfen.

    kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
  3. Überprüfen Sie den Status aller Kubernetes-Objekte. Verschaffen Sie sich einen umfassenden Überblick über alle zugehörigen Kubernetes-Ressourcen in Ihrem Namespace. Auf diese Weise erhalten Sie einen schnellen Überblick darüber, was läuft und was möglicherweise fehlt.

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