본문으로 건너뛰기

[sglang] GSM8K 평가를 Chat API 기반으로 통합

PR 링크: sgl-project/sglang#21667 상태: Merged | 변경: +1349 / -1359

들어가며

SGLang의 GSM8K 평가는 두 가지 경로가 있었다: few_shot_gsm8k.py(sglang 프로그래밍 모델 기반)와 run_eval(OpenAI Chat API 기반 simple_eval). thinking_mode 같은 확장 파라미터가 없으면 few_shot 경로로, 있으면 simple_eval 경로로 분기했다. 이 이중 경로는 테스트 결과의 일관성을 해치고 metric 수집 체계가 다르다는 문제가 있었다. 이 PR은 GSM8K를 포함한 모든 평가를 Chat API 기반 simple_eval로 통합한다.

핵심 코드 분석

1. Few-shot 분기 제거

Before:

def run_accuracy_test(model, params, base_url):
    has_extended_params = any(
        getattr(params, field) is not None
        for field in ("thinking_mode", "temperature", "top_p", "top_k", "repeat")
    )
    if params.dataset == "mmmu-pro":
        success, error, metrics = _run_nemo_skills_eval(...)
    elif params.dataset == "gsm8k" and not has_extended_params:
        success, error, metrics = _run_few_shot_eval(...)  # 별도 경로
    else:
        success, error, metrics = _run_simple_eval(...)

After:

def run_accuracy_test(model, params, base_url):
    if params.dataset in ("mmmu-pro", "mmmu_pro"):
        success, error, metrics = _run_nemo_skills_eval(...)
    else:
        success, error, metrics = _run_simple_eval(...)  # GSM8K 포함 통합

_run_few_shot_eval 함수(약 50줄)가 완전히 제거되고, GSM8K도 _run_simple_eval을 통과한다.

2. GSM8KMixin 업데이트

Before:

class GSM8KMixin:
    """Mixin for few-shot GSM8K evaluation."""
    gsm8k_parallel: int = 128

    def test_gsm8k(self):
        args = SimpleNamespace(
            num_shots=5,
            # few_shot_gsm8k.py의 인터페이스
        )

After:

class GSM8KMixin:
    """Mixin for GSM8K evaluation via OpenAI Chat API."""
    gsm8k_num_threads: int = 128

    def test_gsm8k(self):
        args = SimpleNamespace(
            eval_name="gsm8k",
            # run_eval의 통합 인터페이스
        )

테스트 mixin이 Chat API 기반 run_eval 인터페이스를 사용하도록 변경되었다.

3. 기존 모듈 deprecation 처리

# few_shot_gsm8k.py
def run_eval(args):
    warnings.warn(
        "sglang.test.few_shot_gsm8k is deprecated. "
        "Use sglang.test.run_eval with eval_name='gsm8k' instead.",
        DeprecationWarning,
        stacklevel=2,
    )

기존 모듈은 삭제하지 않고 deprecation 경고를 추가하여 하위 호환성을 유지한다.

왜 이게 좋은가

  • 일관된 메트릭: 모든 평가가 동일한 dump_metric 프레임워크를 통해 결과를 보고
  • thinking_mode 지원: GSM8K에서도 DeepSeek-v3, Qwen3 등의 thinking mode 사용 가능
  • 유지보수 단순화: 평가 경로가 하나로 줄어 코드 변경 시 양쪽을 모두 수정할 필요 없음
  • throughput 추적: 이전 PR(#21793)에서 추가된 latency/throughput 메트릭이 GSM8K에도 자동 적용

정리

+1349/-1359의 큰 변경이지만, 핵심은 GSM8K 평가를 few-shot 전용 경로에서 Chat API 통합 경로로 이동시킨 것이다. thinking mode 지원 확대(DeepSeek-v3, Qwen3, GLM-45, Kimi-K2)도 함께 포함되었다. 기존 few_shot 모듈은 deprecation 처리하여 점진적 마이그레이션을 지원한다.

참고 자료

⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.

댓글

관련 포스트

PR Analysis 의 다른글