Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Distribuisci modelli personalizzati e ottimizzati da Amazon S3 e Amazon utilizzando kubectl FSx
I passaggi seguenti mostrano come distribuire modelli archiviati su Amazon S3 o Amazon su un cluster FSx SageMaker HyperPod Amazon utilizzando kubectl.
Le seguenti istruzioni contengono celle di codice e comandi progettati per essere eseguiti in un ambiente notebook Jupyter, come Amazon SageMaker Studio o SageMaker Notebook Instances. Ogni blocco di codice rappresenta una cella del notebook che deve essere eseguita in sequenza. Gli elementi interattivi, tra cui le tabelle di individuazione dei modelli e i comandi di monitoraggio dello stato, sono ottimizzati per l'interfaccia del notebook e potrebbero non funzionare correttamente in altri ambienti. Assicurati di avere accesso a un ambiente notebook con le AWS autorizzazioni necessarie prima di procedere.
Prerequisiti
Verifica di aver configurato le funzionalità di inferenza sui tuoi SageMaker HyperPod cluster Amazon. Per ulteriori informazioni, consulta HyperPod Configurazione dei cluster per la distribuzione dei modelli.
Configurazione e configurazione
Sostituisci tutti i valori segnaposto con i tuoi identificatori di risorsa effettivi.
-
Inizializza il nome del cluster. Questo identifica il HyperPod cluster in cui verrà distribuito il modello.
# 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"
-
Inizializza lo spazio dei nomi del cluster. L'amministratore del cluster dovrebbe aver già creato un account del servizio di inferenza hyperpod nel tuo spazio dei nomi.
cluster_namespace="<namespace>"
-
Definisci il metodo di supporto per creare file YAML per la distribuzione
La seguente funzione di supporto genera i file di configurazione YAML di Kubernetes necessari per distribuire il modello. Questa funzione crea diverse strutture YAML a seconda che il modello sia archiviato su Amazon S3 o FSx Amazon, gestendo automaticamente le configurazioni specifiche dello storage. Utilizzerai questa funzione nelle prossime sezioni per generare i file di distribuzione per il backend di storage scelto.
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}")
Implementa il tuo modello da Amazon S3 o Amazon FSx
Implementa il modello nel tuo cluster
-
Ottieni il nome del cluster Amazon EKS dall'ARN del HyperPod cluster per l'autenticazione kubectl.
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)
-
Configura kubectl per l'autenticazione con il cluster Hyperpod EKS utilizzando le credenziali AWS
!aws eks update-kubeconfig --name $cluster_name --region $region_name
-
InferenceEndpointConfig
Implementa il tuo modello.!kubectl apply -f $INFERENCE_ENDPOINT_CONFIG_YAML_FILE_PATH
Verifica lo stato della distribuzione
-
Verifica se il modello è stato distribuito correttamente.
!kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
Il comando restituisce un output simile al seguente:
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
-
Verifica che l'endpoint sia stato creato correttamente.
!kubectl describe SageMakerEndpointRegistration $sagemaker_endpoint_name -n $cluster_namespace
Il comando restituisce un output simile al seguente:
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
-
Testa l'endpoint distribuito per verificare che funzioni correttamente. Questo passaggio conferma che il modello è stato distribuito correttamente e può elaborare le richieste di inferenza.
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."}]
Gestisci la tua implementazione
Al termine del test della distribuzione, utilizza i seguenti comandi per ripulire le risorse.
Nota
Verifica di non aver più bisogno del modello distribuito o dei dati memorizzati prima di procedere.
Pulizia delle risorse
-
Elimina la distribuzione dell'inferenza e le risorse Kubernetes associate. Ciò interrompe l'esecuzione dei contenitori del modello e rimuove l'endpoint. SageMaker
!kubectl delete inferenceendpointconfig.inference.sagemaker.aws.amazon.com/$deployment_name
-
(Facoltativo) Eliminare il 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)}")
-
Verifica che la pulizia sia stata eseguita correttamente.
# 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
Risoluzione dei problemi
-
Controlla lo stato della distribuzione di Kubernetes.
!kubectl describe deployment $deployment_name -n $cluster_namespace
-
Controlla lo InferenceEndpointConfig stato per vedere lo stato di implementazione di alto livello e gli eventuali problemi di configurazione.
kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
-
Controlla lo stato di tutti gli oggetti Kubernetes. Ottieni una visione completa di tutte le risorse Kubernetes correlate nel tuo namespace. Questo ti offre una rapida panoramica di ciò che è in esecuzione e di ciò che potrebbe mancare.
!kubectl get pods,svc,deployment,InferenceEndpointConfig,sagemakerendpointregistration -n $cluster_namespace