Soup: 레이어 스트리밍을 통한 4 GB 노트북 GPU에서의 8B LLM 미세 조정
Soup은 소비자용 노트북 GPU에서 8B 모델 미세 조정을 가능하게 합니다
Soup은 LLM 미세 조정의 인프라 오버헤드를 제거하기 위해 설계된 기술 프레임워크 및 CLI입니다. 주요 혁신은 레이어 스트리밍으로, 이를 통해 사용자는 4 GB VRAM만 있는 GPU에서도 8B 파라미터 모델을 미세 조정할 수 있습니다. 고정된 베이스 모델을 VRAM에 상주하는 객체가 아닌 읽기 전용 스트림으로 취급함으로써, Soup은 피크 메모리 요구 사항을 전체 모델 크기에서 단일 디코더 레이어 크기로 줄입니다.
레이어 스트리밍: 기술적 구현 및 메모리 효율성
레이어 스트리밍은 고정된 베이스 모델을 VRAM 밖으로 이동시켜 호스트 RAM(또는 RAM이 부족할 경우 NVMe 디스크)으로 옮김으로써 VRAM 병목 현상을 해결합니다. 모델은 한 번에 하나의 디코더 레이어씩 GPU로 공급되며, 처리량을 유지하기 위해 다음 레이어가 전용 CUDA 스트림에서 프리페치(prefetch)됩니다.
4 GB 하드웨어에서의 메모리 성능
RTX 3050 Laptop (4 GB VRAM, Windows)에서 측정한 결과, Soup은 Llama-3.1-8B (NF4 양자화)에 대해 다음과 같은 결과를 달성했습니다:
- Peak VRAM Usage: 3.32 GB
- Throughput: 119.6 tok/s
- SM Occupancy: 100%
Qwen2.5-3B (양자화되지 않은 bf16)와 같은 더 작은 모델의 경우, Soup은 2.15 GB의 VRAM에서 학습을 가능하게 합니다. 이는 모델이 VRAM에 상주할 경우 일반적으로 CUDA Out-of-Memory (OOM) 오류가 발생하는 시나리오입니다.
정확성 및 비트 일치성
스트리밍 방식은 손실(loss)이 감소하더라도 autograd 경로를 끊어버려 조용히 실패할 수 있기 때문에, Soup은 엄격한 정확성 프로토콜을 구현합니다. 모든 릴리스는 9개의 아키텍처 제품군에 대해 비스트리밍 상주 실행과 비교하여 비트 일치(bit-exact) 여부를 검증하며, 최대 절대 로짓 차이를 0.0으로 유지합니다.
선호도 최적화 지원 (DPO, ORPO, SimPO, KTO)
버전 0.72.4에서 Soup은 지도 미세 조정(SFT)을 넘어 선호도 손실(preference losses)을 지원하도록 레이어 스트리밍을 확장했습니다.
메모리 프리 참조 모델
Direct Preference Optimization (DPO)는 일반적으로 튜닝된 모델과 비교할 참조 모델이 필요하며, 이는 보통 VRAM 요구 사항을 두 배로 늘립니다. Soup은 어댑터(adapters)를 끈 상태의 동일한 스트리밍 베이스 모델을 참조 모델로 사용하여 이를 최적화합니다.
RTX 3050 4 GB에서 스트리밍 DPO의 피크 메모리는 SFT 피크의 **0.914×**였습니다. 반면, 두 번째 물리적 모델을 VRAM에 강제로 넣으려고 하면 730 MB의 오버헤드가 추가됩니다.
계산적 트레이드오프
메모리는 절약되지만 시간 비용이 발생합니다. DPO는 SFT보다 단계(step)당 레이어 스택을 1.52× 더 자주 읽어야 합니다.
ORPO 및 SimPO와 같은 다른 방법은 진정으로 참조 모델이 필요하지 않으므로 이러한 특정 오버헤드가 발생하지 않습니다.
Soup 워크플로우: 구성부터 배포까지
Soup은 포스트 트레이닝 스택을 단일 CLI로 단순화합니다. 워크플로우는 "one config, one command"로 설계되었습니다.
설치 및 설정
Soup은 PyPI를 통해 soup-cli로 배포됩니다. 사용자는 필요에 따라 특정 스택을 설치할 수 있습니다:
pip install soup-cli(Light core)pip install "soup-cli[train]"(Training stack including PyTorch, Transformers, and PEFT)pip install "soup-cli[all]"(Complete suite)
구성 및 학습
학습은 soup.yaml 파일을 통해 관리됩니다. 4 GB 카드를 위한 전형적인 구성은 다음과 같습니다:
stream_layers: true: 베이스 모델을 VRAM 밖으로 스트리밍합니다.quantization: 4bit: NF4를 사용하여 저장 크기를 줄입니다.stream_source: auto: RAM과 NVMe 디스크 사이에서 자동으로 선택합니다.
포스트 트레이닝 도구
학습 이후에도 Soup은 배포 및 평가 도구 모음을 제공합니다:
soup ship: 추출 기반 스코어러를 사용하여 배송 전 튜닝이 핵심 역량(예: tool-calling 또는 JSON 유효성)을 망가뜨리지 않는지 확인하는 회귀 테스트 게이트입니다.soup reward synth: 참조 출력으로부터 결정론적 보상 검증기를 생성합니다.soup draft: 투기적 디코딩(speculative decoding) 수락률을 측정하고 타겟 모델을 밀집한 드래프트 모델로 증가(distills)합니다.soup export: Ollama 및 llama.cpp를 위한 GGUF, 그리고 ONNX 및 TensorRT를 포함한 여러 형식을 지원합니다.
커뮤니티 인사이트: 로컬 LLM의 ROI
이 프로젝트에 대한 논의는 비즈니스 애플리케이션을 위한 작고, 오픈 웨이트(open-weight) 로컬 모델로의 전환을 강조합니다. 커뮤니티 구성원들은 거대한 호스팅된 모델이 헤드라인을 장점하고 있지만, 많은 기업용 사례(예: 지역 은행의 AML 컴플라이언스)는 그 정도의 성능을력을 요구하지 않으며, 미세 조정된 작은 모델로 더 비용 효율적으로 해결할 수 있다고 언급합니다. 이는 현재 LLM 기반 AI 구현이 직면한 "ROI 위기"를를 해결할 수 있는 잠재력이 있습니다.