LazyDecider: 잠자는 동안 오픈 가중치 에이전트에게 모델 미세 조정을 가르쳤습니다
요약
'LazyDecider'는 사용자가 수면 중에도 오픈 가중치 에이전트가 의사 결정 모델의 하이퍼파라미터 탐색 및 미세 조정을 자율적으로 수행하는 시스템입니다. 이 시스템은 Gemma 4 E4B와 ASHA 프루너를 활용하여 최적의 학습 구성을 찾아내고, 고정된 테스트 세트에서 성능을 검증합니다. 이를 통해 사용자는 복잡한 하이퍼파라미터 관리 과정 없이도 모델 개선 결과를 쉽게 확인할 수 있습니다.
핵심 포인트
- 에이전트가 하이퍼파라미터 탐색 과정을 자동화하여 관리할 필요를 없앴습니다.
- Gemma 4 E4B와 ASHA 프루너를 활용해 야간 미세 조정 실험을 수행합니다.
- 최고 기록 경신 시에만 학습 구성을 유지하고, 그렇지 않으면 이전 상태로 되돌아갑니다.
- 봉인된 테스트 세트에서 0.770 정확도와 낮은 KL-from-gold 값(0.094)을 달성했습니다.
_이 글은 Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady에 제출하는 내용입니다.

제가 구축한 것
저는 엔지니어들이 게으른 특정한 방식으로 게으릅니다. 10분밖에 걸리지 않는 작업을 다시는 하지 않아도 된다면, 기꺼이 일주일 동안 자동화하는 데 시간을 보낼 것입니다. 여기서 10분짜리 작업은 **하이퍼파라미터 관리(hyperparameter babysitting)**입니다. 학습률을 변경하고, 실행을 시작하고, 손실 곡선을 응시하며, LoRA rank를 변경하고, 모델이 좋을 때나 책상에 잠들 때까지 반복하는 것입니다.
그래서 저는 이 과정을 뒤집었습니다. LazyDecider는 제가 자는 동안 의사 결정 모델(decision model)을 미세 조정하는 작은 야간 실험실입니다. **로컬 오픈 가중치 에이전트 (Gemma 4 E4B)**가 실험 로그를 읽고, 한 줄의 이유와 함께 하나의 학습 구성(training config)을 제안하며, ASHA 프루너가 이를 훈련시키고 손실이 발생하면 일찍 중단합니다. 그리고 그 실행은 고정된 분할 세트(frozen split)에서 현재 최고 기록을 경신했을 경우에만 유지되고, 그렇지 않으면 이전 상태로 되돌아갑니다. 아침에는 우승작이 한 번 재훈련되어 봉인된(sealed) 테스트 세트에서 점수를 매기고, Tinker 실행으로 이 레시피가 더 큰 모델에도 전이되는지 확인합니다.
절약되는 노력: 저는 다시는 하이퍼파라미터 탐색 작업(hyperparameter sweep)을 관리할 필요가 없습니다. 일어나서 REPORT.md를 열고, 에이전트가 무엇을 시도했는지, 왜 그랬는지, 그리고 어떤 구성이 승리했는지 읽기만 하면 됩니다. 이는 클라우드 미터기가 밤새 돌아가는 비용 없이, 노트북으로 약 $0의 비용으로 가능합니다.
결과: 자율적으로 찾아낸 0.8B 의사 결정 모델은 봉인된 테스트 세트에서 **0.770 정확도(accuracy)**와 매우 낮은 KL-from-gold 값 0.094를 기록했습니다. 이 지표는 이 벤치마크에서 실제로 중요한 지표이며, 가장 강력하게 훈련된 도메인은 인보이스 처리 분야에서 0.840을 기록했습니다.
| 모델 | 역할 | 정확도 ↑ | KL from gold ↓ | Brier ↓ | ECE ↓ |
|---|---|---|---|---|---|
| Prior / Uniform | 참고 값 | ~0.470 | — | — | — |
| ... |
데모
LazyDecider를 확인하는 방법은 '단순히 보기'부터 '작동하는 것을 지켜보기'까지 두 가지가 있습니다:
1. 인터랙티브 UI — 나이트 대시보드 (Render에 호스팅): https://lazydecider-demo.onrender.com
커밋된 로그에서 추출한 실제 밤샘 실행을 재생하는 정적 웹 페이지입니다: Gemma의 설정 제안 및 한 줄 요약 이유, ASHA의 유지/폐기(keep/revert) 결정, 학습 곡선 및 결과 차트, 그리고 봉인 테스트(sealed-test) 표가 포함됩니다. 조작된 내용은 전혀 없으며 — 실제 실험 로그를 읽어옵니다.
2. 워크스루 비디오 (~3.5분, 내레이션): 가이드 투어입니다 — 과제와 모델, ASHA의 유지/폐기 호출과 함께 Gemma가 제안한 정확한 설정들, '속일 수 없는(can't cheat)' 안전장치(guardrails), 그리고 모든 봉인 테스트 숫자가 담겨 있으며 — 실제 0.8B 모델이 세 개의 인보이스에 대해 구동되는 실시간 플레이그라운드 피날레로 끝납니다: 정상 일치는 approve · 83%를 반환하고, 과다 청구된 사례는 review를 위해 플래그가 지정되며, 납품 부족 사례는 manual review를 반환합니다.
코드
GitHub logo rahuls321 / autoresearch-finetune-lab
LazyDecider — 오픈 가중치 에이전트가 노트북에서 밤샘 동안 의사 결정 모델을 미세 조정합니다; ASHA는 가지치기하고, Tinker가 확인합니다.
lazylab

사용자가 잠자는 동안 작은 **의사 결정 모델(decision model)**을 위한 LocalLLaMA/typed-decisions 벤치마크에 미세 조정하는 밤샘 실험실입니다. **로컬, 오픈 가중치 에이전트(Gemma 4 E4B)**가 하이퍼파라미터 설정을 제안하고, 결정론적 ASHA 규칙이 도중에 실패한 실행을 제거하며, 승리한 모델은 한 번 재훈련되어 봉인된(sealed) 테스트 세트에서 점수를 받고, Tinker 실행이 더 큰 모델에서 해당 레시피를 확인합니다. 수동 조정은 없습니다.
DEV Hacktoberfest 2026 Week 3("느리고 꾸준하게")을 위해 제작되었습니다. 태그: #devchallenge #hf26challenge.
- 모델:
rahulkumar0612/lazydecider-0.8b—unsloth/Qwen3.5-0.8B에 Clef joint decision head를 결합하고 LoRA fine-tuning을 적용했습니다. - 실시간 데모: https://lazydecider-demo.onrender.com — 밤새 실행된 대시보드 (소스는
web/참조).
참고: GitHub 저장소 (
rahuls321)와 Hugging Face 모델 (rahulkumar0612) 모두 제가 소유한 것입니다 — 같은 작성자가 두 플랫폼에 걸쳐 작업했습니다.
결과 (봉인된 테스트, 2,000개 결정)
| Model | How | Accuracy | KL↓ | Brier↓ | ECE↓ |
|---|---|---|---|---|---|
| Uniform / Prior | no model | ~0.47 | 0.35–0.44 | 0.19–0.24 | — |
| ... | |||||
| … |
튜닝된 모델은 Hugging Face에 게시되었으며 실행 가능합니다 —
rahulkumar0612/lazydecider-0.8b (open weights이며, 모델 카드와 봉인된 테스트 평가 결과가 포함되어 있습니다). .eval_results YAML 파일은 병합되었기 때문에 Hugging Face의 크롤러가 재색인하면 typed-decisions 리더보드에 표시될 것입니다. 이를 다운로드하거나, 오프라인에서 실행하거나, 레시피를 포크(fork)하세요.
몇 가지 명령어로 파이프라인을 재현할 수 있습니다 (전체 버전은 README 참고):
uv venv --python 3.12 .venv
uv pip install --python .venv/bin/python datasets unsloth tinker
.venv/bin/python src/prepare_data.py # 다운로드, 봉인, 분할
...
제가 구축한 방법
두 오픈 파트너가 핵심 작업을 수행했으며, 이는 의도된 바입니다:
- Gemma 4 E4B는 연구원 역할을 합니다. 이 모델은 로컬 MLX 서버(LM Studio / Bionic, MLX-4bit)를 통해 제 노트북에서 구동되며 — 완전 오프라인이고 호출당 비용이 들지 않으며 — 다음에 무엇을 시도해야 할지에 대해 진정으로 추론합니다. 다음은 실제 로그(
source:gemma)에서 가져온 문자 그대로의 한 줄 이유들입니다:- run 1 (유지): "Soft targets에 코사인 스케줄과 제로 레이블 스무딩을 적용하여 표준적인 빠른 헤드 전용 기준선을 구축합니다."
- run 2 (유지): "백본(backbone)에 LoRA 미세 조정을 활성화하여 적응된 인코더 표현이 헤드 전용 기준선보다 개선되는지 확인합니다."
- run 3 (되돌림): "높은 정확도를 유지하면서 보정(calibration)을 개선하기 위해 비동결 백본에 레이블 스무딩과 증가된 가중치 감쇠를 도입합니다."
Run 2 — LoRA를 사용하여 백본을 동결 해제하라는 Gemma의 제안 — 로스 값을 1.04에서 0.84로 떨어뜨렸는데, 이는 그날 밤 가장 큰 폭의 하락이었습니다. Run 3~5는 보정을 추구하며 근접했지만 결국 되돌려졌습니다. 이러한 유지 또는 되돌리기(keep-or-revert) 규율이야말로 단순한 탐색과 무작위 산책을 가르는 차이점입니다.
- Tinker (Thinking Machines)는 독립 심판관 역할을 합니다. 이 모델은 클라우드에서 더 큰
Qwen3.5-4B를 LoRA로 미세 조정하며, 엄격한 달러 한도 내에서 작동하고 동일한 봉인된 테스트에 대해 재점수화합니다 — 이는 제로샷(zero-shot) 기준선(0.601 대 0.483) 대비 명확히 향상된 수치입니다. 다른 모델, 다른 하드웨어, 동일한 자(ruler): 이 파이프라인이 스스로를 속이고 있지 않다는 증거입니다. - 기본 모델은
unsloth/Qwen3.5-0.8B와 Clef 공동 결정 헤드(joint-decision head)이며, Unsloth로 LoRA 미세 조정되었습니다. 라이브 데모 UI는 Render에 호스팅된 종속성 없는 정적 웹사이트입니다.
‘속임수 부릴 수 없는(can't cheat)’ 부분. 초기에 가드레일(guardrails)이 도입되기 전, 이 루프는 '훌륭한' 설정값을 의심스러울 정도로 빠르게 찾아냈습니다. 너무 작은 검증 서브샘플(validation subsample) 덕분에 운 좋은 실행 결과가 마치 승리처럼 보이게 했습니다. 에이전트가 속인 것이 아니라, 제가 제공한 개수를 최적화하고 있었던 것입니다. 자율적인 튜닝에서 얻은 교훈은 다음과 같습니다: 당신의 에이전트는 당신의 의도(intent)가 아닌, 당신의 지표(metric)를 최적화할 것이다. 그래서 저는 이를 잠가버렸습니다: 테스트 세트(test set)는 봉인됩니다 (오직 SHA-256 값만 커밋되며, 워커는 실제로 케이스 내용을 읽을 수 없습니다), 스코어러는 데이터세트의 채점 산술을 문자 그대로 복사하며, 워커는 자유로운 로컬 루프가 돈을 쓰지 못하도록 환경 변수에서 TINKER_*를 제거하고, 최종 후보들의 설정값은 단 한 번의 봉인된 읽기 작업 전에 반드시 git에 커밋됩니다.
오픈 혁신(Open Innovation)이 중요한 이유
이 모든 것이 작동하는 이유는 조각들이 모두 공개적이기 때문입니다:
- 에이전트와 모델 모두가 오픈 가중치(open weights)이기 때문에, 전체 실험실이 노트북 하나로 돌아갑니다. 모든 제안 — 그리고 모델이 JSON을 처리하지 못했을 때의 재시도까지 — 는 무료 로컬 추론 호출(free local inference call)이며, 따라서 밤새 검색을 실행하는 비용은 정확히 0원입니다. 클라우드 API를 사용했다면 이는 월별 청구서로 변했을 것입니다.
- 결과 모델은 당신의 것입니다. 저는 이를 Hugging Face(
rahulkumar0612/lazydecider-0.8b)에 올렸습니다. 오프라인으로 실행하고, 검사하고, 레시피를 포크하세요. 아무것도 다른 사람의 엔드포인트 뒤에 갇혀 있지 않습니다. - 오픈 가중치는 가드레일을 **감사 가능(auditable)**하게 만듭니다. '속임수 부릴 수 없다'는 주장은 누구나 봉인 로직과 스코어러를 읽고 직접 확인할 수 있을 때만 신뢰성을 갖습니다.
폐쇄형 API로는 이 세 가지 모두를 제공할 수 없었습니다: 무료로 무제한 밤샘 추론, 제가 완전히 소유하고 오프라인에서 실행할 수 있는 모델, 그리고 누구나 무결성을 검증할 수 있는 파이프라인입니다.
게으른 보상(The Lazy Payoff)
저는 일어나서 REPORT.md를 열고 Gemma가 무엇을 시도했고, 왜 했는지, 어떤 설정값이 승리했는지를 읽습니다. 그런 다음 한 명령으로 재훈련하고 Tinker가 이를 확인합니다. 제가 자동화한 10분짜리 작업(하이퍼파라미터 스윕 돌보기)? 저는 다시는 하지 않을 겁니다. 그것은 제가 자는 동안, 무료로, 제 노트북에서 일어납니다.
수상 부문
- Render 활용 최우수: 라이브 데모 UI가 정적 사이트로 Render에 호스팅되었으며, 빌드 설정 없이
render.yaml에서 바로 배포되었습니다: [https://lazydecider-demo.onrender.com] - Gemma 활용 최우수: Gemma 4 E4B가 자율 연구원으로서 모든 설정을 로컬에서 무료로 제안하며, 실제적이고 논리적인 실험 로그를 남겼습니다.
- Tinker 활용 최우수: 달러 제한이 걸린
Qwen3.5-4BLoRA 확인 실행으로, 제로샷 기준선(0.601 대 0.483)보다 명확하게 높은 성능을 보였으며 레시피를 독립적으로 검증했습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기