SFTConfig (Supervised Fine-Tuning Config)의 max_grad_norm

Soogyung Gwon·2026년 5월 28일

구름을잡아라

목록 보기
63/76

max_grad_norm 은 Gradient Clipping의 정도를 정한다.

동작 방식

만약 max_grad_norm = 0.3 이라면

역전파(backpropagation) 후 계산된 전체 gradient의 L2 norm을 구한다.

  • gradient norm <= 0.3 -> 그대로 사용
  • gradient norm > 0.3 -> 전체 gradient 를 비율에 맞게 축소

예)

  • 현재 gradient norm = 1.5
  • max_grad_norm = 0.3

일때,

scale factor = 0.3/1.5 = 0.2

가 되어 모든 gradient 값이 20% 크기로 줄어든다.

사용하는 이유

학습 중에 gradient가 갑자기 커지는 Gradient Explosion 현상을 방지하기 위해서

  • LLM 파인튜닝
  • LoRA 학습
  • 작은 데이터셋 학습
  • 높은 learning rate 사용

등에서 학습을 안정화하는 데 사용

0.3은 큰 값일까 작은 값일까?

특징
1.0가장 흔함
0.5조금 보수적
0.3꽤 강한 clipping
0.1매우 강한 clipping

너무 작게 설정 (예를 들어 0.01) 하면 대부분의 step에서 graident가 잘려버릴 수 있다.
그렇게 되면 결과적으로 학습 속도가 느려지고, loss 감소가 잘 되지 않으며 underfitting 가능성이 증가할 여지가 있다.

예를 들어 위의 예에서 모든 gradient가 20% 크기로 줄어들어 20%만 사용하게 된다.
만약 max_grad_norm 값이 0.01이라고 하면

scale factor = 0.01/1.5 = 0.00666....

모든 gradient가 0.6%의 크기만 사용되게 되므로 대부분의 gradient가 잘려나간 것이 된다.

grad = 0.3 처리를 하지 않는 이유

if grad > 0.3:
grad = 0.3

위와 같이 할 수 있다고 생각할 수 있으나 이렇게 해버리는 경우에는 방향이 바뀌게 되기 때문에 Gradient Clipping은 방향은 유지하고 크기만 줄인다.(gradient norm이 0.3 을 초과할 때만 축소)

LoRA, QLoRA에서 0.3이 자주 쓰이는 이유

LoRA는 전체 파라미터를 업데이트 하는 것이 아니라, 작은 행렬만 학습하는 것이므로 gradient가 상대적으로 불안정하게 튈 수 있기 때문에 max_grad_norm을 설정한다.

0.3은 자주 사용되는 값으로 SFTTrainer, QLoRA, Axolotl, LLaMA-Factory 설정들에서 자주 볼 수 있다,

profile
오랜시간 망설였던 코딩을 다시 해보려고 노력하고 있는 사람

0개의 댓글