Déployez des modèles à l' JumpStart aide de kubectl - Amazon SageMaker AI

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 à l' JumpStart aide de kubectl

Les étapes suivantes vous montrent comment déployer un JumpStart modèle sur un HyperPod cluster à 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

Assurez-vous d'avoir configuré des 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

Sélectionnez votre région

Choisissez la région dans laquelle déployer votre HyperPod cluster et l'endroit où vous souhaitez exécuter vos charges de travail d'inférence. Vous pouvez également ajouter d'autres personnalisations ausagemaker_client.

region_name = <REGION> import boto3 from botocore.config import Config # Configure retry options boto3_config = Config( retries={ 'max_attempts': 10, # Maximum number of retry attempts 'mode': 'adaptive' # Use adaptive mode for exponential backoff } ) sagemaker_client=boto3.client("sagemaker", region_name=region_name, config=boto3_config)

Choisissez votre modèle et votre cluster

  1. Consultez tous les modèles et HyperPod clusters de hubs SageMaker publics.

    interactive_view(get_all_public_hub_model_data(sagemaker_client)) interactive_view(get_all_cluster_data(sagemaker_client))
  2. Configurez l'ID du modèle et le nom du cluster que vous avez sélectionnés dans les variables ci-dessous.

    Note

    Vérifiez auprès de l'administrateur de votre cluster que les autorisations sont accordées pour ce rôle d'exécution de bloc-notes. Vous pouvez exécuter !aws sts get-caller-identity --query "Arn" pour vérifier le rôle d'exécution que vous utilisez

    # Change the model_id based on your requirement. A list of model IDs is available in step 1 of this notebook. # Proprietary models are not supported model_id = "<insert model id here>" from sagemaker.hyperpod.inference.notebook_utils import validate_public_hub_model_is_not_proprietary validate_public_hub_model_is_not_proprietary(sagemaker_client, model_id)
    # Select the cluster name where you want to deploy the model. List of clusters is available in step 1 of this notebook. cluster_name = "<insert cluster name here>" from sagemaker.hyperpod.inference.notebook_utils import validate_cluster_can_support_public_hub_modelfrom sagemaker.hyperpod.inference.notebook_utils import get_public_hub_model_compatible_instances validate_cluster_can_support_public_hub_model(sagemaker_client, model_id, cluster_name) interactive_view(get_public_hub_model_compatible_instances(sagemaker_client, model_id))
    # Select the instance that is relevant for your model deployment and exists within the selected cluster. instance_type = "ml.g5.8xlarge"
  3. Vérifiez auprès de l'administrateur du cluster quel espace de noms vous êtes autorisé à utiliser. L'administrateur doit avoir créé un compte de service d'inférence d'hyperpodes dans votre espace de noms.

    cluster_namespace = "default"

Configurer le nom du compartiment S3

Configurez les noms des compartiments S3 pour les certificats. Ce compartiment doit comporter un dossier nommé « certificats » dans lequel les certificats seront téléchargés. Le compartiment doit également se trouver dans la même région que celle définie ci-dessus.

# Set the S3 bucket name where TLS certificates will be stored for secure model communication certificate_bucket = "<insert bucket name here>"
import yaml from datetime import datetime # Get current time in format suitable for endpoint name current_time = datetime.now().strftime("%Y%m%d-%H%M%S") sagemaker_endpoint_name=f"{model_id}-{current_time}" def generate_jumpstart_model_yaml(model_id, model_version, namespace, instance_type, output_file_path, certificate_bucket): """ Generate a JumpStartModel YAML file with the provided parameters. Args: model_id (str): The model ID model_version (str): The model version namespace (str): The namespace instance_type (str): The instance type output_file_path (str): Path where the YAML file will be saved """ # Create the YAML structure tlsCertificateOutputS3Uri = "s3://" + certificate_bucket + "/certificates/" model_config = { "apiVersion": "inference.sagemaker.aws.amazon.com/v1alpha1", "kind": "JumpStartModel", "metadata": { "name": model_id, "namespace": namespace }, "spec": { "sageMakerEndpoint": { "name": sagemaker_endpoint_name }, "model": { "modelHubName": "SageMakerPublicHub", "modelId": model_id, # modelVersion is optional "modelVersion": model_version # acceptEula is optional, set value to True when using a gated model }, "server": { "instanceType": instance_type }, "tlsConfig": { "tlsCertificateOutputS3Uri": tlsCertificateOutputS3Uri } } } # 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}")
# Import JumpStart utilities to retrieve model specifications and version information from sagemaker.jumpstart import utilsfrom sagemaker.jumpstart.enums import JumpStartScriptScope model_specs = utils.verify_model_region_and_return_specs( model_id, "*", JumpStartScriptScope.INFERENCE, region=region_name) model_version = model_specs.version
# Generate the output filename for the Kubernetes YAML configuration output_file_path=f"jumpstart-model-{model_id}.yaml" generate_jumpstart_model_yaml( model_id=model_id, model_version=model_version, namespace=cluster_namespace, instance_type=instance_type, output_file_path=output_file_path, certificate_bucket=certificate_bucket ) import os os.environ["JUMPSTART_YAML_FILE_PATH"]=output_file_path os.environ["MODEL_ID"]=model_id

Déployer votre modèle

Mettez à jour votre configuration Kubernetes et déployez votre modèle

  1. Récupérez le nom du cluster EKS à partir de HyperPod.

    !aws sagemaker describe-cluster --cluster-name $cluster_name --query "Orchestrator.Eks.ClusterArn"
  2. Configurez kubectl pour vous connecter au cluster EKS.

    !aws eks update-kubeconfig --name "<insert name of eks cluster from above>" --region $region_name
  3. Déployez votre JumpStart modèle.

    !kubectl apply -f $JUMPSTART_YAML_FILE_PATH

Surveillez l'état du déploiement de votre modèle

  1. Assurez-vous que le modèle est correctement déployé.

    !kubectl describe JumpStartModel $model_id -n $cluster_namespace
  2. Assurez-vous que le point de terminaison est correctement créé.

    !kubectl describe SageMakerEndPointRegistration sagemaker_endpoint_name -n $cluster_namespace

Appelez le point de terminaison de votre modèle

Vous pouvez récupérer par programmation des exemples de charges utiles à partir de l'objet. JumpStartModel

import boto3 prompt = "{\"inputs\": \"What is AWS SageMaker?\"}}" runtime_client = boto3.client('sagemaker-runtime', region_name=region_name) response = runtime_client.invoke_endpoint( EndpointName=sagemaker_endpoint_name, ContentType="application/json", Body=prompt ) print(response["Body"].read().decode())

Gérez votre déploiement

Nettoyage des ressources

Supprimez le déploiement de votre JumpStart modèle une fois que vous n'en avez plus besoin.

!kubectl delete JumpStartModel $model_id -n $cluster_namespace

Résolution des problèmes

Utilisez ces commandes de débogage si votre déploiement ne fonctionne pas comme prévu.

  1. Vérifiez l'état du déploiement de Kubernetes. Cette commande inspecte l'objet de déploiement Kubernetes sous-jacent qui gère les pods exécutant votre modèle. Utilisez-le pour résoudre les problèmes de planification des pods, d'allocation des ressources et de démarrage des conteneurs.

    !kubectl describe deployment $model_id -n $cluster_namespace
  2. Vérifiez l'état de votre ressource JumpStart modèle. Cette commande examine la JumpStartModel ressource personnalisée qui gère la configuration de haut niveau du modèle et le cycle de vie de déploiement. Utilisez-le pour résoudre les problèmes spécifiques au modèle, tels que les erreurs de configuration ou les problèmes de création de points de SageMaker terminaison.

    !kubectl describe JumpStartModel $model_id -n $cluster_namespace
  3. Vérifiez l'état de tous les objets Kubernetes. Cette commande fournit une vue d'ensemble complète de toutes les ressources Kubernetes associées dans votre espace de noms. Utilisez-le pour un bilan de santé rapide afin de voir l'état général des pods, des services, des déploiements et des ressources personnalisées associés au déploiement de votre modèle.

    !kubectl get pods,svc,deployment,JumpStartModel,sagemakerendpointregistration -n $cluster_namespace