View a markdown version of this page

Benchmark-Endpunkte generativer KI-Inferenz - Amazon SageMaker KI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Benchmark-Endpunkte generativer KI-Inferenz

Der SageMaker KI-Benchmarking-Service misst die Leistung von großen Sprachmodellen (LLMs), die auf KI-Endpunkten gehostet werden. SageMaker Er führt Benchmarks mithilfe von NVIDIA AIPerf durch und erstellt Metriken wie Anforderungslatenz, Durchsatz, Zeit bis zum ersten Token und Latenz zwischen Tokens.

Voraussetzungen

Bevor Sie einen Benchmark-Job erstellen, benötigen Sie Folgendes:

  • Ein SageMaker KI-Endpunkt im InService Status, der ein LLM hostet, das die OpenAI-compatible Chat-Completion-API unterstützt

  • Ein Amazon S3 S3-Bucket für die Benchmark-Ausgabe

  • Eine IAM-Ausführungsrolle, die SageMaker KI Zugriff auf Ihren Endpunkt und Ihren Ausgabe-Bucket gewährt

Schritt 1: Erstellen Sie einen Benchmark-Job

Ein Benchmark-Job zielt auf einen bestimmten SageMaker KI-Endpunkt ab und verweist auf eine Workload-Konfiguration.

Python (Teil 3)

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

Wenn Ihr Endpunkt mehrere Modelle mithilfe von Inferenzkomponenten hostet, können Sie diese im InferenceComponents Parameter von angeben. BenchmarkTarget

Wenn sich Ihr Endpunkt in einer VPC befindet, übergeben Sie den NetworkConfig Parameter mit Ihren VpcConfig Einstellungen, einschließlich Sicherheitsgruppen-IDs und Subnetzen.

Benchmark-Inferenzkomponenten

Wenn Ihr Endpunkt Inferenzkomponenten verwendet, anstatt ein Modell direkt bereitzustellen, müssen Sie die zu vergleichenden Inferenzkomponenten in der angeben. BenchmarkTarget Wenn Inferenzkomponenten angegeben sind, leitet der Benchmarking-Service Anfragen an diese spezifischen Komponenten weiter und nicht an das Standardmodell des Endpunkts.

Übergeben Sie einen oder mehrere Namen oder ARNs der Inferenzkomponenten in der Liste: InferenceComponents

Python (Teil 3)

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
Anmerkung

Wenn Ihr Endpunkt für Inferenzkomponenten konfiguriert ist, Sie dies jedoch nicht InferenceComponents im Benchmark-Ziel angeben, schlägt der Job fehl und es wird ein Fehler angezeigt, der darauf hinweist, dass kein Modell direkt auf dem Endpunkt bereitgestellt wird. Beziehen Sie den InferenceComponents Parameter immer mit ein, wenn Sie Endpunkte vergleichen, die auf Inferenzkomponenten basieren.

Vergleichen Sie mehrere LORA-Endpunkte

Um einen Endpunkt zu vergleichen, der mehrere LoRa-Adapter bedient, geben Sie jeden Adapter als Inferenzkomponente in der an. BenchmarkTarget Sie können optional den model_selection_strategy Workload-Parameter verwenden, um zu steuern, wie der Benchmark Anfragen auf die Adapter verteilt. Wenn Sie keine Strategie angeben, ist round_robin die Standardeinstellung.

Erstellen Sie zunächst eine Workload-Konfiguration. Das folgende Beispiel enthält den optionalen model_selection_strategy Parameter:

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

Erstellen Sie dann einen Benchmark-Job, der auf alle LoRa-Adapter-Inferenzkomponenten abzielt:

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

Der model_selection_strategy Parameter ist optional und bestimmt, wie das Benchmark-Tool Anfragen auf die angegebenen Inferenzkomponenten verteilt. Folgende sind gültige Werte:

  • round_robin(Standard) — jeder Adapter empfängt Anfragen der Reihe nach. Die n-te Anfrage wird an den Adapter (im Modus Anzahl der Modelle) gesendet.

  • random— Jede Anfrage wird einem Adapter einheitlich nach dem Zufallsprinzip zugewiesen.

Wenn Sie nichts angebenmodel_selection_strategy, verwendet der Benchmark round_robin standardmäßig.

Vergleichen Sie multimodale Endpunkte mit synthetischen Bildern

Sie können Modelle mit Bildverarbeitungssprache vergleichen, indem Sie im Rahmen der Workload-Konfiguration synthetische Bilder generieren. Der Benchmarking-Dienst verwendet AiPerf, um Bilder mit konfigurierbaren Abmessungen und Formaten zu erstellen, und sendet sie dann als Base64-kodierte Payloads an Ihren Endpunkt.

Im folgenden Beispiel wird eine Workload-Konfiguration für das Benchmarking eines Vision-Language-Modells mit synthetischen Bildern erstellt:

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

Die folgenden Parameter steuern die Erzeugung synthetischer Bilder:

Parameter Typ Standard Description
image_width_mean float Keine Mittlere Bildbreite in Pixeln.
image_width_stddev float Keine Standardabweichung der Bildbreite. Legt fest, dass die Bildabmessungen je nach Anfrage variieren.
image_height_mean float Keine Durchschnittliche Bildhöhe in Pixeln.
image_height_stddev float Keine Standardabweichung der Bildhöhe.
image_batch_size int 1 Anzahl der Bilder pro Anfrage.
image_format Zeichenfolge PNG Image-Format. Gültige Werte: png (verlustfrei), jpeg (verlustbehaftete, kleinere Dateien), random (wählt zufällig PNG oder JPEG pro Bild aus).

Variable-size Bilder

Verwenden Sie Parameter für Standardabweichungen, um Bilder mit unterschiedlichen Abmessungen zu erzeugen und reale Workloads zu simulieren, bei denen sich die Bildgrößen unterscheiden:

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

Vergleichen Sie multimodale Endpunkte mit synthetischem Video

Sie können multimodale Modelle vergleichen, die Videoeingaben verarbeiten, indem Sie im Rahmen der Workload-Konfiguration synthetische Videos generieren. Der Benchmarking-Dienst verwendet die synthetische Videogenerierung von AiPerf, um Videos mit konfigurierbarer Auflösung, Bildrate, Dauer und Kodierung zu erstellen und sendet sie dann als Base64-kodierte Payloads an Ihren Endpunkt.

Anmerkung

Die Videogenerierung ist standardmäßig deaktiviert. Sie müssen video_width sowohl als auch video_height in Ihrer Workload-Konfiguration angeben, um sie zu aktivieren.

Im folgenden Beispiel wird eine Workload-Konfiguration für das Benchmarking eines multimodalen Modells mit synthetischem Video bei einer Auflösung von 640×480 erstellt:

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

Videoparameter

Die folgenden Parameter steuern die synthetische Videogenerierung:

Parameter Typ Standard Description
video_width int Keine Rahmenbreite in Pixeln. Muss auf eingestellt seinvideo_height, um die Videogenerierung zu aktivieren.
video_height int Keine Rahmenhöhe in Pixeln. Muss auf eingestellt seinvideo_width, um die Videogenerierung zu aktivieren.
video_fps int 4 Bilder pro Sekunde.
video_duration float 5.0 Clip-Dauer in Sekunden.
video_batch_size int 1 Anzahl der Videos pro Anfrage.
video_synth_type Zeichenfolge moving_shapes Synthesemuster. Gültige Werte: moving_shapes (animierte geometrische Formen), grid_clock (Raster mit Uhranimation), noise (zufälliges Pixelrauschen).
video_format Zeichenfolge webm Containerformat. Zulässiger Wert: webm.
video_codec Zeichenfolge libvpx-vp9 Videocodec. Unterstützter Wert: libvpx-vp9 (VP9, WebM).
Anmerkung

Der Benchmarking-Dienst unterstützt die VP9-Codierung nur im WebM-Format.

Eingebettete Audiotracks

Bei Modellen, die Video und Audio zusammen verarbeiten, können Sie eine synthetische Audiospur in die generierten Videos einbetten. Audio ist standardmäßig deaktiviert. Stellen Sie video_audio_num_channels es auf 1 (mono) oder 2 (Stereo) ein, um es zu aktivieren.

Parameter Typ Standard Description
video_audio_num_channels int 0 0 = deaktiviert, 1 = mono, 2 = Stereo.
video_audio_sample_rate int 44100 Abtastrate in Hz (8000—96000).
video_audio_codec Zeichenfolge auto Audiocodec. Auto-selects libvorbisfür WebM und aac für MP4. Sie können es mit aaclibvorbis, oder libopus überschreiben.
video_audio_depth int 16 Bittiefe pro Sample (8, 16, 24 oder 32).

Beispiele für Video-Benchmarking

Low-resolution Verständnis von Videos

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

Benchmarking von HD-Videos

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 mit Audio für multimodale Modelle

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

Gemischter Text und Video

Kombinieren Sie Video mit Textansagen für Workloads zur Beantwortung von Videofragen oder zur Untertitelung:

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

Leistungsaspekte

  • Höhere Auflösungen und Bildraten erhöhen die Zeit für die Videokodierung und erhöhen die Größe der Nutzlast. Verwenden Sie für Tests mit hohem Durchsatz niedrigere Auflösungen (320×240 oder 640×480).

  • VP9 (libvpx-vp9) mit WebM-Format ist der einzige unterstützte Codec und bietet eine gute Komprimierung für Benchmark-Payloads.

  • Audio verursacht im Vergleich zum Videostream nur minimalen Overhead. Verwenden Sie mono (1) bei 16 kHz für sprachorientierte Workloads.

Schritt 2: Überwachen Sie den Auftragsstatus

Fragen Sie den Auftragsstatus ab, bis er einen Terminalstatus erreicht.

Python (Teil 3)

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

Schritt 3: Überprüfen Sie die Benchmark-Ergebnisse

Benchmark-Ergebnisse werden an den von Ihnen angegebenen Amazon S3 S3-Ausgabespeicherort geschrieben. Die Ergebnisse beinhalten die folgenden wichtigen Kennzahlen:

request_throughput

Anfragen pro Sekunde.

request_latency

End-to-end Anforderungslatenz mit Perzentilunterbrechungen (P50, P90, P99).

time_to_first_token

Zeit von der Einreichung der Anfrage bis zum ersten empfangenen Token.

inter_token_latency

Zeit zwischen aufeinanderfolgenden Ausgabetokens.

output_token_throughput

Pro Sekunde generierte Ausgabetokens.

Jede Metrik enthält statistische Zusammenfassungen: Durchschnitt, Minimum, Maximum, P50, P90, P99 und Standardabweichung.

Benchmark-Ressourcen verwalten

Verwenden Sie die folgenden Operationen, um Ihre Benchmark-Jobs und Workload-Konfigurationen zu verwalten.

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