[CS336] Lecture2. PyTorch, Resource Accounting

2026. 4. 1. 03:24·LLM

딥러닝 모델을 학습할 때 보통 모델 구조나 성능에 집중하지만, 실제로는 메모리와 연산 자원(resource)이 훨씬 더 중요한 제약 조건이 됩니다. 특히 대규모 모델을 다루게 되면 이 모델이 주어진 자원으로 학습 가능한지 자체가 가장 먼저 해결해야 할 이슈입니다. 이번 글에서는 Stanford CS336 강의를 기반으로, PyTorch 관점에서 딥러닝 학습 시 어떤 요소들이 메모리와 연산량을 결정하는지를 정리해보았습니다. 단순한 개념 설명이 아니라, 실제로 모델을 학습할 때 반드시 알아야 하는 resource accounting 관점에 초점을 맞추려고 합니다.

 

- 딥러닝 학습 = 텐서가 차지하는 메모리 + 그 텐서들에 대해 수행하는 FLOPs 계산
- 학습 전에 메모리·연산량·시간을 계산하는 것 중요

 

- Tensor
    - Memory = 개수 × dtype 크기
    - tensor는 딥러닝의 기본 단위이며 모든 것은 tensor로 표현됨
    - 메모리는 값의 개수와 dtype에 의해 결정됨
    - dtype(float32, bf16 등)는 메모리와 연산 성능에 직접 영향
    - view는 메모리를 공유하고, clone/contiguous는 새로운 메모리를 생성

- dtype: float32, float16, bfloat16(Brain Floating Point), fp8
    - dtype은 각 값이 몇 byte로 저장되는지를 의미
    - float32는 안정적이지만 메모리 사용량이 큼
    - float16, bf16, fp8은 메모리를 줄이지만 정밀도와 안정성 trade-off 존재
    - precision을 낮출수록 메모리와 속도는 좋아지지만 학습 안정성은 떨어질 수 있음
    - 해결 방법은 mixed precision을 사용해 안정성과 효율을 동시에 확보하는 것

- Model
    - 학습 메모리는 파라미터만 있는 것이 아님
    - 학습 시에는 모델 파라미터 외에도 여러 텐서가 더 붙는다는 것이 중요
    - 구성요소: 파라미터, activation, gradient, optimizer state
    - Parameters: 모델 가중치
    - Activations: forward 중간 결과, backward 때 필요해서 저장
    - Gradients: 각 파라미터에 대한 미분값
    - Optimizer states: Adam/AdaGrad 같은 옵티마이저가 들고 있는 추가 통계량

- Optimizer
    - 옵티마이저는 파라미터만 업데이트하는 것이 아님
    - 각 파라미터마다 추가 state(m, v 등)를 저장
    - 따라서 모델이 커질수록 optimizer 메모리도 같이 증가
    - Adam 계열은 특히 메모리를 많이 사용하는 대표적인 경우

- Compute (FLOPs)
    - 딥러닝 연산량은 FLOPs로 측정됨
    - forward보다 backward가 더 많은 연산을 수행
    - 전체 학습 연산량은 대략 forward의 약 3배 수준
    - 학습 시간은 FLOPs와 GPU 성능, MFU에 의해 결정됨

- MFU (Model FLOPs Utilization)
    - GPU의 최대 연산 성능 대비 실제 사용 비율
    - MFU가 낮으면 GPU를 제대로 활용하지 못하는 상태
    - 데이터 이동, 작은 batch, 비효율적인 연산 등이 원인

- Memory Bottleneck
    - 실제 메모리 병목은 파라미터보다 activation에서 발생하는 경우가 많음
    - activation은 layer마다 저장되기 때문에 빠르게 증가
    - batch size, sequence length가 커질수록 메모리 사용량 급증

- Training Loop
    - 흐름: forward → loss → backward → optimizer step → zero_grad
    - forward에서 activation 저장
    - backward에서 gradient 계산
    - optimizer step에서 state 활용
    - 각 단계마다 메모리 사용 패턴이 다름

- Mixed Precision
    - 하나의 dtype만 사용하는 것이 아니라 여러 dtype을 혼합하여 사용
    - forward/activation은 저정밀(fp16/bf16), 파라미터/optimizer는 고정밀(fp32) 유지
    - 메모리 절약과 학습 안정성을 동시에 확보하는 방법

 

 

'LLM' 카테고리의 다른 글

YOLOv10 로컬 실행  (0) 2025.04.06
YOLOv10 모델 구조  (0) 2025.04.06
허깅페이스 모델 로컬 다운로드  (0) 2024.11.27
RRADistill  (1) 2024.11.26
G-Eval Prompt  (0) 2024.02.27
'LLM' 카테고리의 다른 글
  • YOLOv10 로컬 실행
  • YOLOv10 모델 구조
  • 허깅페이스 모델 로컬 다운로드
  • RRADistill
봄프로
봄프로
Data Scientist
  • 봄프로
    To be professional
    봄프로
    • 분류 전체보기 (61) N
      • LLM (17) N
      • Data Science (24)
      • ADP (8)
      • Domain (8)
      • Etc (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

    오블완
    티스토리챌린지
    KBI
    YOLO
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
봄프로
[CS336] Lecture2. PyTorch, Resource Accounting
상단으로

티스토리툴바