AWS Machine LearningMis à jour le

Déployer et évaluer les modèles avec Amazon SageMaker JumpStart

Apprenez à déployer un modèle disponible via Amazon SageMaker JumpStart, exécutez un test de performance léger et reproductible en utilisant le SDK Python de SageMaker, et supprimez l’endpoint une fois le test terminé.

SageMaker Studio JumpStart Models page showing the model catalog with spotlight and text generation models and filters
Source de l’image · AWS Machine Learning

Choisir le modèle approprié pour une application spécifique nécessite une méthode pratique pour le tester avec des entrées représentatives. Amazon SageMaker JumpStart offre un catalogue étendu de modèles déjà pré-entraînés. Dans cet article, nous montrons comment déployer un modèle disponible via SageMaker JumpStart, effectuer un test de performance léger et reproductible en utilisant le SDK Python de SageMaker, et supprimer l’endpoint une fois le test terminé. Pour les modèles pris en charge et la capacité disponible, ce flux de travail offre une voie d’évaluation reproductible, bien que le temps de déploiement varie en fonction du modèle, du type d’instance, du quota et de la région AWS.

En 2026, SageMaker JumpStart a introduit deux améliorations qui simplifient la découverte et le déploiement de modèles. Dans la section Model Hub de l’interface Amazon SageMaker AI, vous pouvez consulter le catalogue SageMaker JumpStart, voir des notebooks d’exemple et les ouvrir directement dans SageMaker Studio. Les options de déploiement d’endpoint pré-configurées offrent des configurations nommées optimisées pour des priorités telles que le faible coût, la faible latence ou les charges de travail à usage général, dans une gamme de modèles d’IA générative, y compris des configurations optimisées par Neuron. De plus, vous pouvez désormais passer de la découverte de modèles Hugging Face à le déploiement de l’IA SageMaker en un seul clic, grâce à l’intégration nouvelle du deep link.

Aperçu de la solution

Notre approche utilise un script Python réutilisable qui effectue trois étapes :

  • Découvrez et déploiez un modèle via SageMaker JumpStart.
  • Exécutez les prompts d’exemple spécifiques au modèle et mesurez la latence, la longueur approximative de l’output, ainsi que le taux de génération par requête unique.
  • Nettoyer l’endpoint.

Ce modèle fonctionne pour de nombreux modèles SageMaker JumpStart compatibles, bien que les formats de contenu, les types d’instances requis, les exigences du contrat de licence pour l’utilisateur final (EULA) et les schémas de réponse puissent nécessiter des ajustements spécifiques au modèle.

Prérequis

  • Un compte AWS avec les droits de SageMaker AI.
  • Python 3+ avec le SDK Python de SageMaker v3 installé (pip install "sagemaker>=3,<4").
  • Quota d’instances GPU suffisant pour le modèle que vous souhaitez tester ou demander une augmentation du quota.

Étape 1.a : Découvrir les modèles disponibles

Piste de l'interface utilisateur pour trouver les modèles dans SageMaker JumpStart :

SageMaker Studio JumpStart Models page showing the model catalog with spotlight and text generation models and filters

Figure 1 : Consultation du catalogue de modèles sur la page SageMaker JumpStart Models dans SageMaker Studio

Chemin de code utilisant le SDK Python de SageMaker :

from sagemaker.core.jumpstart.notebook_utils import (
    list_jumpstart_models,
)

REGION = "us-east-1"

models = list_jumpstart_models(
    filter="task == textgeneration",
    region=REGION,
    list_versions=True,
)

print(f"Found {len(models)} text generation models")

for model_id, model_version in models[:10]:
    print(
        f" - {model_id} "
        f"(version {model_version})"
    )

Ou recherchez par nom du modèle :

from sagemaker.core.jumpstart.notebook_utils import list_jumpstart_models

ids = list_jumpstart_models(
    filter="model_id contains qwen",
    region=REGION,
    list_versions=True,
)

print(f"{len(ids)} models matched in {REGION}\n")

for model_id, version in ids:
    print(f"{model_id:<55} v{version}")

Étape 1.b : Déployer le modèle

Piste de l’interface utilisateur pour déployer les modèles via SageMaker JumpStart :

JumpStart model detail page for Qwen3.8 27B with the Deploy button highlighted and model capabilities listed

Figure 2 : Déploiement d’un modèle depuis la page détaillée du SageMaker JumpStart dans SageMaker Studio

Chemin de code utilisant le SDK Python de SageMaker :

import time

from sagemaker.core.jumpstart.accessors import JumpStartModelsAccessor
from sagemaker.core.jumpstart.configs import JumpStartConfig
from sagemaker.core.training.configs import Compute
from sagemaker.serve import ModelBuilder

MODEL_ID = "huggingface-vlm-qwen3-5-27b"
MODEL_VERSION = "1.13.0"
REGION = "us-east-1"
ACCEPT_EULA = False  # Set True only after reviewing the model terms

def get_field(value, name, default=None):
    if isinstance(value, dict):
        return value.get(name, default)
    return getattr(value, name, default)

# Resolve the JumpStart-recommended deployment configuration.
specs = JumpStartModelsAccessor().get_model_specs(
    region=REGION,
    model_id=MODEL_ID,
    version=MODEL_VERSION,
)

if isinstance(specs, list):
    if not specs:
        raise ValueError(
            f"No JumpStart specification found for {MODEL_ID}"
        )
    specs = specs[0]

recommended_instance_type = get_field(
    specs,
    "default_inference_instance_type",
)

if not recommended_instance_type:
    raise ValueError(
        f"No recommended instance type found for {MODEL_ID}"
    )

print(f"Model: {MODEL_ID}")
print(f"Region: {REGION}")
print(f"Recommended instance: {recommended_instance_type}")

start = time.time()

jumpstart_config = JumpStartConfig(
    model_id=MODEL_ID,
    model_version=MODEL_VERSION,
    accept_eula=ACCEPT_EULA,
)

model_builder = ModelBuilder.from_jumpstart_config(
    jumpstart_config=jumpstart_config,
    compute=Compute(
        instance_type=recommended_instance_type,
        instance_count=1,
    ),
)

model = model_builder.build()
endpoint = model_builder.deploy()
deploy_time = time.time() - start

print(f"Deployed in {deploy_time:.1f} seconds")
print(f"Endpoint: {endpoint.endpoint_name}")

Étape 2 : Exécuter les prompts d’exemple et mesurer les performances

from sagemaker.core.payloads import retrieve_all_examples
import json
import time

MODEL_ID = "huggingface-vlm-qwen3-5-27b"
MODEL_VERSION = "1.13.0"
REGION = "us-east-1"

example_payloads = retrieve_all_examples(
    region=REGION,
    model_id=MODEL_ID,
    model_version=MODEL_VERSION,
    serialize=True,
)

#you can re-create the endpoint pointer using the endpoint name:
#from sagemaker.core.resources import Endpoint
#endpoint = Endpoint.get(endpoint_name="<your_endpoint_name>",region=REGION)

def read_response_body(result):
    body = result.body
    if hasattr(body, "read"):
        body = body.read()
    if isinstance(body, bytes):
        body = body.decode("utf-8")
    if isinstance(body, str):
        try:
            return json.loads(body)
        except json.JSONDecodeError:
            return body
    return body

def extract_output(response):
    """Handle common JumpStart text-generation response formats."""
    if isinstance(response, list):
        response = response[0] if response else ""
    if isinstance(response, dict):
        choices = response.get("choices")
        if choices:
            choice = choices[0]
            message = choice.get("message")
            if isinstance(message, dict):
                return message.get("content", "")
            return choice.get("text", "")
        for field in (
            "generated_text",
            "output_text",
            "text",
        ):
            if field in response:
                return response[field]
    return response

results = []

for payload in example_payloads or []:
    start = time.perf_counter()
    result = endpoint.invoke(
        body=payload.body,
        content_type=payload.content_type,
        accept=payload.accept,
    )
    latency = time.perf_counter() - start
    response = read_response_body(result)
    output = extract_output(response)
    if not isinstance(output, str):
        output = json.dumps(output, indent=2)
    # This is an estimate based on whitespace-separated words.
    output_words = len(output.split())
    results.append(
        {
            "request_preview": payload.body[:50],
            "latency_s": round(latency, 2),
            "estimated_output_words": output_words,
            "words_per_second": round(
                output_words / latency,
                1,
            ) if latency > 0 else 0,
        }
    )
    print("Input:\n", payload.body, end="\n\n")
    print("Output:\n", output, end="\n\n")
    print(
        f"Latency: {latency:.2f} seconds\n"
        f"Estimated output words: {output_words}\n"
        f"Estimated single-request output generation rate: "
        f"{output_words / latency:.1f} words/second\n"
    )
    print("-" * 80)

print("\nSummary:")
for result in results:
    print(result)

Résultat:

Input:
{"max_tokens": 256, "messages": [{"content": "What is deep learning?", "role": "user"}], "model": "/opt/ml/model"}
Output:
Here's a thinking process that leads to the explanation of deep learning:
1. **Deconstruct the Request:**
* **Question:** "What is deep learning?"
* **Intent:** The user wants a clear, comprehensive, yet accessible definition and overview of deep learning.
* **Target Audience:** Likely someone looking for a general understanding, possibly a student, tech
enthusiast, or professional exploring the field. The tone should be informative, structured, and
not overly jargon-heavy (though key terms need explanation).
2. **Initial Brainstorming & Key Concepts:**
* What is it? A subset of machine learning, which is a subset of AI.
* Core mechanism: Artificial Neural Networks (ANNs).
* "Deep" means many layers (hidden layers).
* How does it work? Learning representations from data (feature learning).
* Key applications: Image recognition, NLP, speech, self-driving cars.
* Why is it popular now? Big data, GPU power, better algorithms.
* Pros/Cons: High accuracy vs. black box, data hunger.
3. **Structuring the Answer:**
Latency: 9.07 seconds
Estimated output words: 153
Estimated single-request output generation rate: 16.9 words/second
--------------------------------------------------------------------------------
Summary:
{'request_preview': '{"max_tokens": 256, "messages": {"content": "What', 'latency_s': 9.07, 'estimated_output_words': 153, 'words_per_second': 16.9}

Étape 3 : Nettoyage

print(f"Deleting endpoint: {endpoint.endpoint_name}")
endpoint.delete()
endpoint.wait_for_delete()
print("Endpoint deleted")

Conclusion

Ce modèle fonctionne pour de nombreux modèles SageMaker JumpStart disponibles, mais le format de contenu, le type d’instance requis, le EULA et la parsing de la réponse peuvent nécessiter des ajustements spécifiques au modèle. En utilisant des prompts de test cohérents et en mesurant la latence, le débit et la qualité de l’output entre tous les modèles, vous pouvez comparer les options et choisir celui qui convient le mieux à votre charge de travail.

Essayez cette approche avec différents modèles de Amazon SageMaker JumpStart pour trouver le bon équilibre entre qualité, vitesse et coût pour vos applications.

Références


Sur les auteurs

Source originale

AWS Machine Learning

À propos du contenu

La publication originale et les droits appartiennent à la source.

Traduction automatique · Consultez l’original