Entail
모델 파일이 선언한 설정이 추론 엔진에 실제로 도달했는지 검사하고, 가능하면 첫 토큰 전에 바로잡는 파이썬 라이브러리
- 기간
- 2026.09
- 역할
- 1인 개발 · AI 코딩 에이전트 협업
- 스택
핵심 수치
2026-09-30 기준 · 기여·릴리스 수치는 매일 자동 갱신
- vLLM에서 GSM8K 하락 재현 (Llama-3.2-3B-Instruct)379 → 273 / 500
- 외부 이슈 (ComfyUI·SGLang·vLLM)3건 · 열림 3
- 다른 개발자의 수정 PR열림 1 · 병합 0 · 닫힘 2
- PyPI 릴리스19개 (최신 2.4.0)
- entail을 켰을 때376 / 500
- vLLM 실행 옵션으로 rope_scaling을 넘길 때 RoPE base가 바뀌는 인기 LLM64 / 180
문제
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
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
[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)
[Bug]: `--hf-overrides '{"rope_scaling": ...}'` drops `rope_theta` under Transformers v5; models without a per-file default silently run with base 10000