Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Déployez des modèles personnalisés et affinés depuis Amazon S3 et Amazon à FSx l'aide de kubectl
Les étapes suivantes vous montrent comment déployer des modèles stockés sur Amazon S3 ou Amazon sur un SageMaker HyperPod cluster Amazon FSx à l'aide de kubectl.
Les instructions suivantes contiennent des cellules de code et des commandes conçues pour s'exécuter dans un environnement de bloc-notes Jupyter, tel qu'Amazon SageMaker Studio ou SageMaker Notebook Instances. Chaque bloc de code représente une cellule de bloc-notes qui doit être exécutée de manière séquentielle. Les éléments interactifs, notamment les tables de découverte de modèles et les commandes de surveillance de l'état, sont optimisés pour l'interface de l'ordinateur portable et peuvent ne pas fonctionner correctement dans d'autres environnements. Assurez-vous d'avoir accès à un environnement de bloc-notes doté des AWS autorisations nécessaires avant de continuer.
Prérequis
Vérifiez que vous avez configuré les fonctionnalités d'inférence sur vos SageMaker HyperPod clusters Amazon. Pour de plus amples informations, veuillez consulter Configuration de vos HyperPod clusters pour le déploiement de modèles.
Installation et configuration
Remplacez toutes les valeurs d'espace réservé par vos identificateurs de ressources réels.
-
Initialisez le nom de votre cluster. Cela permet d'identifier le HyperPod cluster dans lequel votre modèle sera déployé.
# 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"
-
Initialisez l'espace de noms de votre cluster. L'administrateur de votre cluster doit déjà avoir créé un compte de service d'inférence d'hyperpodes dans votre espace de noms.
cluster_namespace="<namespace>"
-
Définissez la méthode d'assistance pour créer des fichiers YAML pour le déploiement
La fonction d'assistance suivante génère les fichiers de configuration YAML de Kubernetes nécessaires au déploiement de votre modèle. Cette fonction crée différentes structures YAML selon que votre modèle est stocké sur Amazon S3 ou Amazon FSx, en gérant automatiquement les configurations spécifiques au stockage. Vous allez utiliser cette fonction dans les sections suivantes pour générer les fichiers de déploiement pour le backend de stockage que vous avez choisi.
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}")
Déployez votre modèle depuis Amazon S3 ou Amazon FSx
Déployez le modèle sur votre cluster
-
Obtenez le nom du cluster Amazon EKS à partir de l'ARN du HyperPod cluster pour l'authentification 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)
-
Configurer kubectl pour s'authentifier auprès du cluster Hyperpod EKS à l'aide des informations d'identification AWS
!aws eks update-kubeconfig --name $cluster_name --region $region_name
-
Déployez votre
InferenceEndpointConfig
modèle.!kubectl apply -f $INFERENCE_ENDPOINT_CONFIG_YAML_FILE_PATH
Vérifiez l'état de votre déploiement
-
Vérifiez si le modèle a été correctement déployé.
!kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
La commande renvoie un résultat semblable à ce qui suit :
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
-
Vérifiez que le point de terminaison est correctement créé.
!kubectl describe SageMakerEndpointRegistration $sagemaker_endpoint_name -n $cluster_namespace
La commande renvoie un résultat semblable à ce qui suit :
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
-
Testez le point de terminaison déployé pour vérifier qu'il fonctionne correctement. Cette étape confirme que votre modèle est correctement déployé et qu'il peut traiter les demandes d'inférence.
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."}]
Gérez votre déploiement
Lorsque vous avez terminé de tester votre déploiement, utilisez les commandes suivantes pour nettoyer vos ressources.
Note
Vérifiez que vous n'avez plus besoin du modèle déployé ou des données stockées avant de continuer.
Nettoyage de vos ressources
-
Supprimez le déploiement d'inférence et les ressources Kubernetes associées. Cela arrête les conteneurs de modèles en cours d'exécution et supprime le SageMaker point de terminaison.
!kubectl delete inferenceendpointconfig.inference.sagemaker.aws.amazon.com/$deployment_name
-
(Facultatif) Supprimez le 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)}")
-
Vérifiez que le nettoyage a été effectué avec succès.
# 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
Résolution des problèmes
-
Vérifiez l'état du déploiement de Kubernetes.
!kubectl describe deployment $deployment_name -n $cluster_namespace
-
Vérifiez le InferenceEndpointConfig statut pour connaître l'état de déploiement de haut niveau et les éventuels problèmes de configuration.
kubectl describe InferenceEndpointConfig $deployment_name -n $cluster_namespace
-
Vérifiez l'état de tous les objets Kubernetes. Bénéficiez d'une vue complète de toutes les ressources Kubernetes associées dans votre espace de noms. Cela vous donne un aperçu rapide de ce qui est en cours d'exécution et de ce qui pourrait manquer.
!kubectl get pods,svc,deployment,InferenceEndpointConfig,sagemakerendpointregistration -n $cluster_namespace