PP -> layer 단위로 모델을 쪼개서 적당히 컴퓨팅 자원을 나눠서 분산 학습을 하자.
layer로 나눠봤자, layer별로 종속성이 있어서 분산 학습을 하는게 의미가 있을까 싶은데, batch로 쪼개고 학습한다고 생각하면 아이디어를 얻을 수 있다.
높은 Machine으로 갈 때마다 다음 layer로 생각하면 편하다. 이렇게 하면 layer끼리의 종속성도 해결하고, forward pass와 backward pass의 순서도 맞춰지면서 분산 컴퓨팅의 효과를 볼 수 있다.
세부적인 구현 방식인 Weight Stashing / Vertical Sync에 대해 생각해보자.
(둘 다 옛날 방식이라 요즘엔 안 쓴다고 한다.)
scheduling의 관점에서는 위의 그림이 최적이다. 저걸 잘 구현해야 하는데, 순차적이지 않은 Weight를 계속해서 참조하고 업데이트 해야되기 때문이다.
예시로 Machine 1을 보면, 5번의 forward를 할때는 1번 batch만 update가 된 상태에서 시작하는데, machine 2에서는 1번과 2번 backword update가 시작된 상태에서 시작하게 된다.
이렇게 machine(layer) 마다 우리가 참조하고자 하는 Weight와 다른 시점의 Weight를 참조하게 되는 일이 일어나게 되면, 단순히 정확도에서만 문제가 아니라 수렴성에 영향을 끼칠 수가 있다.
각 스테이지 (layer)마다 가중치가 최신 상태로 업데이트 되는 빈도가 다르기 때문에 학습을 영향을 주게 된다.
결론적으로 naive하게 PipleLine을 나누기에는 문제가 있다.
이를 고전적인 방법들이다.
구글링 하다가 아래 블로그 나와서 이해했다. 논문 보고 잘 이해가 안되는데 감사했다.
PipeDream: Fast and Efficient Pipeline Parallel DNN Training
1F1B 알고리즘을 통해 유휴시간 없는 파이프라인 병렬화 [Github] [arXiv](Current version v1) Abstract DNN에서 파이프라인 병렬화 training system인 PipeDream 제안 Introduction 파이프라인, 모델 병렬 처리, 데이터
ostin.tistory.com
나중에 보려고 자세히 쓰려다 저 블로그가 더 잘 되어 있어서 넘긴다...
'CS > Artificial Intelligence' 카테고리의 다른 글
WHERE DID ALL THE MEMORY GO? (0) | 2025.02.03 |
---|---|
Non-Autoregressive (NAR) (0) | 2025.01.20 |
Purpose of Regularization (1) | 2025.01.06 |
강화학습에서 Value Iteration / Bellman backup (0) | 2024.11.21 |
Cross entropy Loss에서 gradient 구하기 (5) | 2024.11.10 |