기술 제원 및 공개 범위

RTX 3050 Laptop 4GB 환경에서 Llama-3.1-8B-Instruct 모델을 NF4 양자화로 처리했을 때, 피크 VRAM 3.32GB와 119.6 tok/s의 처리 속도를 기록했다. 이번에 공개된 Soup은 단일 명령어로 LLM 파인튜닝과 포스트 트레이닝(Post-training)을 수행하는 도구로, 핵심은 '레이어 스트리밍(Layer Streaming)' 기술을 통해 VRAM 제약을 해결한 점이다.

v0.72.4 업데이트를 통해 레이어 스트리밍 환경에서 DPO, ORPO, SimPO, KTO 등 선호도 학습(Preference losses) 지원 범위가 확장됐다. 기존에는 지도 미세 조정(SFT)만 가능했으나, 이제는 노트북 급 GPU에서도 정렬(Alignment) 작업이 가능하다. 모델 호환성은 HuggingFace Hub의 `AutoModelForCausalLM`으로 로드 가능한 모든 텍스트 생성 모델을 지원하며, Llama 3.x/4, Qwen 2.5/3, Gemma 3, DeepSeek R1/V3 등 100개 이상의 레시피가 준비되어 있다.

레이어 스트리밍 및 검증 메커니즘

레이어 스트리밍은 고정된 베이스 모델(Frozen base)을 VRAM에 상주시키지 않고 호스트 RAM에 둔 뒤, 디코더 레이어를 한 번에 하나씩 GPU로 전송하는 방식으로 작동한다. 이 과정에서 발생하는 연산 결과는 일반적인 상주 실행(Resident run) 방식과 비트 단위로 일치(Bit-exact)함을 검증했다. 관련 상세 내용은 Exact Layer Streaming: LoRA Fine-Tuning of an 8B Model on a 4 GB Laptop GPU 논문에서 확인할 수 있다.

보상 함수 생성 도구인 `soup reward synth`는 JSONL 형식의 참조 출력물을 입력받아 결정론적 검증기(Deterministic verifier)를 추론하고 `.py` 형태의 보상 함수를 작성한다. 특히 수치, JSON 스키마, 정규표현식, 도구 호출(Tool call)의 네 가지 패밀리를 구분하며, 참조 답변과 오답을 구분하지 못하는 함수는 출력을 거부하는 캘리브레이션 리포트 메커니즘을 갖췄다.

모델 배포 결정 도구인 `soup ship`은 7개의 오프라인 스위트(MCQ, 산술, 도구 호출, JSON 유효성, 안전성/거부)를 통해 회귀 테스트를 수행한다. 특정 작업 성능은 올랐으나 도구 호출 능력이 저하된 경우 'DON'T SHIP' 판정을 내린다. `soup draft`를 통한 증류(Distillation) 테스트 결과, 소형 모델 쌍에서 수락률(Acceptance rate)이 69.3%에서 69.3%로 변화가 없었으며 보조 디코딩(Assisted decoding) 시 오히려 속도가 느려지는 결과가 관찰됐다.

도입 시 고려사항 및 운영 영향

설치 단계에서 Windows cmd.exe 사용자는 셸의 따옴표 처리 방식 차이로 인해 반드시 큰따옴표를 사용해야 한다. 단일 따옴표를 사용할 경우 pip가 리터럴 문자로 인식해 설치에 실패한다.

bash
pip install "soup-cli[train]"

v0.72.0 버전에서 `stream_layers: true`로 학습된 어댑터는 텐서 키에 `.inner.` 세그먼트가 추가로 저장되어 로더가 튜닝되지 않은 베이스 모델을 반환하는 문제가 있었다. 해당 버전 사용자는 v0.72.1 이상에서 재학습하거나 다음 명령어로 `.inner.` 포함 여부를 확인해야 한다.

bash
python -c "from safetensors.torch import load_file; print([k for k in load_file('adapter_model.safetensors') if '.inner.' in k][:3])"

저사양 GPU 환경에서 8B급 모델의 파인튜닝을 시도하는 실무자는 VRAM 부족으로 인한 OOM(Out of Memory) 발생 시 `soup.yaml` 설정에서 `stream_layers: true`를 활성화하여 학습 가능 여부를 먼저 검증해야 한다.