[Ray] 단일 노드 LLM 배치 추론 성능 기준선 벤치마크 및 회귀 가드 추가
PR 링크: ray-project/ray#58289 상태: Merged | 변경: +185 / -2
들어가며
Ray Data LLM의 배치 추론 성능이 릴리스마다 안정적으로 유지되는지 확인할 벤치마크가 없었습니다. 이 PR은 단일 노드(L4 GPU) 환경에서 vLLM 기반 배치 추론 벤치마크를 추가하고, 환경 변수로 설정 가능한 회귀 감지 임계값을 도입합니다.
핵심 코드 분석
벤치마크 설정
# test_batch_single_node_vllm.py
NUM_REQUESTS = 1000
MODEL_ID = "facebook/opt-1.3b"
BATCH_SIZE = 64
CONCURRENCY = 1
def test_single_node_baseline_benchmark():
dataset = ShareGPTDataset(
dataset_path=dataset_path,
hf_dataset_id="Crystalcareai/Code-feedback-sharegpt-renamed",
truncate_prompt=2048,
)
prompts = dataset.sample(num_requests=NUM_REQUESTS)
ds = ray.data.from_items(prompts)
result = benchmark(
Mode.VLLM_ENGINE, ds,
batch_size=BATCH_SIZE,
model=MODEL_ID,
tensor_parallel_size=1,
pipeline_parallel_size=1,
)
회귀 감지 임계값
min_throughput = _get_float_env("RAY_DATA_LLM_BENCHMARK_MIN_THROUGHPUT", 5)
max_latency_s = _get_float_env("RAY_DATA_LLM_BENCHMARK_MAX_LATENCY_S", 120)
assert result.throughput >= min_throughput, \
f"Throughput regression: {result.throughput:.4f} < {min_throughput:.4f} req/s"
assert result.elapsed_s <= max_latency_s, \
f"Latency regression: {result.elapsed_s:.4f} > {max_latency_s:.4f} s"
JSON 아티팩트 출력
artifact_path = os.getenv("RAY_LLM_BENCHMARK_ARTIFACT_PATH")
if artifact_path:
metrics = {
"model": MODEL_ID,
"throughput_req_per_s": float(result.throughput),
"elapsed_s": float(result.elapsed_s),
}
with open(artifact_path, "w") as f:
json.dump(metrics, f, indent=2, sort_keys=True)
컴퓨팅 환경 설정
# llm_single_node_benchmark_l4.yaml
worker_node_types:
- name: worker_node
instance_type: g6.xlarge # 1x NVIDIA L4 GPU, 24GB VRAM
min_workers: 1
max_workers: 1
왜 이게 좋은가
1. 성능 회귀 조기 감지
주간 릴리스 테스트로 등록되어, Ray Data LLM의 배치 추론 성능이 기준선 이하로 떨어지면 자동으로 감지합니다. 임계값(처리량 5 req/s, 레이턴시 120초)은 L4 GPU에서의 관측값을 기반으로 설정되었습니다.
2. 환경 변수 기반 유연한 임계값
임계값이 하드코딩되지 않고 환경 변수로 설정 가능하므로, 다양한 GPU 환경에서 적절한 기준을 적용할 수 있습니다.
3. 아티팩트 기반 추적
JSON 아티팩트 출력 옵션을 통해 벤치마크 결과를 영구 저장소에 기록하고, 시계열 분석이나 슬라이딩 윈도우 평균 비교에 활용할 수 있는 기반을 마련합니다.
4. import 경로 수정
# Before: 상대 import 오류
from dataset import ShareGPTDataset
# After: 패키지 내 상대 import
from .dataset import ShareGPTDataset
기존 코드의 import 오류도 함께 수정되었습니다.
참고 자료
- Ray Data LLM 배치 추론 문서 — Ray Data의 배치 추론 가이드
- vLLM 프로젝트 — vLLM 엔진 참조
관련 포스트
PR Analysis 의 다른글
- 이전글 [pydantic-ai] AnthropicProvider에 AsyncAnthropicVertex 클라이언트 지원 추가
- 현재글 : [Ray] 단일 노드 LLM 배치 추론 성능 기준선 벤치마크 및 회귀 가드 추가
- 다음글 [Triton] AMD Gluon에서 async_wait을 commit group 기반으로 변경
댓글