분산 LLM 학습 12 - GPipe, 1F1B, Interleaving: Pipeline Schedule은 어떻게 고르는가
pipeline parallel의 효율은 레이어 분할보다 schedule 선택에 더 크게 흔들릴 때가 많다
stage를 나눴다고 pipeline이 완성되는 것은 아니다
pipeline parallel에서 실제 체감 성능은 schedule에 크게 좌우된다. 어떤 순서로 forward와 backward를 흘릴지에 따라 bubble 크기, activation 저장량, 구현 난이도가 달라진다.
GPipe의 직관
GPipe 스타일은 여러 micro-batch의 forward를 먼저 흘리고, 그 뒤 backward를 수행하는 방식으로 이해할 수 있다. 개념은 단순하지만 activation을 오래 저장해야 하므로 메모리 부담이 커질 수 있다.
장점:
- 개념이 비교적 단순하다
- stage 흐름을 이해하기 쉽다
단점:
- activation 저장 비용이 크다
- 긴 pipeline에서는 메모리 압박이 커진다
1F1B가 많이 쓰이는 이유
1F1B(one-forward-one-backward)는 warmup 이후 각 stage가 forward와 backward를 번갈아 수행하도록 만들어 activation 체류 시간을 줄인다. 실무에서 자주 언급되는 이유가 여기에 있다.
즉 1F1B는:
- 메모리 사용량을 더 현실적으로 관리하고
- pipeline utilization을 개선할 수 있다
하지만 scheduler 구현과 디버깅은 더 복잡해진다.
interleaving은 왜 나오는가
stage 내부를 다시 virtual stage로 쪼개 interleaving하면 bubble을 더 줄일 수 있다. 대신 스케줄링과 통신 패턴이 더 복잡해진다. 즉 효율을 더 뽑는 대신 운영 난이도를 올리는 선택이다.
어떤 기준으로 고를까
- 메모리가 가장 큰 문제인가
- bubble이 너무 큰가
- stage 수가 많아질수록 idle time이 심해지는가
- 구현 복잡성을 감당할 수 있는가
대부분의 실무 판단은 이 네 질문 사이의 균형이다.
pipeline을 보는 더 현실적인 관점
pipeline schedule은 수학적인 최적화 문제이기도 하지만, 운영 가능한 학습 시스템을 만드는 문제이기도 하다. 장애가 났을 때 어떤 micro-batch가 어디 있었는지, checkpoint는 어느 타이밍에 잡을지까지 연결되기 때문이다.
다음 글에서는 activation checkpointing과 recomputation을 본다. pipeline, tensor parallel, 긴 context가 만나면 activation 메모리를 어떻게 줄일지 반드시 고민하게 된다.