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 Modelle von Amazon S3, Amazon FSx oder Hugging Face Hub bereit
Die folgenden Schritte zeigen Ihnen, wie Sie auf Amazon S3, Amazon FSx oder Hugging Face Hub gespeicherte Modelle mithilfe von 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.
-
Wählen Sie Ihre Region in Ihrer Umgebung aus.
export REGION=<region>
-
Initialisieren des -Cluster-Namens Dadurch wird der HyperPod Cluster identifiziert, in dem Ihr Modell bereitgestellt wird.
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"
-
Initialisieren Sie Ihren Cluster-Namespace. Ihr Clusteradministrator sollte bereits ein Hyperpod-Inferenzdienstkonto in Ihrem Namespace erstellt haben.
cluster_namespace="<namespace>"
-
Erstellen Sie ein CRD mithilfe einer der folgenden Optionen:
- Using Amazon FSx as the model source
-
-
Richten Sie einen SageMaker Endpunktnamen ein.
export SAGEMAKER_ENDPOINT_NAME="deepseek15b-fsx"
-
Konfigurieren Sie die zu verwendende Amazon FSx-Dateisystem-ID.
export FSX_FILE_SYSTEM_ID="fs-1234abcd"
-
Im Folgenden finden Sie ein Beispiel für eine Yaml-Datei zum Erstellen eines Endpunkts mit Amazon FSx und einem DeepSeek Modell.
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
-
-
Richten Sie einen SageMaker Endpunktnamen ein.
export SAGEMAKER_ENDPOINT_NAME="deepseek15b-s3"
-
Konfigurieren Sie den Amazon-S3-Bucket-Speicherort, an dem sich das Modell befindet.
export S3_MODEL_LOCATION="deepseek-qwen-1-5b"
-
Im Folgenden finden Sie ein Beispiel für eine Yaml-Datei zum Erstellen eines Endpunkts mit Amazon S3 und einem DeepSeek Modell.
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
-
-
Richten Sie einen SageMaker Endpunktnamen ein.
export SAGEMAKER_ENDPOINT_NAME="deepseek15b-s3"
-
Konfigurieren Sie den Amazon-S3-Bucket-Speicherort, an dem sich das Modell befindet.
export S3_MODEL_LOCATION="deepseek-qwen-1-5b"
-
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
- Using Hugging Face Hub as the model source
-
-
Erstellen Sie ein Kubernetes-Secret, das Ihr Hugging Face API-Token enthält. Dieses Token ist für Gated-Modelle erforderlich und wird für alle Downloads empfohlen. Sie können bei huggingface ein Token generieren. co/settings/Tokens.
Für die Bereitstellung von Modellen von Hugging Face Hub ist ein ausgehender Internetzugang von Ihren Clusterknoten zu Hugging Face Face-Domänen einschließlich und erforderlich. *.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.
Für Produktionsumgebungen empfehlen wir, Amazon S3 oder Amazon FSx als Modellquelle anstelle von Hugging Face Hub zu verwenden. Mit Amazon S3 und Amazon FSx werden Modellartefakte in Ihrem AWS Konto gespeichert, wodurch die Abhängigkeit von externer Internetverbindung entfällt und die Bereitstellungszeiten besser vorhersehbar sind. Hugging Face Hub eignet sich am besten für Entwicklung, Experimente und schnelles Prototyping, bei denen der direkte Zugriff auf das Hugging Face Face-Modell-Repository bequem ist.
kubectl create secret generic hf-token-secret \
--from-literal=token=hf_YOUR_TOKEN_HERE \
-n $CLUSTER_NAMESPACE
-
Richten Sie einen Endpunktnamen ein. SageMaker
export SAGEMAKER_ENDPOINT_NAME="mistral7b-hf"
-
Im Folgenden finden Sie eine YAML-Beispieldatei 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.
Ersetzen nvidia.com/gpu Sie es bei Clustern mit aktivierter GPU-Partitionierung 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_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
-
Die wichtigsten Konfigurationsfelder von Hugging Face sind:
modelSourceType(erforderlich) — Eingestellt auf. 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 Git-Commit-SHA mit 40 Zeichen, um eine bestimmte Modellversion zu pinnen. Wenn es weggelassen wird, wird standardmäßig der main Branch verwendet.
huggingFaceModel.tokenSecretRef(optional) — Verweis auf ein Kubernetes-Secret, das Ihr Hugging Face API-Token enthält. Erforderlich für geschlossene Modelle. Das Token wird nur beim Herunterladen des Modells verwendet und ist nicht im Inferenzcontainer verfügbar.
prefetchEnabled(optional) — Wenn ein Init-Container das Modell herunterlädttrue, bevor der Inferenzcontainer gestartet wird. Wann lädt false die Inferenzlaufzeit (vLLM, TGI, SGLang) das Modell beim Start nativ herunter. Standardeinstellung: false.
Konfigurieren Sie KV-Caching und intelligentes Routing für eine verbesserte Leistung
-
Aktivieren Sie das KV-Caching, indem Sie enableL1Cache und enableL2Cache auf einstellen. Stellen true Sie dann die Redis-Cluster-URL ein redis und aktualisieren Sie l2CacheSpec sie l2CacheLocalUrl mit der Redis-Cluster-URL.
kvCacheSpec:
enableL1Cache: true
enableL2Cache: true
l2CacheSpec:
l2CacheBackend: <redis | tieredstorage>
l2CacheLocalUrl: <redis cluster URL if l2CacheBackend is redis >
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.
Sie benötigen l2 nicht, CacheLocalUrl wenn TieredStorage ausgewählt ist.
-
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>
-
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 über Amazon S3, Amazon FSx oder Hugging Face Hub bereit
-
Rufen Sie den Amazon EKS-Clusternamen 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
-
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. Informationen zu häufigen Problemen wie Tokenfehlern, Netzwerkkonnektivität und nicht gefundenes Modell finden Sie unterFehler bei der Bereitstellung des Modells Hugging Face Hub.
Überprüfen des Status Ihrer Bereitstellung
-
Überprüfen Sie, ob das Modell erfolgreich eingesetzt wurde.
kubectl describe InferenceEndpointConfig $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
-
Stellen Sie sicher, dass der Endpunkt erfolgreich erstellt wurde.
kubectl describe SageMakerEndpointRegistration $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
-
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.
Stellen Sie sicher, dass Sie das bereitgestellte Modell oder die gespeicherten Daten nicht mehr benötigen, bevor Sie fortfahren.
Bereinigen Ihrer Ressourcen
-
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
-
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.
-
Überprüfen Sie den Kubernetes-Bereitstellungsstatus.
kubectl describe deployment $SAGEMAKER_ENDPOINT_NAME -n $CLUSTER_NAMESPACE
-
Ü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
-
Ü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