

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 생성형 AI 추론 엔드포인트 벤치마크
<a name="generative-ai-inference-recommendations-benchmark"></a>

SageMaker AI 벤치마킹 서비스는 SageMaker AI 엔드포인트에서 호스팅되는 대규모 언어 모델(LLMs)의 성능을 측정합니다. NVIDIA AIPerf를 사용하여 벤치마크를 실행하여 요청 지연 시간, 처리량, 첫 번째 토큰까지의 시간, 토큰 간 지연 시간과 같은 지표를 생성합니다.

## 사전 조건
<a name="generative-ai-inference-recommendations-benchmark-prereqs"></a>

벤치마크 작업을 생성하기 전에 다음이 필요합니다.
+ OpenAI 호환 채팅 완료 API를 지원하는 LLM을 호스팅하는 `InService` 상태의 SageMaker AI 엔드포인트
+ 벤치마크 출력을 위한 Amazon S3 버킷
+ 엔드포인트 및 출력 버킷에 대한 SageMaker AI 액세스 권한을 부여하는 IAM 실행 역할

## 1단계: 벤치마크 작업 생성
<a name="generative-ai-inference-recommendations-benchmark-create"></a>

벤치마크 작업은 특정 SageMaker AI 엔드포인트를 대상으로 하며 워크로드 구성을 참조합니다.

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

엔드포인트가 추론 구성 요소를 통해 여러 모델을 호스팅하는 경우의 `InferenceComponents` 파라미터에서 모델을 지정할 수 있습니다`BenchmarkTarget`.

엔드포인트가 VPC에 있는 경우 보안 그룹 IDs 및 서브넷을 포함한 `VpcConfig` 설정과 함께 `NetworkConfig` 파라미터를 전달합니다.

## 추론 구성 요소 벤치마크
<a name="generative-ai-inference-recommendations-benchmark-inference-components"></a>

엔드포인트가 모델을 직접 배포하는 대신 *추론 구성* 요소를 사용하는 경우에서 벤치마킹할 추론 구성 요소를 지정해야 합니다`BenchmarkTarget`. 추론 구성 요소를 지정하면 벤치마킹 서비스는 엔드포인트의 기본 모델이 아닌 특정 구성 요소로 요청을 라우팅합니다.

`InferenceComponents` 목록에서 하나 이상의 추론 구성 요소 이름 또는 ARNs을 전달합니다.

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

**참고**  
엔드포인트가 추론 구성 요소에 대해 구성되었지만 벤치마크 대상`InferenceComponents`에를 지정하지 않은 경우 작업이 실패하고 엔드포인트에 직접 배포된 모델이 없음을 나타내는 오류가 발생합니다. inference-component-based 엔드포인트를 벤치마킹할 때는 항상 `InferenceComponents` 파라미터를 포함합니다.

## 다중 LoRA 엔드포인트 벤치마크
<a name="generative-ai-inference-recommendations-benchmark-multi-lora"></a>

여러 LoRA 어댑터를 제공하는 엔드포인트를 벤치마킹하려면에서 각 어댑터를 추론 구성 요소로 지정합니다`BenchmarkTarget`. 선택적으로 `model_selection_strategy` 워크로드 파라미터를 사용하여 벤치마크가 어댑터 간에 요청을 분산하는 방법을 제어할 수 있습니다. 전략을 지정하지 않으면 기본값은 입니다`round_robin`.

먼저 워크로드 구성을 생성합니다. 다음 예제에는 선택적 `model_selection_strategy` 파라미터가 포함되어 있습니다.

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

그런 다음 모든 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` 파라미터는 선택 사항이며 벤치마크 도구가 지정된 추론 구성 요소에 요청을 분산하는 방법을 결정합니다. 유효값은 다음과 같습니다.
+ `round_robin` (기본값) - 각 어댑터는 순서대로 요청을 수신합니다. n번째 요청은 (n mod number-of-models)번째 어댑터로 전송됩니다.
+ `random` - 각 요청은 어댑터에 무작위로 균일하게 할당됩니다.

를 지정하지 않으면 벤치마크`model_selection_strategy`는 `round_robin` 기본적으로를 사용합니다.

## 합성 이미지로 멀티모달 엔드포인트 벤치마킹
<a name="generative-ai-inference-recommendations-benchmark-image"></a>

워크로드 구성의 일부로 합성 이미지를 생성하여 비전 언어 모델을 벤치마킹할 수 있습니다. 벤치마킹 서비스는 AIPerf를 사용하여 구성 가능한 차원 및 형식으로 이미지를 생성한 다음 이를 base64로 인코딩된 페이로드로 엔드포인트에 전송합니다.

다음 예제에서는 합성 이미지로 비전 언어 모델을 벤치마킹하기 위한 워크로드 구성을 생성합니다.

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

다음 파라미터는 합성 이미지 생성을 제어합니다.


| 파라미터 | 유형 | 기본값 | 설명 | 
| --- | --- | --- | --- | 
| image\_width\_mean | 실수 | 없음 | 픽셀 단위의 평균 이미지 너비입니다. | 
| image\_width\_stddev | 실수 | 없음 | 이미지 너비의 표준 편차입니다. 요청 간에 이미지 차원을 변경하도록 설정합니다. | 
| image\_height\_mean | 실수 | 없음 | 픽셀 단위의 평균 이미지 높이입니다. | 
| image\_height\_stddev | 실수 | 없음 | 이미지 높이의 표준 편차입니다. | 
| image\_batch\_size | int | 1 | 요청당 이미지 수입니다. | 
| image\_format | 문자열 | PNG | 이미지 형식 유효한 값: png (손실 없음), jpeg (손실 있음, 작은 파일), random (이미지당 PNG 또는 JPEG를 무작위로 선택). | 

**가변 크기 이미지**

표준 편차 파라미터를 사용하여 다양한 차원의 이미지를 생성하여 이미지 크기가 다른 실제 워크로드를 시뮬레이션합니다.

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

## 합성 비디오로 멀티모달 엔드포인트 벤치마킹
<a name="generative-ai-inference-recommendations-benchmark-video"></a>

워크로드 구성의 일부로 합성 비디오를 생성하여 비디오 입력을 처리하는 멀티모달 모델을 벤치마킹할 수 있습니다. 벤치마킹 서비스는 AIPerf의 합성 비디오 생성을 사용하여 구성 가능한 해상도, 프레임 속도, 기간 및 인코딩으로 비디오를 생성한 다음 이를 base64 인코딩 페이로드로 엔드포인트에 전송합니다.

**참고**  
비디오 생성은 기본적으로 비활성화되어 있습니다. 워크로드 구성을 활성화하려면 워크로드 구성`video_height`에서 `video_width` 및를 모두 지정해야 합니다.

다음 예제에서는 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)}
)
```

### 비디오 파라미터
<a name="generative-ai-inference-recommendations-benchmark-video-params"></a>

다음 파라미터는 합성 비디오 생성을 제어합니다.


| 파라미터 | 유형 | 기본값 | 설명 | 
| --- | --- | --- | --- | 
| video\_width | int | 없음 | 프레임 너비는 픽셀 단위입니다. 비디오 생성을 활성화video\_height하려면 로 설정해야 합니다. | 
| video\_height | int | 없음 | 프레임 높이를 픽셀 단위로 표시합니다. 비디오 생성을 활성화video\_width하려면 로 설정해야 합니다. | 
| video\_fps | int | 4 | 초당 프레임 수. | 
| video\_duration | 실수 | 5.0 | 초 단위의 클립 지속 시간입니다. | 
| video\_batch\_size | int | 1 | 요청당 비디오 수입니다. | 
| video\_synth\_type | 문자열 | 이동\_셰이프 | 합성 패턴. 유효한 값: moving\_shapes (애니메이션 처리된 기하학적 셰이프), grid\_clock (클럭 애니메이션이 있는 그리드), noise (랜덤 픽셀 노이즈). | 
| video\_format | 문자열 | 웹 | 컨테이너 형식. 유효한 값: webm. | 
| video\_codec | 문자열 | libvpx-vp9 | 비디오 코덱. 지원되는 값: libvpx-vp9 (VP9, WebM). | 

**참고**  
벤치마킹 서비스는 WebM 형식의 VP9 인코딩만 지원합니다.

### 임베디드 오디오 트랙
<a name="generative-ai-inference-recommendations-benchmark-video-audio"></a>

비디오와 오디오를 함께 처리하는 모델의 경우 생성된 비디오에 합성 오디오 트랙을 포함할 수 있습니다. 오디오는 기본적으로 비활성화되어 있습니다. `1` (모노) 또는 `2` (스테레오)`video_audio_num_channels`로 설정하여 활성화합니다.


| 파라미터 | 유형 | 기본값 | 설명 | 
| --- | --- | --- | --- | 
| video\_audio\_num\_channels | int | 0 | 0 = 비활성화됨, 1 = 모노, 2 = 스테레오. | 
| video\_audio\_sample\_rate | int | 44100 | Hz(8000\~96000) 단위의 샘플 속도입니다. | 
| video\_audio\_codec | 문자열 | auto | 오디오 코덱. WebM의 libvorbis 경우 , MP4의 aac 경우를 자동으로 선택합니다. aac, 또는 로 재정libvorbis의할 수 있습니다libopus. | 
| video\_audio\_depth | int | 16 | 샘플당 비트 깊이(8, 16, 24 또는 32). | 

### 비디오 벤치마킹 예제
<a name="generative-ai-inference-recommendations-benchmark-video-examples"></a>

**저해상도 비디오 이해**

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

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

**멀티모달 모델용 오디오가 포함된 비디오**

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

**텍스트 및 비디오 혼합**

비디오 질문 응답 또는 캡션 워크로드에 대한 텍스트 프롬프트와 비디오를 결합합니다.

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

### 성능 고려 사항
<a name="generative-ai-inference-recommendations-benchmark-video-considerations"></a>
+ 해상도와 프레임 속도가 높을수록 비디오 인코딩 시간과 페이로드 크기가 증가합니다. 높은 처리량 테스트의 경우 더 낮은 해상도(320×240 또는 640×480)를 사용합니다.
+ WebM 형식의 VP9(`libvpx-vp9`)는 유일하게 지원되는 코덱이며 페이로드 벤치마킹에 적합한 압축을 제공합니다.
+ 오디오는 비디오 스트림에 비해 오버헤드를 최소화합니다. 음성 중심 워크로드에는 16kHz의 모노(`1`)를 사용합니다.

## 2단계: 작업 상태 모니터링
<a name="generative-ai-inference-recommendations-benchmark-monitor"></a>

터미널 상태에 도달할 때까지 작업 상태를 폴링합니다.

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

## 3단계: 벤치마크 결과 검토
<a name="generative-ai-inference-recommendations-benchmark-results"></a>

벤치마크 결과는 지정한 Amazon S3 출력 위치에 기록됩니다. 결과에는 다음과 같은 주요 지표가 포함됩니다.

`request_throughput`  
초당 요청 수.

`request_latency`  
백분위수 분석(P50, P90, P99)이 포함된 End-to-end 요청 지연 시간입니다.

`time_to_first_token`  
요청 제출부터 수신된 첫 번째 토큰까지의 시간입니다.

`inter_token_latency`  
연속 출력 토큰 사이의 시간입니다.

`output_token_throughput`  
초당 생성된 출력 토큰입니다.

각 지표에는 평균, 최소, 최대, P50, P90, P99 및 표준 편차와 같은 통계 요약이 포함됩니다.

## 벤치마크 리소스 관리
<a name="generative-ai-inference-recommendations-benchmark-manage"></a>

다음 작업을 사용하여 벤치마크 작업 및 워크로드 구성을 관리합니다.

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