나는 이 FineTuning을 해봤어요

panwoo·2025년 2월 5일

DeepSeek 때문에 전 세계가 뜨겁다.

빈 수레인지 아닌지 아직은 잘 모르겠지만, 확실한 건 가능성이다.

운이 좋게 '최적화'에 미친 스터디장을 만나 요즘 즐겁게? 공부 중이다.


week2: model training anatomy

2주차 스터디 내용을 요약하면, 모델을 훈련할 때 gpu 메모리 사용량이 예상보다 많이 발생하는 문제가 발생한다.

이에 대한 문제를 연산 구조(computation) 관점과 메모리 사용 요소(memory consumption) 관점에서 분석하고 약간의 해결책을 제시한다.

1. 연산 구조(Computation) 관점

트랜스포머 모델이 사용하는 주요 연산

  1. 텐서 연산 (Tensor Contractions) → 가장 높은 연산량
    • 어텐션(Multi-Head Attention), 행렬 곱셈(Matrix Multiplication)
  2. 통계적 정규화 (Statistical Normalizations) → 중간 연산량
    • Softmax, Layer Normalization
  3. 요소별 연산 (Element-wise Ops) → 가장 낮은 연산량
    • Dropout, 활성화 함수(Activation), 잔차 연결(Residual Connections)

💡 해결책:

  • Mixed Precision Training (fp16) → 연산량과 메모리 절약
  • Flash Attention → 어텐션 연산 최적화

2. 메모리 사용 요소(Memory Consumption) 관점

훈련 시 GPU 메모리를 많이 차지하는 요소들

  1. 모델 가중치 (Model Weights) → 4~6 bytes × #파라미터
  2. 옵티마이저 상태 (Optimizer States) → 8 bytes × #파라미터
  3. 기울기 (Gradients) → 4 bytes × #파라미터
  4. Forward Activations → 배치 크기, 시퀀스 길이, 히든 크기에 따라 달라짐
  5. 임시 메모리 (Temporary Buffers) → 연산 중 생성되는 변수
  6. 기능별 추가 메모리 → 예: 빔 서치(Beam Search) 시 복제된 입력 데이터

💡 해결책:

  • 8-bit AdamW 옵티마이저 → 옵티마이저 메모리 절약
  • Gradient Checkpointing → 활성화 값(Activation) 저장 줄여 메모리 절약
  • Gradient Accumulation → 작은 배치로 학습하며 큰 배치처럼 동작

week3: batch size choice

3주차에서는 배치 사이즈를 다뤘다.

최적의 성능을 내기 위해서는 적절한 배치 사이즈를 설정하는 것이 중요하다.

파고 들수록 너무 방대해서 핵심만 나열하면,
1. 큰 행렬 연산(gemm)이 작은 행렬 연산보다 효율적이다.
2. 너무 작은 배치 크기는 gpu를 충분하게 활용하지 못한다.

모두 병렬연산에 최적화된 gpu의 특성, 그리고 nvidia의 최신 gpu에 내장된 행렬 곱셈 특수 연산 유닛 tensor core과 같은 하드웨어 적인 부분과 관련이 깊다.

이와 관련해서

  1. 배치 크기(Batch Size)와 뉴런 개수(Input/Output)는 2^N 또는 8의 배수로 설정하는 것이 가장 효율적!
  2. 배치 크기가 너무 작으면 GPU 메모리 대역폭 제한으로 성능이 저하될 수 있음. (128 이하 주의!)
  3. Tensor Core 활용을 위해서는 행렬 크기를 특정 배수(8, 64 등)로 맞춰야 함.
  4. 행렬 크기가 타일 크기의 배수가 아닐 경우, 일부 타일에서 불필요한 연산이 발생할 수 있음!
  5. 타일 크기의 배수로 행렬 크기를 맞추면, GPU 연산을 최적화할 수 있음!

이렇게 잔뜩 요약해서 갔지만, 토론 결과는

16의 배수로 맞추자! (a100의 경우 128) 로 간단하게 귀결되었다.

사실 뜯어보면 결국 맞는 말이다...(애시당초 저렇게 설계해두었으니)

다만, 무지성 16의 배수가 아니라 이제는 이런 내부적인 작동 원리들을 통해 이것이 가장 효율적인 배치 사이즈를 결정하는 방법 중 하나라는 것을 알게 된 것이 의미있다.

이것이 가능성 아닐까.

최적화의 가능성 !!

0개의 댓글