

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Benchmark titik akhir inferensi AI generatif
<a name="generative-ai-inference-recommendations-benchmark"></a>

Layanan benchmarking SageMaker AI mengukur kinerja model bahasa besar (LLM) yang dihosting di titik akhir SageMaker AI. Ini menjalankan tolok ukur menggunakan NVIDIA AiPerf, menghasilkan metrik seperti latensi permintaan, throughput, token waktu ke pertama, dan latensi antar-token.

## Prasyarat
<a name="generative-ai-inference-recommendations-benchmark-prereqs"></a>

Sebelum Anda membuat pekerjaan benchmark, Anda memerlukan yang berikut:
+ Titik akhir SageMaker AI dalam `InService` status hosting LLM yang mendukung API penyelesaian OpenAI-compatible obrolan
+ Bucket Amazon S3 untuk output benchmark
+ Peran eksekusi IAM yang memberikan akses SageMaker AI ke endpoint dan bucket keluaran Anda

## Langkah 1: Buat pekerjaan benchmark
<a name="generative-ai-inference-recommendations-benchmark-create"></a>

Pekerjaan benchmark menargetkan titik akhir SageMaker AI tertentu dan mereferensikan konfigurasi beban kerja.

**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
```

Jika titik akhir Anda meng-host beberapa model melalui komponen inferensi, Anda dapat menentukannya dalam `InferenceComponents` parameter. `BenchmarkTarget`

Jika titik akhir Anda ada di VPC, teruskan `NetworkConfig` parameter dengan pengaturan `VpcConfig` Anda, termasuk ID grup keamanan dan subnet.

## Komponen inferensi benchmark
<a name="generative-ai-inference-recommendations-benchmark-inference-components"></a>

Jika titik akhir Anda menggunakan *komponen inferensi* alih-alih menerapkan model secara langsung, Anda harus menentukan komponen inferensi yang akan menjadi benchmark di. `BenchmarkTarget` Ketika komponen inferensi ditentukan, layanan benchmarking merutekan permintaan ke komponen spesifik tersebut daripada model default titik akhir.

Lulus satu atau lebih nama komponen inferensi atau ARN dalam daftar: `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
```

**catatan**  
Jika titik akhir Anda dikonfigurasi untuk komponen inferensi tetapi Anda tidak menentukan `InferenceComponents` dalam target benchmark, pekerjaan gagal dengan kesalahan yang menunjukkan bahwa tidak ada model yang diterapkan langsung di titik akhir. Selalu sertakan `InferenceComponents` parameter saat membandingkan titik akhir berbasis komponen inferensi.

## Benchmark titik akhir Multi-lora
<a name="generative-ai-inference-recommendations-benchmark-multi-lora"></a>

Untuk membandingkan titik akhir yang melayani beberapa adaptor LoRa, tentukan setiap adaptor sebagai komponen inferensi di. `BenchmarkTarget` Anda dapat menggunakan parameter `model_selection_strategy` beban kerja secara opsional untuk mengontrol bagaimana benchmark mendistribusikan permintaan di seluruh adaptor. Jika Anda tidak menentukan strategi, defaultnya adalah`round_robin`.

Pertama, buat konfigurasi beban kerja. Contoh berikut mencakup `model_selection_strategy` parameter opsional:

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

Kemudian, buat pekerjaan benchmark yang menargetkan semua komponen inferensi adaptor 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",
)
```

`model_selection_strategy`Parameternya opsional dan menentukan bagaimana alat benchmark mendistribusikan permintaan di seluruh komponen inferensi yang ditentukan. Nilai yang valid adalah:
+ `round_robin`(default) - setiap adaptor menerima permintaan secara berurutan. Permintaan ke-n dikirim ke adaptor (n mod nomber-of-models).
+ `random`— setiap permintaan ditugaskan ke adaptor secara seragam secara acak.

Jika Anda tidak menentukan`model_selection_strategy`, benchmark menggunakan secara `round_robin` default.

## Benchmark titik akhir multimodal dengan gambar sintetis
<a name="generative-ai-inference-recommendations-benchmark-image"></a>

Anda dapat membandingkan model bahasa penglihatan dengan menghasilkan gambar sintetis sebagai bagian dari konfigurasi beban kerja. Layanan benchmarking menggunakan AiPerf untuk membuat gambar dengan dimensi dan format yang dapat dikonfigurasi, lalu mengirimkannya sebagai muatan yang dikodekan base64 ke titik akhir Anda.

Contoh berikut membuat konfigurasi beban kerja untuk membandingkan model bahasa visi dengan gambar sintetis:

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

Parameter berikut mengontrol pembuatan gambar sintetis:


| Parameter | Tipe | Default | Deskripsi | 
| --- | --- | --- | --- | 
| image\_width\_mean | float | Tidak ada | Lebar gambar rata-rata dalam piksel. | 
| image\_width\_stddev | float | Tidak ada | Standar deviasi lebar gambar. Setel untuk memvariasikan dimensi gambar di seluruh permintaan. | 
| image\_height\_mean | float | Tidak ada | Rata-rata tinggi gambar dalam piksel. | 
| image\_height\_stddev | float | Tidak ada | Standar deviasi tinggi gambar. | 
| image\_batch\_size | int | 1 | Jumlah gambar per permintaan. | 
| image\_format | string | png | Format gambar. Nilai yang valid: png (lossless), jpeg (lossy, file yang lebih kecil), random (secara acak memilih PNG atau JPEG per gambar). | 

**Variable-size gambar**

Gunakan parameter standar deviasi untuk menghasilkan gambar dengan dimensi yang bervariasi, mensimulasikan beban kerja dunia nyata di mana ukuran gambar berbeda:

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

## Benchmark titik akhir multimodal dengan video sintetis
<a name="generative-ai-inference-recommendations-benchmark-video"></a>

Anda dapat membandingkan model multimodal yang memproses input video dengan menghasilkan video sintetis sebagai bagian dari konfigurasi beban kerja. Layanan benchmarking menggunakan pembuatan video sintetis AiPerf untuk membuat video dengan resolusi, kecepatan bingkai, durasi, dan pengkodean yang dapat dikonfigurasi, lalu mengirimkannya sebagai muatan berenkode base64 ke titik akhir Anda.

**catatan**  
Pembuatan video dinonaktifkan secara default. Anda harus menentukan keduanya `video_width` dan `video_height` dalam konfigurasi beban kerja Anda untuk mengaktifkannya.

Contoh berikut membuat konfigurasi beban kerja untuk benchmarking model multimodal dengan video sintetis pada resolusi 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)}
)
```

### Parameter video
<a name="generative-ai-inference-recommendations-benchmark-video-params"></a>

Parameter berikut mengontrol pembuatan video sintetis:


| Parameter | Tipe | Default | Deskripsi | 
| --- | --- | --- | --- | 
| video\_width | int | Tidak ada | Lebar bingkai dalam piksel. Harus disetel dengan video\_height untuk mengaktifkan pembuatan video. | 
| video\_height | int | Tidak ada | Tinggi bingkai dalam piksel. Harus disetel dengan video\_width untuk mengaktifkan pembuatan video. | 
| video\_fps | int | 4 | Bingkai per detik. | 
| video\_duration | float | 5.0 | Durasi klip dalam hitungan detik. | 
| video\_batch\_size | int | 1 | Jumlah video per permintaan. | 
| video\_synth\_type | string | bergerak\_shapes | Pola sintesis. Nilai yang valid: moving\_shapes (bentuk geometris animasi), grid\_clock (kisi dengan animasi jam), noise (noise piksel acak). | 
| video\_format | string | webm | Format wadah. Nilai valid: webm. | 
| video\_codec | string | libvpx-vp9 | Codec video. Nilai yang didukung: libvpx-vp9 (VP9, WebM). | 

**catatan**  
Layanan benchmarking mendukung pengkodean VP9 dengan format WebM saja.

### Trek audio tertanam
<a name="generative-ai-inference-recommendations-benchmark-video-audio"></a>

Untuk model yang memproses video dan audio bersama-sama, Anda dapat menyematkan trek audio sintetis dalam video yang dihasilkan. Audio dinonaktifkan secara default. Setel `video_audio_num_channels` ke `1` (mono) atau `2` (stereo) untuk mengaktifkannya.


| Parameter | Tipe | Default | Deskripsi | 
| --- | --- | --- | --- | 
| video\_audio\_num\_channels | int | 0 | 0 = dinonaktifkan, 1 = mono, 2 = stereo. | 
| video\_audio\_sample\_rate | int | 44100 | Tingkat sampel dalam Hz (8000—96000). | 
| video\_audio\_codec | string | auto | Codec audio. Auto-selects libvorbisuntuk WebM dan aac untuk MP4. Anda dapat mengganti denganaac,libvorbis, ataulibopus. | 
| video\_audio\_depth | int | 16 | Kedalaman bit per sampel (8, 16, 24, atau 32). | 

### Contoh pembandingan video
<a name="generative-ai-inference-recommendations-benchmark-video-examples"></a>

**Low-resolution pemahaman 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"
    }
}
```

**Pembandingan 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 dengan audio untuk model multimodal**

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

**Teks dan video campuran**

Gabungkan video dengan petunjuk teks untuk menjawab pertanyaan video atau beban kerja teks:

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

### Pertimbangan performa
<a name="generative-ai-inference-recommendations-benchmark-video-considerations"></a>
+ Resolusi dan frame rate yang lebih tinggi meningkatkan waktu pengkodean video dan ukuran muatan. Untuk pengujian throughput tinggi, gunakan resolusi yang lebih rendah (320 × 240 atau 640 × 480).
+ VP9 (`libvpx-vp9`) dengan format WebM adalah satu-satunya codec yang didukung dan memberikan kompresi yang baik untuk benchmarking payload.
+ Audio menambahkan overhead minimal dibandingkan dengan streaming video. Gunakan mono (`1`) pada 16 kHz untuk beban kerja yang berfokus pada ucapan.

## Langkah 2: Pantau status pekerjaan
<a name="generative-ai-inference-recommendations-benchmark-monitor"></a>

Polling status pekerjaan hingga mencapai status 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
```

## Langkah 3: Tinjau hasil benchmark
<a name="generative-ai-inference-recommendations-benchmark-results"></a>

Hasil benchmark ditulis ke lokasi keluaran Amazon S3 yang Anda tentukan. Hasilnya meliputi metrik utama berikut:

`request_throughput`  
Permintaan per detik.

`request_latency`  
End-to-end minta latensi dengan kerusakan persentil (P50, P90, P99).

`time_to_first_token`  
Waktu dari pengiriman permintaan ke token pertama yang diterima.

`inter_token_latency`  
Waktu antara token keluaran berturut-turut.

`output_token_throughput`  
Token keluaran yang dihasilkan per detik.

Setiap metrik mencakup ringkasan statistik: rata-rata, minimum, maksimum, P50, P90, P99, dan standar deviasi.

## Kelola sumber daya tolok ukur
<a name="generative-ai-inference-recommendations-benchmark-manage"></a>

Gunakan operasi berikut untuk mengelola pekerjaan benchmark dan konfigurasi beban kerja Anda.

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