본문으로 건너뛰기

[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 오류도 함께 수정되었습니다.

참고 자료

댓글

관련 포스트

PR Analysis 의 다른글