~/우성현

← 모든 프로젝트

Entail

모델 파일이 선언한 설정이 추론 엔진에 실제로 도달했는지 검사하고, 가능하면 첫 토큰 전에 바로잡는 파이썬 라이브러리

기간
2026.09
역할
1인 개발 · AI 코딩 에이전트 협업
저장소
wwoosshh/Entail
스택
  • Python
  • transformers
  • vLLM
  • SGLang
  • diffusers
  • Triton
  • GitHub Actions

핵심 수치

2026-09-30 기준 · 기여·릴리스 수치는 매일 자동 갱신

문제

Hugging Face의 모델 폴더는 config.json 같은 파일에 RoPE base, 채팅 템플릿, stop 토큰 같은 값을 선언합니다. 추론 엔진은 이 값을 읽어 모델을 돌리는데, 실행 옵션이나 라이브러리 버전이 바뀌면 값이 조용히 버려지거나 다르게 읽힐 수 있습니다. 이때 엔진은 오류를 내지 않고 틀린 답을 냅니다.

예를 들어 transformers 5 환경의 vLLM에서 --hf-overrides로 rope_scaling을 넘기면 rope_theta가 사라지고, 파일에 기본값이 없는 모델은 base 10000으로 돌아갑니다.

접근

  • 모델 파일이 선언한 값과 엔진이 실제로 쓰는 값을 경계마다 비교하는 판정 체계를 만들었습니다.
  • 엔진이 따로 띄우는 워커 프로세스 안까지 검사가 들어가도록 파이썬 시작 훅(.pth)을 썼습니다.
  • “무엇을 검사할지”(규칙)와 “엔진별로 어떻게 읽을지”(어댑터)를 나누고, 이 경계를 테스트로 강제했습니다.
  • 바로잡을 수 있는 경우에는 첫 토큰이 나오기 전에 값을 고칩니다.

결과

  • vLLM 0.30에서 Llama-3.2-3B-Instruct의 GSM8K 정답이 379에서 273/500으로 떨어지는 것을 재현했고, entail을 켜면 376/500으로 돌아왔습니다.
  • 다운로드가 많은 LLM 300개를 GPU 없이 vLLM 자체 설정 코드로 점검했습니다. 그중 vLLM 실행 옵션으로 rope_scaling을 넘기는 경로를 쓰는 180개에서 64개의 RoPE base가 조용히 바뀌었고, entail을 켜면 180개 모두 원래 RoPE base를 유지했습니다.
  • vLLM과 SGLang에 보고한 이슈를 바탕으로 다른 개발자들이 수정 PR을 올렸습니다. 현재 상태는 포트폴리오 사이트의 외부 기여 목록이 매일 자동으로 갱신합니다.
  • 켜 두었을 때 늘어나는 요청 처리 시간은 약 1%입니다.

주요 결정

  • 검사 항목마다 근거 수준(직접 측정했는지, 문서로만 확인했는지)을 표로 관리하고, 직접 측정한 항목만 자동 수정에 쓰도록 했습니다.
  • 외부 의존성 없이 동작하게 만들어, 어떤 추론 환경에도 부담 없이 넣을 수 있게 했습니다.

한계와 다음 단계

  • 코드를 고정한 채 실제 엔진 버그를 다시 재현한 사전 등록 실험에서는 규칙에 없던 새 버그를 잡지 못했습니다. 이 결과는 README에 그대로 공개했습니다. 지금은 알려진 유형의 설정 누락을 막는 도구에 가깝습니다.
  • README 표의 여러 항목은 다른 사람이 보고한 버그로 규칙을 만든 “재현” 사례입니다.
  • 측정은 모두 개인 PC의 GPU 한 장(RTX 4070 Ti)에서 했습니다.
  • 외부 사용자는 아직 거의 없습니다.

AI 협업 방식

방향과 판단은 직접 했고, 구현과 문서 작업은 AI 코딩 에이전트(Claude Code)와 함께 했습니다. 모든 브랜치를 합친 커밋 133개(2026-09-30 기준)에 모두 Claude 공동 작성 표기가 있습니다.

외부 PR · 이슈

매일 자동 확인 · 마지막 변경 2026-10-07

  • 열림이슈 ComfyUI#16490 이슈

    Dynamic VRAM: a ModelSamplingDiscrete schedule leaks into later runs of the same checkpoint (buffers restored by attribute path), giving wrong or black images reported as success

  • 열림이슈 sglang#41227 이슈

    [Bug] `--json-model-override-args '{"rope_scaling": ...}'` drops `rope_theta` for models without a per-model fallback: Llama-3.2-3B-Instruct GSM8K 161 → 106 (first 200)

  • 열림이슈 vllm#58675 이슈

    [Bug]: `--hf-overrides '{"rope_scaling": ...}'` drops `rope_theta` under Transformers v5; models without a per-file default silently run with base 10000