AWS Machine LearningActualizado el

Desplegar y evaluar modelos con Amazon SageMaker JumpStart

Aprenda cómo desplegar un modelo disponible desde Amazon SageMaker JumpStart, ejecute una prueba de rendimiento ligera y repetible utilizando el SDK Python de SageMaker, y elimine el punto final cuando la prueba esté…

SageMaker Studio JumpStart Models page showing the model catalog with spotlight and text generation models and filters
Fuente de la imagen · AWS Machine Learning

Elegir el modelo adecuado para una aplicación específica requiere un método práctico para probarlo con entradas representativas. Amazon SageMaker JumpStart proporciona acceso a un amplio catálogo de modelos ya preentrenados. En este artículo, mostramos cómo desplegar un modelo disponible desde SageMaker JumpStart, ejecutar una prueba de rendimiento ligera y repetible utilizando el SDK Python de SageMaker, y eliminar el punto de acceso cuando la prueba esté completa. Para los modelos soportados y la capacidad disponible, este flujo de trabajo proporciona un camino de evaluación repetible, aunque el tiempo de despliegue varía según el modelo, el tipo de instancia, la cuota y la región de AWS.

En 2026, SageMaker JumpStart introdujo dos mejoras que simplifican el descubrimiento y la implementación de modelos. En la sección Model Hub de la consola Amazon SageMaker AI, se puede navegar por el catálogo de SageMaker JumpStart, ver ejemplos de notebooks y abrirlos directamente en SageMaker Studio. Las opciones de despliegue de endpoint preconfiguradas proporcionan configuraciones nombradas optimizadas para prioridades como bajo costo, baja latencia o cargas de trabajo de uso general en una gama de modelos de inteligencia artificial generativa, incluyendo configuraciones optimizadas por Neuron. Además, ahora se puede pasar de la descubrimiento de modelos de Hugging Face al despliegue de AI de SageMaker con un solo clic, mediante la nueva integración de deep link.

Descripción general de la solución

Nuestro enfoque utiliza un script de Python reutilizable que realiza tres pasos:

  • Descubre y despliega un modelo desde SageMaker JumpStart.
  • Ejecute los prompts de muestra específicos del modelo y mida la latencia, la longitud aproximada de la salida y la tasa de generación de una solicitud única.
  • Limpiar el punto final.

Este patrón funciona para muchos modelos SageMaker JumpStart compatibles, aunque los formatos de carga, los tipos de instancias requeridos, los requisitos del acuerdo de licencia para el usuario final (EULA) y los esquemas de respuesta pueden requerir ajustes específicos para cada modelo.

Requisitos previos

  • Un cuenta de AWS con permisos para SageMaker AI.
  • Python 3+ con SageMaker Python SDK v3 instalado (pip install "sagemaker>=3,<4").
  • Cantidad suficiente de instancias GPU para el modelo que desea probar o solicitar un aumento de cuota.

Paso 1.a: Descubrir los modelos disponibles

Ruta de la interfaz de usuario para encontrar modelos en SageMaker JumpStart:

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

Figura 1: Navegación por el catálogo de modelos en la página SageMaker JumpStart Models en SageMaker Studio

Ruta de código que utiliza el SDK de 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})"
    )

O busque por nombre del modelo:

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}")

Paso 1.b: Implementar el modelo

Ruta de UI para desplegar modelos desde SageMaker JumpStart:

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

Figura 2: Desplegar un modelo desde la página de detalles de SageMaker JumpStart en SageMaker Studio

Ruta de código que utiliza el SDK de 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}")

Paso 2: Ejecuta los prompts de muestra y mide el rendimiento

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)

Resultado:

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}

Paso 3: Limpieza

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

Conclusión

Este patrón funciona para muchos modelos disponibles de SageMaker JumpStart, pero el formato de carga útil, el tipo de instancia requerido, el EULA y el análisis de la respuesta pueden requerir ajustes específicos para cada modelo. Al utilizar prompts de prueba consistentes y medir la latencia, el rendimiento y la calidad del resultado entre los modelos, puede comparar las opciones y seleccionar el que se adapte mejor a su carga de trabajo.

Pruebe este enfoque con diferentes modelos de Amazon SageMaker JumpStart para encontrar el equilibrio adecuado entre calidad, velocidad y costo para sus aplicaciones.

Referencias


Acerca de los autores

Fuente original

AWS Machine Learning

Notas sobre el contenido

La publicación original y los derechos pertenecen a la fuente.

Traducción automática · Consulte el original