본문 바로가기

dev_AI_framework

어느 환경에서 학습 시 매 번 새로운 graph 가 생성될까

대부분의 일반 모델 학습에서는

실제로 그래프 구조가 iteration 마다 크게 달라지지 않음,

대부분 iteration 에서 동일한 형태의 dynamic graph 가 반복 생성되는 것

단순히 새로 생성되는 것 뿐이지, 구조적으로는 거의 동일한 형태

그래프 caching 에 관심, autograd 특성 때문에 정식 지원 확장 불가능

 

하지만 특정 모델 / 훈련 패턴에서는

구조가 iteration 마다 바뀌는 경우도 존재

  • NLP generation
  • Mixture-of-Experts
  • Dynamic routing network
  • Early-exit network
  • 조건 기반 loss switching
  • RL / 시뮬레이션 기반 모델
  • variable - length input
  • variable - length decoding
  • dropout / masking / random augmentation
  • if loss > x :auxiliary loss 추가 같은 조건부 branch

이 경우 그래프의 경로 자체가 달라진다.

일반적인 CNN 학습 vs 현대적인 LLM / Multimodal 학습은 완전히 다름

 

1. 일반적인 학습 반복에서는 왜 그래프가 거의 동일한가?

이유 1: 대부분의 네트워크는 explicit control-flow 가 없다

ResNet, VGG, U-Net, ViT 이런 순차적 네트워크는

for epoch...
  for batch...
    y = model(x)
    loss = criterion(y, target)
    loss.backward()
  • 조건 분기 없음
  • 반복을 Python loop 가 담당
  • forward pass 는 항상 같은 구조
  • bacnkward pass 도 항상 같은 구조

그래서 PyTorch autograd graph 는 매 iteration 마다 새로 생성되지만 구조 자체는 거의 동일하다.

재생성은 하지만 구조적 변화는 거의 없음

 

2. 그럼 왜 같은 그래프를 매번 다시 생성할까?

PyTorch 는

  • operation 이 실행되면 즉시 grad_fn 만들고
  • 메모리에 쌓고
  • backward 끝나면 버린다.

즉,

PyTorch 의 dynamic graph 는 구조 최적화를 위한 것이 아니라, 실행된 ops 를 자동으로 기록하기 위한 메커니즘

그래서 구조가 동일하더라도 autograd tape 는 매번 다시 생성됨

각 iteration 마다 텐서 포인터, 버퍼 주소, 중간 gradient, requires_grad 상태가 다 다르기 때문

구조가 같다고 해도 같은 tape 를 재사용하는 것은 불가능한 구조이다.

 

3. 그래프가 실제로 자주 달라지는 경우

1)NLP generation / transformer decoder

시퀀스 길이에 따라 자연스럽게 구조가 iteration 마다 다름

2) Mixture-of-Experts (MoE)

router 가 선택한 export 에 따라 forward 경로가 매번 바뀜

3) RL / 시뮬레이션 / online learning

4) variable-length input / masking

5) Early Exit / branch-based network