View a markdown version of this page

Stellen Sie Modelle von Amazon S3, Amazon FSx oder Hugging Face Hub mithilfe von kubectl 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 Modelle von Amazon S3, Amazon FSx oder Hugging Face Hub mithilfe von kubectl bereit

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

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 Dies identifiziert den HyperPod Cluster, 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.24xlarge for Llama 3.1 8B model which has sufficient memory and GPU instance_type="ml.g5.24xlarge"
  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="llama-fsx"
    2. Konfigurieren Sie die zu verwendende Amazon FSx-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 Lama-Modell.

      Anmerkung

      Ersetzen nvidia.com/gpu Sie bei Clustern mit aktivierter GPU-Partitionierung durch den entsprechenden MIG-Ressourcennamen wie. 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: $SAGEMAKER_ENDPOINT_NAME
        namespace: $CLUSTER_NAMESPACE
      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: Llama-3.1-8B-Instruct
          modelSourceType: fsx
        worker:
          image: vllm/vllm-openai:v0.19.1
          modelInvocationPort:
            containerPort: 8000
            name: http
          modelVolumeMount:
            mountPath: /opt/ml/model
            name: model-weights
          resources:
            limits:
              nvidia.com/gpu: 4
            requests:
              cpu: 30000m
              memory: 100Gi
              nvidia.com/gpu: 4
          args:
            - "--model"
            - "/opt/ml/model"
            - "--port"
            - "8000"
            - "--tensor-parallel-size"
            - "4"
            - "--served-model-name"
            - "Llama-3.1-8B-Instruct"
          environmentVariables:
            - name: VLLM_REQUEST_TIMEOUT
              value: "600"
      EOF
    Using Amazon S3 as the model source
    1. Richten Sie einen SageMaker Endpunktnamen ein.

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

      export S3_MODEL_LOCATION="<your-s3-bucket-name>"
    3. Im Folgenden finden Sie ein Beispiel für eine Yaml-Datei zum Erstellen eines Endpunkts mit Amazon S3 und einem Lama-Modell, das vLLM als Inferenzlaufzeit verwendet.

      Anmerkung

      Ersetzen Sie bei Clustern mit aktivierter GPU-Partitionierung durch den entsprechenden nvidia.com/gpu MIG-Ressourcennamen wie. 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/v1
      kind: InferenceEndpointConfig
      metadata:
        name: $SAGEMAKER_ENDPOINT_NAME
        namespace: $CLUSTER_NAMESPACE
      spec:
        modelName: Llama-3.1-8B-Instruct
        instanceType: ml.g5.24xlarge
        invocationEndpoint: v1/chat/completions
        replicas: 2
        modelSourceConfig:
          modelSourceType: s3
          s3Storage:
            bucketName: $S3_MODEL_LOCATION
            region: $REGION
          modelLocation: Llama-3.1-8B-Instruct
          prefetchEnabled: true
        worker:
          image: vllm/vllm-openai:v0.19.1
          modelInvocationPort:
            containerPort: 8000
            name: http
          modelVolumeMount:
            name: model-weights
            mountPath: /opt/ml/model
          resources:
            limits:
              nvidia.com/gpu: 4
            requests:
              cpu: 30000m
              memory: 100Gi
              nvidia.com/gpu: 4
          args:
            - "--model"
            - "/opt/ml/model"
            - "--port"
            - "8000"
            - "--tensor-parallel-size"
            - "4"
            - "--served-model-name"
            - "Llama-3.1-8B-Instruct"
          environmentVariables:
            - name: VLLM_REQUEST_TIMEOUT
              value: "600"
      EOF
    Using Hugging Face Hub as the model source
    1. Erstellen Sie ein Kubernetes-Geheimnis, das Ihr Hugging Face API-Token enthält. Dieses Token ist für Gated Models erforderlich und wird für alle Downloads empfohlen. Sie können ein Token bei huggingface generieren. co/settings/Tokens.

      Wichtig

      Für die Bereitstellung von Modellen von Hugging Face Hub ist ein ausgehender Internetzugang von Ihren Clusterknoten zu den Hugging Face-Domänen erforderlich, einschließlich und. *.huggingface.co *.hf.co Stellen Sie sicher, dass Ihre VPC-Netzwerkkonfiguration (NAT-Gateway, Sicherheitsgruppen und Netzwerk-ACLs) den HTTPS-Ausgang zu diesen Domänen zulässt. Ohne Internetzugang schlägt der Modelldownload fehl.

      Anmerkung

      Für Produktionsumgebungen empfehlen wir, Amazon S3 oder Amazon FSx als Modellquelle anstelle von Hugging Face Hub zu verwenden. Bei Amazon S3 und Amazon FSx werden Modellartefakte in Ihrem AWS Konto gespeichert, sodass Sie nicht mehr von einer externen Internetverbindung abhängig sind und die Bereitstellungszeiten besser vorhersagbar sind. Hugging Face Hub eignet sich am besten für Entwicklung, Experimente und schnelles Prototyping, wo der direkte Zugriff auf das Hugging Face-Modell-Repository praktisch ist.

      kubectl create secret generic hf-token-secret \ --from-literal=token=hf_YOUR_TOKEN_HERE \ -n $CLUSTER_NAMESPACE
    2. Richten Sie einen Endpunktnamen ein. SageMaker

      export SAGEMAKER_ENDPOINT_NAME="mistral7b-hf"
    3. Im Folgenden finden Sie eine Beispiel-YAML-Datei für die Bereitstellung eines Mistral 7B-Modells von Hugging Face Hub unter Verwendung von vLLM als Inferenzlaufzeit. Mit verwendet der Operator einen Init-ContainerprefetchEnabled: true, um das Modell herunterzuladen, bevor der Inferenzcontainer gestartet wird.

      Anmerkung

      Ersetzen nvidia.com/gpu Sie bei Clustern mit aktivierter GPU-Partitionierung durch den entsprechenden MIG-Ressourcennamen wie. nvidia.com/mig-1g.10gb Weitere Informationen finden Sie unter Einreichung von Aufgaben mit MIG.

      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.19.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
    4. Die wichtigsten Konfigurationsfelder für Hugging Face sind:

      • modelSourceType(erforderlich) — Auf eingestellt. huggingface

      • huggingFaceModel.modelId(erforderlich) — Die Modell-ID von Hugging Face Hub im org/model Format (z. B.mistralai/Mistral-7B-Instruct-v0.3).

      • huggingFaceModel.commitSHA(optional) — Ein 40-stelliges Git-Commit-SHA zum Pingen einer bestimmten Modellversion. Wenn es weggelassen wird, wird standardmäßig der main Zweig verwendet.

      • huggingFaceModel.tokenSecretRef(optional) — Verweis auf ein Kubernetes-Geheimnis, das dein Hugging Face API-Token enthält. Erforderlich für geschlossene Modelle. Das Token wird nur beim Herunterladen des Modells verwendet und ist dem Inferenzcontainer nicht zugänglich.

      • prefetchEnabled(optional) — Wenntrue, lädt ein Init-Container das Modell herunter, bevor der Inferenzcontainer startet. Wennfalse, lädt die Inferenzlaufzeit (vLLM, TGI, sGLang) das Modell beim Start nativ herunter. Standardeinstellung: false.

Anmerkung

Informationen zur Konfiguration von KV-Caching und intelligentem Routing für eine verbesserte Leistung finden Sie unter. Konfigurieren Sie KV-Caching und intelligentes Routing

Stellen Sie Ihr Modell von Amazon S3, Amazon FSx oder Hugging Face Hub aus bereit

  1. Rufen Sie den Amazon EKS-Clusternamen aus dem Cluster-ARN für die HyperPod 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
    Deploy with Hugging Face Hub as a source
    kubectl apply -f deploy_hf_inference.yaml

    Wenn die Bereitstellung fehlschlägt, überprüfen Sie die InferenceEndpointConfig Ereignisse auf Diagnoseinformationen. Häufig auftretende Probleme wie Token-Fehler, Netzwerkkonnektivität und das Modell wurde nicht gefunden, finden Sie unterFehler bei der Bereitstellung des Hugging Face Hub-Modells.

Ü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 sehen.

    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