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 einer Jupyter-Notebook-Umgebung wie Amazon SageMaker Studio- oder SageMaker Notebook-Instances konzipiert sind. Jeder Codeblock steht für eine Notebook-Zelle, die sequentiell ausgeführt werden sollte. Die interaktiven Elemente, einschließlich Tabellen zur Modellerkennung und Befehle zur Statusüberwachung, sind für die Notebook-Oberfläche optimiert und funktionieren in anderen Umgebungen möglicherweise nicht richtig. Stellen Sie sicher, dass Sie Zugriff auf eine Notebook-Umgebung mit den erforderlichen AWS Berechtigungen haben, bevor Sie fortfahren.
Voraussetzungen
Stellen Sie sicher, dass Sie Inferenzfunktionen auf Ihren SageMaker HyperPod Amazon-Clustern eingerichtet haben. Weitere Informationen finden Sie unter Richten Sie Ihre Cluster für die Modellbereitstellung ein HyperPod .
Einrichtung und Konfiguration
Ersetzen Sie alle Platzhalterwerte durch Ihre tatsächlichen Ressourcen-IDs.
-
Initialisieren Sie Ihren Clusternamen. Dadurch wird der HyperPod Cluster identifiziert, in dem Ihr Modell bereitgestellt wird.
# 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>"
-
Definieren Sie die Hilfsmethode zum Erstellen von YAML-Dateien für die Bereitstellung
Die folgende Hilfsfunktion generiert die Kubernetes-YAML-Konfigurationsdateien, die für die Bereitstellung Ihres Modells benötigt werden. Diese Funktion erstellt unterschiedliche YAML-Strukturen, je nachdem, ob Ihr Modell auf Amazon S3 oder Amazon gespeichert ist FSx, und verarbeitet die speicherspezifischen Konfigurationen automatisch. Sie werden diese Funktion in den nächsten Abschnitten verwenden, um die Bereitstellungsdateien für das von Ihnen gewählte Speicher-Backend zu generieren.
def generate_inferenceendpointconfig_yaml(deployment_name, model_id, namespace, instance_type, output_file_path, region, tls_certificate_s3_location, model_location, sagemaker_endpoint_name, fsxFileSystemId="", isFsx=False, s3_bucket=None): """ Generate a InferenceEndpointConfig YAML file for S3 storage with the provided parameters. Args: deployment_name (str): The deployment name model_id (str): The model ID namespace (str): The namespace instance_type (str): The instance type output_file_path (str): Path where the YAML file will be saved region (str): Region where bucket exists tls_certificate_s3_location (str): S3 location for TLS certificate model_location (str): Location of the model sagemaker_endpoint_name (str): Name of the SageMaker endpoint fsxFileSystemId (str): FSx filesystem ID (optional) isFsx (bool): Whether to use FSx storage (optional) s3_bucket (str): S3 bucket where model exists (optional, only needed when isFsx is False) """ # Create the YAML structure model_config = { "apiVersion": "inference.sagemaker.aws.amazon.com/v1alpha1", "kind": "InferenceEndpointConfig", "metadata": { "name": deployment_name, "namespace": namespace }, "spec": { "modelName": model_id, "endpointName": sagemaker_endpoint_name, "invocationEndpoint": "invocations", "instanceType": instance_type, "modelSourceConfig": {}, "worker": { "resources": { "limits": { "nvidia.com/gpu": 1, }, "requests": { "nvidia.com/gpu": 1, "cpu": "30000m", "memory": "100Gi" } }, "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": { "name": "model-weights", "mountPath": "/opt/ml/model" }, "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", } ] }, "tlsConfig": { "tlsCertificateOutputS3Uri": tls_certificate_s3_location, } }, } if (not isFsx): if s3_bucket is None: raise ValueError("s3_bucket is required when isFsx is False") model_config["spec"]["modelSourceConfig"] = { "modelSourceType": "s3", "s3Storage": { "bucketName": s3_bucket, "region": region, }, "modelLocation": model_location } else: model_config["spec"]["modelSourceConfig"] = { "modelSourceType": "fsx", "fsxStorage": { "fileSystemId": fsxFileSystemId, }, "modelLocation": model_location } # Write to YAML file with open(output_file_path, 'w') as file: yaml.dump(model_config, file, default_flow_style=False) print(f"YAML file created successfully at: {output_file_path}")
Stellen Sie Ihr Modell von Amazon S3 oder Amazon aus bereit FSx
Stellen Sie das Modell in Ihrem Cluster bereit
-
Rufen Sie den Namen des Amazon EKS-Clusters aus dem HyperPod Cluster-ARN für die Kubectl-Authentifizierung ab.
cluster_arn = !aws sagemaker describe-cluster --cluster-name $hyperpod_cluster_name --query "Orchestrator.Eks.ClusterArn" --region $region_name cluster_name = cluster_arn[0].strip('"').split('/')[-1] print(cluster_name)
-
Konfigurieren Sie kubectl so, dass es sich mithilfe von Anmeldeinformationen beim Hyperpod EKS-Cluster authentifiziert AWS
!aws eks update-kubeconfig --name $cluster_name --region $region_name
-
Stellen Sie Ihr Modell bereit.
InferenceEndpointConfig
!kubectl apply -f $INFERENCE_ENDPOINT_CONFIG_YAML_FILE_PATH
Überprüfen Sie den Status Ihrer Bereitstellung
-
Überprüfen Sie, ob das Modell erfolgreich eingesetzt wurde.
!kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
Daraufhin erhalten Sie ein Ergebnis, das dem hier dargestellten entspricht:
Name: deepseek15b-20250624043033 Reason: NativeDeploymentObjectFound Status: Conditions: Last Transition Time: 2025-07-10T18:39:51Z Message: Deployment, ALB Creation or SageMaker endpoint registration creation for model is in progress Reason: InProgress Status: True Type: DeploymentInProgress Last Transition Time: 2025-07-10T18:47:26Z Message: Deployment and SageMaker endpoint registration for model have been created successfully Reason: Success Status: True Type: DeploymentComplete
-
Überprüfen Sie, ob der Endpunkt erfolgreich erstellt wurde.
!kubectl describe SageMakerEndpointRegistration $sagemaker_endpoint_name -n $cluster_namespace
Daraufhin erhalten Sie ein Ergebnis, das dem hier dargestellten entspricht:
Name: deepseek15b-20250624043033 Namespace: ns-team-a Kind: SageMakerEndpointRegistration Status: Conditions: Last Transition Time: 2025-06-24T04:33:42Z Message: Endpoint created. Status: True Type: EndpointCreated State: CreationCompleted
-
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.
import boto3 prompt = "{\"inputs\": \"How tall is Mt Everest?\"}}" runtime_client = boto3.client('sagemaker-runtime', region_name=region_name, config=boto3_config) response = runtime_client.invoke_endpoint( EndpointName=sagemaker_endpoint_name, ContentType="application/json", Body=prompt ) print(response["Body"].read().decode())
[{"generated_text":"As of the last update in July 2024, Mount Everest stands at a height of **8,850 meters** (29,029 feet) above sea level. The exact elevation can vary slightly due to changes caused by tectonic activity and the melting of ice sheets."}]
Verwalten Sie Ihre 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
-
Löschen Sie die Inferenzbereitstellung und die zugehörigen Kubernetes-Ressourcen. Dadurch werden die laufenden Modellcontainer gestoppt und der Endpunkt entfernt. SageMaker
!kubectl delete inferenceendpointconfig.inference.sagemaker.aws.amazon.com/$deployment_name
-
(Optional) Löschen Sie das FSx Volume.
try: # Delete the file system response = fsx.delete_file_system( FileSystemId=file_system_id ) print(f"Deleting FSx filesystem: {file_system_id}") # Optional: Wait for deletion to complete while True: try: response = fsx.describe_file_systems(FileSystemIds=[file_system_id]) status = response['FileSystems'][0]['Lifecycle'] print(f"Current status: {status}") time.sleep(30) except fsx.exceptions.FileSystemNotFound: print("File system deleted successfully") break except Exception as e: print(f"Error deleting file system: {str(e)}")
-
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_name
Fehlerbehebung
-
Überprüfen Sie den Kubernetes-Bereitstellungsstatus.
!kubectl describe deployment $deployment_name -n $cluster_namespace
-
Überprüfen Sie den InferenceEndpointConfig Status, um den Bereitstellungsstatus auf hoher Ebene und etwaige Konfigurationsprobleme zu überprüfen.
kubectl describe InferenceEndpointConfig $deployment_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