C.W.K.
Stream
Lesson 03 of 06 · published

Training config — learning rate, rank, epoch, 어떤 레버가 뭘 하나

~16 min · training, hyperparameters, lora-rank

Level 0Curious
0 XP0/51 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

항상 만질 다섯 노브

mlx_lm.lora 가 긴 CLI flag 리스트 노출하지만, fine-tuning run 의 90% 엔 한 줌만 조정. 이 다섯 외워 — 의미가 뭔지, 기본값이 어떤지, 각각이 병목인 때 — 그러면 분 단위로 의미 있는 fine-tuning 실험 돌릴 수 있어.

  1. --num-layers — 모델의 transformer layer 중 몇 개에 LoRA adapter 붙이는지. 기본 16. -1 설정이 모든 layer 에 LoRA 붙임 (더 많은 capacity, 더 많은 메모리). 높은 게 더 유연; 낮은 게 더 빠르고 싸.
  2. --learning-rate — Adam learning rate. 기본은 sane (7B base 의 Adam 에 약 1e-5); 작은 데이터셋에서 더 빠른 수렴 위해 올리고, loss 불안정하면 낮춰. 가장 흔한 실수는 데이터셋 작을 때 기본값에 두는 것.
  3. --batch-size — step 당 예제 수의 minibatch 크기. 높은 게 더 안정적 gradient 지만 더 많은 메모리. 낮은 게 더 적은 메모리와 noisier gradient. 32 GB Mac 의 7B base 에선 batch size 4-16 이 전형.
  4. --iters — 총 학습 step. 200-500 예제 데이터셋엔 100-500 iter 가 합리적 시작 범위. 검증 loss 봐; 개선 멈추면 멈춰.
  5. --max-seq-length — 이보다 긴 학습 예제 truncate. 메모리에 큰 영향 (KV cache 가 이걸로 scale). 가장 긴 예상 예제 바로 위에 설정 — truncation 손실과 메모리 낭비 둘 다 피하려고.

Fine-tune-type 노브 — 한 번 고르고 무시

--fine-tune-typelora (기본), dora (DoRA — lesson 4 봐), full (full fine-tuning, 7B+ 모델에 Mac 에서 거의 절대 맞는 호출 아님) 사이 고름.

복사할 수 있는 sane 기본

7B base instruct 모델, 200-예제 도메인 데이터셋, 32 GB Mac 에:

  • --num-layers 16
  • --learning-rate 5e-5 (작은 데이터셋 위해 기본에서 올림)
  • --batch-size 4
  • --iters 200
  • --max-seq-length 2048 (예제 더 짧으면 더 짧게)
  • --steps-per-eval 25 (25 step 마다 val loss)
  • --save-every 100 (100 step 마다 checkpoint)

Iter 가 아니라 loss 봐

맞는 iteration 수는 숫자가 아냐; 검증 loss 가 개선 멈추게 하는 무엇이든의 카운트. mlx-lm 이 간격으로 학습과 검증 loss 둘 다 보고 — 학습 loss 가 계속 떨어지는데 검증 loss 가 plateau 되거나 오르기 시작하면 overfitting 시작. 거기서 멈춰. --save-every 플래그가 roll back 할 checkpoint 갖는다는 뜻.

Code

Sane-기본 LoRA 학습 명령 (주석 달림)·bash
python -m mlx_lm lora \
  --model mlx-community/Mistral-7B-Instruct-v0.3-4bit \
  --train \
  --data ./my-data \
  --fine-tune-type lora \
  --num-layers 16 \
  --batch-size 4 \
  --iters 200 \
  --learning-rate 5e-5 \
  --max-seq-length 2048 \
  --steps-per-report 10 \
  --steps-per-eval 25 \
  --save-every 100 \
  --adapter-path ./my-adapter

# Output during training:
#   Iter 10: Train loss 1.832, Learning Rate 5.000e-05, ...
#   Iter 25: Val loss 1.523, ...
#   Iter 100: Saving checkpoint ./my-adapter/0000100_adapters.safetensors
#   ...
반복 가능 run 위해 YAML config 파일 사용·yaml
# my-lora.yaml — one source of truth for a fine-tune run
model: "mlx-community/Mistral-7B-Instruct-v0.3-4bit"
train: true
data: "./my-data"
fine_tune_type: "lora"
num_layers: 16
batch_size: 4
iters: 200
learning_rate: 5e-5
max_seq_length: 2048
steps_per_report: 10
steps_per_eval: 25
save_every: 100
adapter_path: "./my-adapter"
seed: 42

# Then pass with -c:
#   python -m mlx_lm lora -c my-lora.yaml

External links

Exercise

위 YAML config 가져와, 데이터셋에 맞게 조정 (data 설정, 빠른 run 위해 iters 50 으로 낮춤, max_seq_length 가장 긴 예제에 fit 되게 설정), 그리고 python -m mlx_lm lora -c my-lora.yaml 로 학습 run 시작. 보고서의 train 과 val loss 숫자 봐. Val loss 개선 멈추면 (또는 iters 완료 후) run 멈춤. Val loss 가 바닥 친 iteration 카운트 알아채 — 그게 이 데이터셋의 효과 학습 예산.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.