기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
생성형 AI 추론 엔드포인트 벤치마크
SageMaker AI 벤치마킹 서비스는 SageMaker AI 엔드포인트에서 호스팅되는 대규모 언어 모델(LLMs)의 성능을 측정합니다. NVIDIA AIPerf를 사용하여 벤치마크를 실행하여 요청 지연 시간, 처리량, 첫 번째 토큰까지의 시간, 토큰 간 지연 시간과 같은 지표를 생성합니다.
사전 조건
벤치마크 작업을 생성하기 전에 다음이 필요합니다.
-
OpenAI 호환 채팅 완료 API를 지원하는 LLM을 호스팅하는
InService상태의 SageMaker AI 엔드포인트 -
벤치마크 출력을 위한 Amazon S3 버킷
-
엔드포인트 및 출력 버킷에 대한 SageMaker AI 액세스 권한을 부여하는 IAM 실행 역할
1단계: 벤치마크 작업 생성
벤치마크 작업은 특정 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 파라미터를 전달합니다.
추론 구성 요소 벤치마크
엔드포인트가 모델을 직접 배포하는 대신 추론 구성 요소를 사용하는 경우에서 벤치마킹할 추론 구성 요소를 지정해야 합니다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 엔드포인트 벤치마크
여러 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 기본적으로를 사용합니다.
합성 이미지로 멀티모달 엔드포인트 벤치마킹
워크로드 구성의 일부로 합성 이미지를 생성하여 비전 언어 모델을 벤치마킹할 수 있습니다. 벤치마킹 서비스는 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" } }
합성 비디오로 멀티모달 엔드포인트 벤치마킹
워크로드 구성의 일부로 합성 비디오를 생성하여 비디오 입력을 처리하는 멀티모달 모델을 벤치마킹할 수 있습니다. 벤치마킹 서비스는 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)} )
비디오 파라미터
다음 파라미터는 합성 비디오 생성을 제어합니다.
| 파라미터 | 유형 | 기본값 | 설명 |
|---|---|---|---|
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 인코딩만 지원합니다.
임베디드 오디오 트랙
비디오와 오디오를 함께 처리하는 모델의 경우 생성된 비디오에 합성 오디오 트랙을 포함할 수 있습니다. 오디오는 기본적으로 비활성화되어 있습니다. 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). |
비디오 벤치마킹 예제
저해상도 비디오 이해
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" } }
성능 고려 사항
-
해상도와 프레임 속도가 높을수록 비디오 인코딩 시간과 페이로드 크기가 증가합니다. 높은 처리량 테스트의 경우 더 낮은 해상도(320×240 또는 640×480)를 사용합니다.
-
WebM 형식의 VP9(
libvpx-vp9)는 유일하게 지원되는 코덱이며 페이로드 벤치마킹에 적합한 압축을 제공합니다. -
오디오는 비디오 스트림에 비해 오버헤드를 최소화합니다. 음성 중심 워크로드에는 16kHz의 모노(
1)를 사용합니다.
2단계: 작업 상태 모니터링
터미널 상태에 도달할 때까지 작업 상태를 폴링합니다.
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단계: 벤치마크 결과 검토
벤치마크 결과는 지정한 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 및 표준 편차와 같은 통계 요약이 포함됩니다.
벤치마크 리소스 관리
다음 작업을 사용하여 벤치마크 작업 및 워크로드 구성을 관리합니다.
# 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" )