View a markdown version of this page

Compare los puntos finales de inferencia de IA generativa - Amazon SageMaker AI

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Compare los puntos finales de inferencia de IA generativa

El servicio de evaluación comparativa de la SageMaker IA mide el rendimiento de los modelos de lenguaje de gran tamaño (LLM) alojados en puntos finales de IA. SageMaker Realiza pruebas comparativas con NVIDIA AiPerf y produce métricas como la latencia de las solicitudes, el rendimiento, el tiempo transcurrido hasta el primer token y la latencia entre los mismos.

Requisitos previos

Antes de crear un trabajo de referencia, necesitas lo siguiente:

  • Un terminal de SageMaker IA en InService estado que aloja un LLM compatible con la API de finalización de OpenAI-compatible chats

  • Un bucket de Amazon S3 para una producción de referencia

  • Una función de ejecución de IAM que otorga a la SageMaker IA acceso a su punto final y al depósito de salida

Paso 1: Cree un trabajo de referencia

Un trabajo de referencia se dirige a un punto final de SageMaker IA específico y hace referencia a una configuración de carga de trabajo.

Python (boto3)

response = client.create_ai_benchmark_job( AIBenchmarkJobName="my-benchmark-job", BenchmarkTarget={ "Endpoint": { "Identifier": "my-sagemaker-endpoint" } }, OutputConfig={ "S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/benchmark-results/" }, AIWorkloadConfigIdentifier="my-benchmark-config", RoleArn="arn:aws:iam::111122223333:role/ExampleRole", ) print(response["AIBenchmarkJobArn"])

AWS CLI

aws sagemaker create-ai-benchmark-job \ --ai-benchmark-job-name "my-benchmark-job" \ --benchmark-target '{"Endpoint": {"Identifier": "my-sagemaker-endpoint"}}' \ --output-config '{"S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/benchmark-results/"}' \ --ai-workload-config-identifier "my-benchmark-config" \ --role-arn "arn:aws:iam::111122223333:role/ExampleRole" \ --region us-west-2

Si su punto final aloja varios modelos a través de componentes de inferencia, puede especificarlos en el InferenceComponents parámetro de. BenchmarkTarget

Si su dispositivo de punto final está en una VPC, transfiera el NetworkConfig parámetro con su VpcConfig configuración, incluidos los ID de los grupos de seguridad y las subredes.

Compare los componentes de inferencia

Si su terminal utiliza componentes de inferencia en lugar de implementar un modelo directamente, debe especificar los componentes de inferencia que desea comparar en el. BenchmarkTarget Cuando se especifican los componentes de inferencia, el servicio de evaluación comparativa dirige las solicitudes a esos componentes específicos en lugar de al modelo predeterminado del punto final.

Pase uno o más nombres de componentes de inferencia o ARN de la lista: InferenceComponents

Python (boto3)

response = client.create_ai_benchmark_job( AIBenchmarkJobName="my-ic-benchmark", BenchmarkTarget={ "Endpoint": { "Identifier": "my-multi-model-endpoint", "InferenceComponents": [ {"Identifier": "my-inference-component-llama"} ] } }, OutputConfig={ "S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/benchmark-results/" }, AIWorkloadConfigIdentifier="my-benchmark-config", RoleArn="arn:aws:iam::111122223333:role/ExampleRole", )

AWS CLI

aws sagemaker create-ai-benchmark-job \ --ai-benchmark-job-name "my-ic-benchmark" \ --benchmark-target '{ "Endpoint": { "Identifier": "my-multi-model-endpoint", "InferenceComponents": [ {"Identifier": "my-inference-component-llama"} ] } }' \ --output-config '{"S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/benchmark-results/"}' \ --ai-workload-config-identifier "my-benchmark-config" \ --role-arn "arn:aws:iam::111122223333:role/ExampleRole" \ --region us-west-2
nota

Si el punto final está configurado para los componentes de inferencia, pero no se especifica InferenceComponents en el objetivo de referencia, el trabajo no se realizará correctamente y aparecerá un error que indica que no se ha implementado ningún modelo directamente en el punto final. Incluya siempre el InferenceComponents parámetro cuando realice una evaluación comparativa de los puntos finales basados en componentes de inferencia.

Compare los puntos finales de varios LORA

Para comparar un punto final que sirve a varios adaptadores LoRa, especifique cada adaptador como componente de inferencia en el. BenchmarkTarget Si lo desea, puede utilizar el parámetro de model_selection_strategy carga de trabajo para controlar la forma en que el punto de referencia distribuye las solicitudes entre los adaptadores. Si no especifica una estrategia, la opción predeterminada esround_robin.

En primer lugar, cree una configuración de carga de trabajo. El siguiente ejemplo incluye el model_selection_strategy parámetro opcional:

# Create a workload config for multi-LoRA benchmarking workload_spec = { "benchmark": {"type": "aiperf"}, "parameters": { "prompt_input_tokens_mean": 550, "output_tokens_mean": 150, "concurrency": 10, "streaming": True, "tokenizer": "meta-llama/Llama-3.2-1B", "model_selection_strategy": "round_robin" }, "secrets": { "hf_token": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-hf-token-AbCdEf" }, "tooling": {"api_standard": "openai"} } import json client.create_ai_workload_config( AIWorkloadConfigName="multi-lora-config", WorkloadSpec={"Inline": json.dumps(workload_spec)} )

A continuación, cree un trabajo de referencia que se dirija a todos los componentes de inferencia del adaptador LoRa:

response = client.create_ai_benchmark_job( AIBenchmarkJobName="multi-lora-benchmark", BenchmarkTarget={ "Endpoint": { "Identifier": "my-lora-endpoint", "InferenceComponents": [ {"Identifier": "lora-adapter-customer-support"}, {"Identifier": "lora-adapter-code-generation"}, {"Identifier": "lora-adapter-summarization"} ] } }, OutputConfig={ "S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/multi-lora-results/" }, AIWorkloadConfigIdentifier="multi-lora-config", RoleArn="arn:aws:iam::111122223333:role/ExampleRole", )

El model_selection_strategy parámetro es opcional y determina cómo la herramienta de referencia distribuye las solicitudes entre los componentes de inferencia especificados. Los valores válidos son los siguientes:

  • round_robin(predeterminado): cada adaptador recibe las solicitudes en orden. La enésima solicitud se envía al adaptador (sin número de modelos).

  • random— cada solicitud se asigna a un adaptador de manera uniforme y aleatoria.

Si no lo especificamodel_selection_strategy, el punto de referencia lo utiliza de forma round_robin predeterminada.

Compare puntos finales multimodales con imágenes sintéticas

Puede comparar modelos de lenguaje visual mediante la generación de imágenes sintéticas como parte de la configuración de la carga de trabajo. El servicio de evaluación comparativa utiliza AIPerf para crear imágenes con dimensiones y formatos configurables y, a continuación, las envía como cargas útiles codificadas en base64 a su terminal.

El siguiente ejemplo crea una configuración de carga de trabajo para realizar una evaluación comparativa de un modelo de lenguaje visual con imágenes sintéticas:

import json workload_spec = { "benchmark": {"type": "aiperf"}, "parameters": { "image_width_mean": 640, "image_height_mean": 480, "prompt_input_tokens_mean": 100, "output_tokens_mean": 150, "concurrency": 8, "request_count": 100, "streaming": True, "tokenizer": "meta-llama/Llama-3.2-1B" }, "secrets": { "hf_token": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-hf-token-AbCdEf" } } client.create_ai_workload_config( AIWorkloadConfigName="image-benchmark-config", WorkloadSpec={"Inline": json.dumps(workload_spec)} )

Los siguientes parámetros controlan la generación de imágenes sintéticas:

Parámetro Tipo Predeterminado Description (Descripción)
image_width_mean float Ninguno Ancho medio de la imagen en píxeles.
image_width_stddev float Ninguno Desviación estándar del ancho de la imagen. Se configura para variar las dimensiones de la imagen en función de las solicitudes.
image_height_mean float Ninguno Altura media de la imagen en píxeles.
image_height_stddev float Ninguno Desviación estándar de la altura de la imagen.
image_batch_size int 1 Número de imágenes por solicitud.
image_format cadena png Formato de imagen. Valores válidos: png (sin pérdidas), jpeg (archivos más pequeños y con pérdidas), random (selecciona al azar PNG o JPEG por imagen).

Variable-size imágenes

Utilice parámetros de desviación estándar para generar imágenes con dimensiones variables, simulando cargas de trabajo del mundo real en las que los tamaños de las imágenes varían:

workload_spec = { "benchmark": {"type": "aiperf"}, "parameters": { "image_width_mean": 800, "image_width_stddev": 200, "image_height_mean": 600, "image_height_stddev": 150, "image_batch_size": 2, "concurrency": 4, "request_count": 50, "streaming": True, "tokenizer": "meta-llama/Llama-3.2-1B" } }

Compare puntos finales multimodales con vídeo sintético

Puede comparar modelos multimodales que procesan entradas de vídeo mediante la generación de vídeos sintéticos como parte de la configuración de la carga de trabajo. El servicio de evaluación comparativa utiliza la generación de vídeo sintético de AIPerf para crear vídeos con una resolución, velocidad de fotogramas, duración y codificación configurables, y luego los envía como cargas útiles codificadas en base64 a su terminal.

nota

La generación de vídeo está desactivada de forma predeterminada. Debe especificar ambas opciones video_height en video_width la configuración de la carga de trabajo para habilitarla.

El siguiente ejemplo crea una configuración de carga de trabajo para realizar una evaluación comparativa de un modelo multimodal con vídeo sintético con una resolución de 640 x 480:

import json workload_spec = { "benchmark": {"type": "aiperf"}, "parameters": { "video_width": 640, "video_height": 480, "video_fps": 4, "video_duration": 5.0, "output_tokens_mean": 150, "concurrency": 4, "request_count": 50, "streaming": True, "tokenizer": "meta-llama/Llama-3.2-1B" }, "secrets": { "hf_token": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-hf-token-AbCdEf" } } client.create_ai_workload_config( AIWorkloadConfigName="video-benchmark-config", WorkloadSpec={"Inline": json.dumps(workload_spec)} )

Parámetros de vídeo

Los siguientes parámetros controlan la generación de vídeo sintético:

Parámetro Tipo Predeterminado Description (Descripción)
video_width int Ninguno Ancho del fotograma en píxeles. Debe configurarse con video_height para permitir la generación de vídeo.
video_height int Ninguno Altura del fotograma en píxeles. Debe configurarse con video_width para permitir la generación de vídeo.
video_fps int 4 Fotogramas por segundo.
video_duration float 5.0 Duración del clip en segundos.
video_batch_size int 1 Número de vídeos por solicitud.
video_synth_type cadena moving_shapes Patrón de síntesis. Valores válidos: moving_shapes (formas geométricas animadas), grid_clock (cuadrícula con animación de reloj), noise (ruido de píxeles aleatorio).
video_format cadena webm Formato contenedor. Valor válido: webm.
video_codec cadena libvpx-vp9 Códec de vídeo. Valor admitido: libvpx-vp9 (VP9, WebM).
nota

El servicio de evaluación comparativa solo admite la codificación VP9 con formato WebM.

Pistas de audio integradas

Para los modelos que procesan vídeo y audio juntos, puede incrustar una pista de audio sintética en los vídeos generados. El audio está desactivado de forma predeterminada. video_audio_num_channelsAjústelo en 1 (mono) o 2 (estéreo) para activarlo.

Parámetro Tipo Predeterminado Description (Descripción)
video_audio_num_channels int 0 0 = desactivado, 1 = mono, 2 = estéreo.
video_audio_sample_rate int 44100 Frecuencia de muestreo en Hz (8000—96000).
video_audio_codec cadena auto Códec de audio. Auto-selects libvorbispara WebM y MP4aac. Puede anular conaac,libvorbis, o. libopus
video_audio_depth int 16 Profundidad de bits por muestra (8, 16, 24 o 32).

Ejemplos de análisis comparativos de vídeo

Low-resolution comprensión del vídeo

workload_spec = { "benchmark": {"type": "aiperf"}, "parameters": { "video_width": 320, "video_height": 240, "video_fps": 2, "video_duration": 3.0, "video_synth_type": "moving_shapes", "concurrency": 4, "request_count": 50, "streaming": True, "tokenizer": "meta-llama/Llama-3.2-1B" } }

Análisis comparativo de vídeo HD

workload_spec = { "benchmark": {"type": "aiperf"}, "parameters": { "video_width": 1920, "video_height": 1080, "video_fps": 8, "video_duration": 10.0, "concurrency": 2, "request_count": 20, "streaming": True, "tokenizer": "meta-llama/Llama-3.2-1B" } }

Vídeo con audio para modelos multimodales

workload_spec = { "benchmark": {"type": "aiperf"}, "parameters": { "video_width": 640, "video_height": 480, "video_fps": 4, "video_duration": 5.0, "video_audio_num_channels": 1, "video_audio_sample_rate": 16000, "concurrency": 4, "request_count": 50, "streaming": True, "tokenizer": "meta-llama/Llama-3.2-1B" } }

Texto y vídeo mixtos

Combine el vídeo con instrucciones de texto para cargas de trabajo de vídeo con preguntas, respuestas o subtítulos:

workload_spec = { "benchmark": {"type": "aiperf"}, "parameters": { "video_width": 640, "video_height": 480, "video_fps": 4, "video_duration": 5.0, "prompt_input_tokens_mean": 100, "output_tokens_mean": 50, "concurrency": 8, "request_count": 100, "streaming": True, "tokenizer": "meta-llama/Llama-3.2-1B" } }

Consideraciones sobre el rendimiento

  • Una resolución y una velocidad de fotogramas más altas aumentan el tiempo de codificación del vídeo y el tamaño de la carga útil. Para realizar pruebas de alto rendimiento, utilice resoluciones más bajas (320 × 240 o 640 × 480).

  • El VP9 (libvpx-vp9) con formato WebM es el único códec compatible y proporciona una buena compresión para la evaluación comparativa de las cargas útiles.

  • El audio añade una sobrecarga mínima en comparación con la transmisión de vídeo. Utilice mono (1) a 16 kHz para cargas de trabajo centradas en la voz.

Paso 2: Supervise el estado del trabajo

Sondea el estado del trabajo hasta que alcance un estado terminal.

Python (boto3)

import time while True: response = client.describe_ai_benchmark_job( AIBenchmarkJobName="my-benchmark-job" ) status = response["AIBenchmarkJobStatus"] print(f"Status: {status}") if status in ("Completed", "Failed", "Stopped"): break time.sleep(30) if status == "Completed": print(f"Results at: {response['OutputConfig']['S3OutputLocation']}") elif status == "Failed": print(f"Job failed: {response.get('FailureReason', 'unknown')}")

AWS CLI

aws sagemaker describe-ai-benchmark-job \ --ai-benchmark-job-name "my-benchmark-job" \ --region us-west-2

Paso 3: Revise los resultados del punto de referencia

Los resultados de las pruebas comparativas se escriben en la ubicación de salida de Amazon S3 que especificó. Los resultados incluyen las siguientes métricas clave:

request_throughput

Solicitudes por segundo.

request_latency

End-to-end latencia de solicitudes con desgloses de percentiles (P50, P90, P99).

time_to_first_token

Tiempo transcurrido desde el envío de la solicitud hasta el primer token recibido.

inter_token_latency

Tiempo transcurrido entre los tokens de salida consecutivos.

output_token_throughput

Tokens de salida generados por segundo.

Cada métrica incluye resúmenes estadísticos: promedio, mínimo, máximo, P50, P90, P99 y desviación estándar.

Gestione los recursos de referencia

Utilice las siguientes operaciones para gestionar sus trabajos de referencia y las configuraciones de carga de trabajo.

# List benchmark jobs response = client.list_ai_benchmark_jobs(MaxResults=10) for job in response["AIBenchmarkJobs"]: print(f"{job['AIBenchmarkJobName']} - {job['AIBenchmarkJobStatus']}") # Stop a running job client.stop_ai_benchmark_job( AIBenchmarkJobName="my-benchmark-job" ) # Delete a job (must be in a terminal state) client.delete_ai_benchmark_job( AIBenchmarkJobName="my-benchmark-job" ) # List workload configurations response = client.list_ai_workload_configs(MaxResults=10) for config in response["AIWorkloadConfigs"]: print(f"{config['AIWorkloadConfigName']} - {config['AIWorkloadConfigArn']}") # Delete a workload configuration client.delete_ai_workload_config( AIWorkloadConfigName="my-benchmark-config" )