Qwen3-4B를 도구 사용 에이전트로 후처리 훈련하고 Mac에서 66 MB llama.cpp LoRA로 구동한 결과: 검증 점수 0.51 →
요약
본 글은 사용자가 직접 개발한 에이전트 'Tadpole'을 Qwen3-4B 모델 기반으로 후처리 훈련(SFT, Expert Iteration)하여 성능을 최적화하는 과정을 다룹니다. 로컬 환경에서 llama.cpp LoRA를 사용하여 구동했음에도 불구하고 높은 검증 점수 향상을 확인했습니다. 특히 계획 도구 사용과 SFT가 에이전트의 추론 능력을 크게 개선한 것으로 분석합니다.
핵심 포인트
- SFT(Supervised Fine-Tuning) 기반의 검증된 궤적 학습이 성능 향상의 가장 큰 성공 요인이었습니다.
- 전문가 반복(Expert iteration)은 높은 성능을 보였으며, 이는 노이즈가 있는 점수 중 최고치일 수 있습니다.
- 계획 도구(`update_plan`)를 사용하자 기본 모델의 검증 세트 성능이 0.507에서 0.646으로 향상되었습니다.
- `llama.cpp` LoRA 구동은 양자화 및 변환 비용을 낮추면서도 높은 성능 유지 가능성을 입증했습니다.
Tadpole은 제가 처음부터 직접 만든 에이전트입니다 (순수 Python으로 약 3,500줄 분량이며, LangChain이나 다른 프레임워크를 사용하지 않았습니다). 이후 측정 단계별로 후처리 훈련을 진행했습니다. 저는 이를 매일 Telegram 봇으로 사용하고 있습니다. 레포지토리: https://github.com/shakewingo/Tadpole
어댑터와 데이터는 HF에 있으며, 로컬에서 훈련된 모델을 실행합니다. 각 어댑터는 llama.cpp LoRA (66 MB) 형태로 Hugging Face에 저장되어 Q8_0 GGUF 위에 로드됩니다:
hf download unsloth/Qwen3-4B-Instruct-2507-GGUF Qwen3-4B-Instruct-2507-Q8_0.gguf --local-dir models
hf download Shakewin/tadpole-qwen3-4b-ei-3 ei-3-lora-f16.gguf --local-dir models
AGENT_MODEL_PATH=models/Qwen3-4B-Instruct-2507-Q8_0.gguf AGENT_LORA_PATH=models/ei-3-lora-f16.gguf
python -m agent_from_scratch.agent
로컬 경로에서도 성능 향상이 유지된다는 것을 확인했습니다: llama.cpp (Q8_0 + LoRA, 단일 시드)를 사용한 144개 작업 검증 세트에서 기본 점수는 0.507, SFT-1은 0.701, SFT-2는 0.750, EI-3은 0.826을 기록했습니다. 같은 어댑터를 vLLM의 bf16으로 사용했을 때도 검증 점수는 각각 0.752와 0.852를 기록하여, 양자화(quantisation) 및 LoRA 변환 비용이 적다는 것을 알 수 있었습니다. 16 GB M5에서 약 8.5 GB의 메모리를 차지하며 모델 호출당 약 2.4초가 소요됩니다.
제외된 결과 (훈련 세트에 포함되지 않은 작업 유형, 작업당 3개 샘플, vLLM bf16):
| 후보 테스트 | 어려운 테스트 | BFCL 다중 턴 |
|---|---|---|
| 기본 (Base) | 0.419 | 0.275 |
| SFT-1: 검증된 교사 궤적 + When2Call + Toucan | 0.774 | 0.429 |
| SFT-2: 다중 턴 시연 추가 | 0.738 | 0.492 |
| EI-3: SFT-2 + 전문가 반복 3라운드 | 0.745 | 0.471 |
- BFCL의 다중 턴 기본 카테고리를 로컬로 적용한 것이며, 리더보드 점수는 아닙니다.
제가 배운 것들:
-
검증된 궤적에 대한 SFT가 가장 큰 성공 요인이었습니다. '저는 끝났습니다'라는 거짓 주장은 420회 실행 중 31회에서 1회로 감소했습니다.
-
전문가 반복(Expert iteration)은 검증 세트에서 매우 좋은 성능을 보였고 (0.752 → 0.852), 제외된 테스트에서도 시작점과 비슷한 수준이었습니다. 여러 개의 노이즈가 있는 검증 점수 중 가장 높은 값은 상향 편향되는 경향이 있습니다.
-
GRPO는 모든 동등한 역할 수행 예산(equal rollout budget)에서 전문가 반복에 패배했습니다: 4B 모델의 경우, 단계당 너무 적은 작업으로 인해 통과하는 샘플과 실패하는 샘플을 모두 확보하기 어려웠습니다.
-
계획 도구(
update_plan과 알림 기능 추가)를 사용하자 기본(base) 모델의 성능이 검증 세트(val)에서 0.507에서 0.646으로 향상되었습니다. -
llama.cpp는 존재하지 않는 LoRA 경로를 무심하게 받아들이고 첫 디코드(decode) 과정에서 세그멘테이션 오류(segfault)가 발생합니다. 저는 이 문제를 해결하기 위해 launchd 환경에서 제 봇을 반복적으로 실행했고, 결국 시작 시 누락된 어댑터(missing adapter)를 거부하도록 만들었습니다. 솔직히 말하자면: 이 벤치마크는 학습 데이터와 유사한 생성된 작업들로 이루어져 있습니다. 일상적인 사용 환경에서 미세 조정된 4B 모델은 여전히 개방형 요청(open-ended requests)에 취약하여, 제 봇은 매일 DeepSeek으로 구동되며, 이 4B 모델은 제가 연구하고 훈련시키는 대상입니다. README 파일에 처음에 명시되어 있습니다. 모든 후처리 훈련 비용은 임대 GPU로 약 $140이 들었습니다. 워크스루 노트북은 Colab에서 열리며, GPU 없이 기록된 샘플에 대한 SFT(Supervised Fine-Tuning), 전문가 반복(expert iteration), 그리고 GRPO를 보여줍니다. 확인해 보시고 어떤 피드백이라도 환영합니다!! 제출자: /u/DesignerIsland5524 [링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기