[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 처리하여 점진적 마이그레이션을 지원한다.
참고 자료
- sgl-project/sglang#21667 — 원본 PR
⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [sglang] Blackwell GPU에서 TRT-LLM 커널을 DSA 기본값으로 설정
- 현재글 : [sglang] GSM8K 평가를 Chat API 기반으로 통합
- 다음글 [Loki] Ingester 타임아웃 반영하여 레이턴시 알림 임계값 1초에서 5초로 조정
댓글