본문으로 건너뛰기

© 2026 Molayo

Reddit요약2026. 05. 01. 13:25

Gemma 3 270M 에 대한 LoRA 를 제작하여 아마도 가장 작은 사고 모델 (Thinking Model) 을 만들었습니다

요약

작성자는 Gemma 3 270M 모델을 기반으로 LoRA를 적용하여 '사고(Thinking)' 기능을 갖춘 소형 언어 모델을 성공적으로 개발했습니다. 이 모델은 단순히 응답하는 것을 넘어, 추론 과정을 명시적으로 보여주는 구조를 채택하고 있습니다. 학습 과정에서는 커스텀 손실 함수와 제한된 VRAM 환경에서의 최적화 기법 등을 활용하여 기술적인 난관들을 극복한 것이 특징입니다.

핵심 포인트

  • Gemma 3 270M에 LoRA를 적용하여 '사고(Thinking)' 기능을 갖춘 소형 모델을 구현했습니다.
  • 모델 출력 형식을 `==================== THINKING ===================`와 같이 명확하게 구조화하여 추론 과정을 보여줍니다.
  • 학습 과정에서 커스텀 손실 함수, 낮은 배치 크기 및 그래디언트 누적 단계를 활용하는 등 VRAM 제약 환경에서의 최적화 기법을 적용했습니다.
  • Function Calling과 연계된 '사고(Thinking)' 어댑터 개발에 초점을 맞추어 모델의 추론 능력을 향상시키고자 합니다.

https://huggingface.co/firstbober/gemma-3-270M-it-smol-thinker

다음은 출력의 예시입니다:

==================== THINKING ====================
Here is the thinking process:

- This is a large community with a wide range of interests
- Users can ask questions, share experiences, and discuss local events
- The rules are generally open-ended and allow for creativity
- However, the rules may be unclear or incomplete
<|thinking_end|>

==================== RESPONSE ====================

r/LocalLLaMA 는 대규모 오픈소스 질문 및 답변용 서브레딧입니다. 규칙은 일반적으로 개방형으로 사용자들이 질문을 하고 경험을 공유할 수 있도록 허용합니다. 그러나 커뮤니티의 현재 상태에 따라 규칙이 불명확하거나 불완전할 수 있습니다.

<|response_end|>

내장된 지식이 많지는 않지만 프롬프팅을 통해 흥미로운 결과를 얻을 수 있습니다.

배경 (Lore):

저는 며칠 동안 이 작업을 진행해 왔습니다. 먼저 FunctionGemma 를 사용하지 않고 로컬에서 함수 호출 (function calling) 을 위해 적응시키려 했습니다. 그것이 작동하자 (거의) 사고 (thinking) 기능을 추가하기로 결정했습니다. 데이터셋은 절차적 생성 (procedurally generated) + Qwen 3.6 35B A3B (Q4 quants) + GLM 5.1 일부로 구성되었습니다.

가장 큰 장애물은 형식을 유지하는 방법을 찾는 것이었습니다. 저는 랭크 24, 학습 데이터 최대 길이 768, 그리고 태그를 제대로 사용하지 않을 경우 손실 (loss) 을 20 배 증가시키는 커스텀 손실 함수를 채택했습니다. 그 결과 손실이 약 7 수준으로 머뭇거렸지만 효과는 있었습니다.

더 긴 예시를 추가하고 싶었지만, 내 RTX 3050 4GB Mobile 이 조금 부족했습니다. 학습 배치 크기 (train batch size) 를 1 로, 그래디언트 누적 단계 (gradient accumulation step) 를 2 로 설정한 것이 제가 할 수 있는 최선입니다.

또 다른 흥미로운 점은 Claude/Gemini 가 더 큰 gradient_accumulation_steps 는 실제로 배치 크기를 증가시키지 않으면서 사실상 더 큰 배치 크기와 동일한 효과를 준다고 말한다는 것입니다. 이는 저의 모든 고민 중 약 40% 를 차지했습니다. 모델이 완전히 엉뚱한 내용과 무작위 중국어 슬롭 문자 (random chinese slop characters) 를 뱉을 때였습니다.

글쎄, 여기까지입니다. 관련 학습 파라미터는 다음과 같습니다:

SFTConfig:

per_device_train_batch_size=1,
gradient_accumulation_steps=2,
per_device_eval_batch_size=1,
learning_rate=1e-4,
lr_scheduler_type="cosine",
warmup_ratio=0.10,
weight_decay = 0.1,
load_best_model_at_end=True,

LoraConfig:

n_rank = 24
r=n_rank,
lora_alpha=n_rank,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
lora_dropout=0.15,
task_type="CAUSAL_LM",  

아, 랭크의 2 배인 알파 (alpha) 를 논문에서 권장하는 대로 증가시키면 모든 것이 망가졌습니다. 이것도 꽤 당황스러웠던 부분 중 하나입니다.

저는 계속 진행하여 다른 아이디어로 더 많은 어댑터 (adapters) 를 훈련할 계획입니다. 아마도 충분한 VRAM 을 가진 카드를 구매하면 Qwen 3.5 0.8B 으로 전환할지도 모릅니다. 저는 잘 모르겠습니다. 확실히 할 일은 FunctionGemma 를 위한 사고 (thinking) 어댑터를 만드는 것입니다. 이는 저의 함수 호출 문제를 어느 정도 해결해 줄 것입니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
4

댓글

0