View a markdown version of this page

Endpoint di inferenza AI generativa di benchmark - Amazon SageMaker AI

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Endpoint di inferenza AI generativa di benchmark

Il servizio di benchmarking SageMaker basato sull'intelligenza artificiale misura le prestazioni dei modelli linguistici di grandi dimensioni (LLM) ospitati su endpoint di intelligenza artificiale. SageMaker Esegue benchmark utilizzando NVIDIA AiPerf, producendo metriche come latenza delle richieste, throughput, time to first token e latenza tra token.

Prerequisiti

Prima di creare un job di benchmark, è necessario quanto segue:

  • Un endpoint SageMaker AI in InService status che ospita un LLM che supporta l'API di completamento della chat OpenAI-compatible

  • Un bucket Amazon S3 per risultati di benchmark

  • Un ruolo di esecuzione IAM che garantisce all' SageMaker IA l'accesso all'endpoint e al bucket di output

Fase 1: Creare un lavoro di riferimento

Un lavoro di benchmark si rivolge a un endpoint di SageMaker intelligenza artificiale specifico e fa riferimento a una configurazione del carico di lavoro.

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

Se il tuo endpoint ospita più modelli tramite componenti di inferenza, puoi specificarli nel parametro di. InferenceComponents BenchmarkTarget

Se il tuo endpoint si trova in un VPC, passa NetworkConfig il parametro con le VpcConfig tue impostazioni, inclusi gli ID dei gruppi di sicurezza e le sottoreti.

Componenti di inferenza di benchmark

Se l'endpoint utilizza componenti di inferenza anziché distribuire direttamente un modello, è necessario specificare i componenti di inferenza da confrontare in. BenchmarkTarget Quando vengono specificati i componenti di inferenza, il servizio di benchmarking indirizza le richieste a tali componenti specifici anziché al modello predefinito dell'endpoint.

Passa uno o più nomi di componenti di inferenza o ARN nell'elenco: 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

Se l'endpoint è configurato per i componenti di inferenza ma non lo specifichi InferenceComponents nel benchmark target, il processo ha esito negativo e viene visualizzato un errore che indica che nessun modello è distribuito direttamente sull'endpoint. Includi sempre il InferenceComponents parametro quando esegui il benchmarking degli endpoint basati su componenti di inferenza.

Esegui il benchmark degli endpoint multi-LORA

Per eseguire il benchmark di un endpoint che serve più adattatori LoRa, specifica ogni adattatore come componente di inferenza in. BenchmarkTarget Facoltativamente, puoi utilizzare il parametro model_selection_strategy workload per controllare il modo in cui il benchmark distribuisce le richieste tra gli adattatori. Se non specifichi una strategia, l'impostazione predefinita è. round_robin

Innanzitutto, crea una configurazione del carico di lavoro. L'esempio seguente include il model_selection_strategy parametro opzionale:

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

Quindi, crea un processo di benchmark destinato a tutti i componenti di inferenza dell'adattatore 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", )

Il model_selection_strategy parametro è facoltativo e determina in che modo lo strumento di benchmark distribuisce le richieste tra i componenti di inferenza specificati. I valori validi sono:

  • round_robin(impostazione predefinita): ogni adattatore riceve le richieste in ordine. L'ennesima richiesta viene inviata all'adattatore (in modalità numero di modelli).

  • random— ogni richiesta viene assegnata a un adattatore in modo uniforme e casuale.

Se non lo specifichimodel_selection_strategy, il benchmark utilizza come impostazione round_robin predefinita.

Effettua il benchmark degli endpoint multimodali con immagini sintetiche

Puoi confrontare i modelli del linguaggio di visione generando immagini sintetiche come parte della configurazione del carico di lavoro. Il servizio di benchmarking utilizza AiPerf per creare immagini con dimensioni e formati configurabili, quindi le invia come payload con codifica base64 all'endpoint.

L'esempio seguente crea una configurazione del carico di lavoro per il benchmarking di un modello di linguaggio di visione con immagini sintetiche:

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

I seguenti parametri controllano la generazione di immagini sintetiche:

Parametro Tipo Predefinita Description
image_width_mean virgola mobile Nessuno Larghezza media dell'immagine in pixel.
image_width_stddev virgola mobile Nessuno Deviazione standard della larghezza dell'immagine. Impostato per variare le dimensioni dell'immagine tra le richieste.
image_height_mean virgola mobile Nessuno Altezza media dell'immagine in pixel.
image_height_stddev virgola mobile Nessuno Deviazione standard dell'altezza dell'immagine.
image_batch_size int 1 Numero di immagini per richiesta.
image_format stringa png Formato di immagine Valori validi: png (senza perdita di dati), jpeg (file più piccoli e con perdita di dati), random (seleziona in modo casuale PNG o JPEG per immagine).

Variable-size images

Utilizza i parametri di deviazione standard per generare immagini con dimensioni variabili, simulando carichi di lavoro reali in cui le dimensioni delle immagini differiscono:

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

Effettua il benchmark degli endpoint multimodali con video sintetici

È possibile effettuare benchmark di modelli multimodali che elaborano gli input video generando video sintetici come parte della configurazione del carico di lavoro. Il servizio di benchmarking utilizza la generazione di video sintetici di AiPerf per creare video con risoluzione, frame rate, durata e codifica configurabili, quindi li invia come payload con codifica base64 all'endpoint.

Nota

La generazione di video è disattivata per impostazione predefinita. È necessario specificarli entrambi video_width e attivarli video_height nella configurazione del carico di lavoro.

L'esempio seguente crea una configurazione del carico di lavoro per il benchmarking di un modello multimodale con video sintetico a risoluzione 640×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)} )

Parametri video

I seguenti parametri controllano la generazione di video sintetici:

Parametro Tipo Predefinita Description
video_width int Nessuno Larghezza del fotogramma in pixel. Deve essere impostato con video_height per abilitare la generazione di video.
video_height int Nessuno Altezza della cornice in pixel. Deve essere impostato con video_width per abilitare la generazione di video.
video_fps int 4 Fotogrammi al secondo.
video_duration virgola mobile 5.0 Durata della clip in secondi.
video_batch_size int 1 Numero di video per richiesta.
video_synth_type stringa moving_shapes Schema di sintesi. Valori validi: moving_shapes (forme geometriche animate), grid_clock (griglia con animazione dell'orologio), noise (rumore casuale dei pixel).
video_format stringa webm Formato del contenitore. Valore valido: webm.
video_codec stringa libvpx-vp9 Codec video. Valore supportato: libvpx-vp9 (VP9, WebM).
Nota

Il servizio di benchmarking supporta la codifica VP9 solo con il formato WebM.

Tracce audio integrate

Per i modelli che elaborano video e audio insieme, potete incorporare una traccia audio sintetica nei video generati. L'audio è disabilitato per impostazione predefinita. video_audio_num_channelsImpostare su 1 (mono) o 2 (stereo) per abilitarlo.

Parametro Tipo Predefinita Description
video_audio_num_channels int 0 0 = disabilitato, 1 = mono, 2 = stereo.
video_audio_sample_rate int 44100 Frequenza di campionamento in Hz (8000—96000).
video_audio_codec stringa auto Codec audio. Auto-selects libvorbisper WebM e aac per MP4. È possibile eseguire l'override conaac, olibvorbis. libopus
video_audio_depth int 16 Profondità di bit per campione (8, 16, 24 o 32).

Esempi di benchmarking video

Low-resolution comprensione dei video

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

analisi comparativa di video 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" } }

Video con audio per modelli multimodali

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

Testo e video misti

Combina video con istruzioni di testo per carichi di lavoro relativi alla risposta a domande video o all'inserimento di sottotitoli:

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

Considerazioni sulle prestazioni

  • Una risoluzione e un frame rate più elevati aumentano il tempo di codifica video e le dimensioni del payload. Per test ad alta produttività, utilizzate risoluzioni inferiori (320×240 o 640×480).

  • VP9 (libvpx-vp9) con formato WebM è l'unico codec supportato e offre una buona compressione per il benchmarking dei payload.

  • L'audio aggiunge un sovraccarico minimo rispetto allo streaming video. Usa mono (1) a 16 kHz per carichi di lavoro incentrati sulla voce.

Fase 2: Monitora lo stato del lavoro

Esamina lo stato del lavoro fino a quando non raggiunge lo stato terminale.

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

Fase 3: Rivedi i risultati del benchmark

I risultati del benchmark vengono scritti nella posizione di output di Amazon S3 specificata. I risultati includono le seguenti metriche chiave:

request_throughput

Richieste al secondo.

request_latency

End-to-end latenza delle richieste con suddivisioni percentili (P50, P90, P99).

time_to_first_token

Tempo compreso tra l'invio della richiesta e il primo token ricevuto.

inter_token_latency

Tempo tra token di output consecutivi.

output_token_throughput

Token di output generati al secondo.

Ogni metrica include riepiloghi statistici: media, minima, massima, P50, P90, P99 e deviazione standard.

Gestisci le risorse di benchmark

Utilizza le seguenti operazioni per gestire i job di benchmark e le configurazioni dei carichi di lavoro.

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