모델 병렬화 (Model Parallelism)

컴퓨터과학·AI
한 줄 정의: 하나의 모델을 여러 부분으로 나누어 서로 다른 장치에 배치해서, 각 장치가 모델의 일부만 담당하도록 하는 분산 학습 방식.

쉽게 풀면

모델이 너무 커서 GPU 하나의 메모리에 다 들어가지 않을 때 쓰는 방법이 모델 병렬화이다. 모델을 층 단위나 다른 기준으로 잘라서 GPU 여러 개에 나누어 담고, 데이터가 한 GPU에서 다음 GPU로 순서대로 흘러가며 계산이 이루어진다. 최근의 초대형 언어 모델들은 모델 하나만 해도 수백 기가바이트에 달해, 이런 모델 병렬화 없이는 학습 자체가 불가능한 경우가 많다.

왜 중요한가

초대형 언어 모델이나 비전 모델은 파라미터 수가 단일 GPU의 메모리 한계를 훌쩍 넘기 때문에, 모델을 어떻게 여러 장치에 나누어 학습·추론할 것인가는 대규모 딥러닝 시스템 연구에서 피할 수 없는 핵심 문제입니다. 이 때문에 모델 병렬화는 분산 시스템, 컴퓨터 구조, 대규모 AI 학습 인프라 연구가 만나는 지점에서 활발히 다뤄지며, 데이터 병렬화와 결합한 하이브리드 병렬화 전략은 최신 초거대 모델 학습의 표준적인 접근으로 자리 잡고 있습니다.

논문에서는 이렇게 쓰입니다

"175B 파라미터 모델은 텐서 병렬 방식으로 8개의 GPU에 걸쳐 분할되었다."

모델의 파라미터가 너무 많아 한 GPU에 담을 수 없으므로, 모델의 연산 자체를 8개의 GPU에 나누어 저장하고 계산했다는 뜻이다.

"본 연구에서는 파이프라인 병렬화를 적용하여 모델의 각 층을 서로 다른 장치에 배치하고, 마이크로배치를 이용해 장치 간 유휴 시간을 줄였다."

층 단위로 모델을 나누는 파이프라인 병렬화에서는 장치가 노는 시간을 최소화하는 것이 학습 효율을 좌우하는 중요한 설계 포인트로 다뤄진다.

"대규모 비전 트랜스포머 학습에서 텐서 병렬화와 데이터 병렬화를 결합한 하이브리드 전략을 적용하여 GPU 활용률을 크게 개선하였다."

단일 병렬화 방식만으로는 한계가 있어, 여러 병렬화 기법을 조합해 통신 비용과 메모리 사용을 함께 최적화하는 연구가 컴퓨터 비전 분야에서도 흔히 이루어진다.

조금 더 깊게 보면

모델 병렬화는 크게 층 단위로 모델을 나누는 파이프라인 병렬화와, 하나의 층 내부 연산(행렬 곱 등)을 여러 장치로 쪼개는 텐서 병렬화로 구분됩니다. 파이프라인 병렬화는 장치 간 유휴 시간(버블)이 문제가 되어 마이크로배치 기법으로 이를 줄이려는 시도가 흔히 등장하고, 텐서 병렬화는 연산 하나마다 장치 간 통신이 빈번해 통신 대역폭이 성능의 병목이 되기 쉽습니다. 실제 대규모 학습에서는 이 두 방식과 데이터 병렬화를 함께 조합해 쓰는 경우가 많으므로, 논문을 읽을 때는 어떤 병렬화 조합을 사용했고 통신 오버헤드를 어떻게 줄였는지를 함께 확인하는 것이 도움이 됩니다.

주의할 점

모델 병렬화는 GPU 간 통신이 매우 빈번하게 일어나므로 NVLink처럼 빠른 GPU 간 연결이 없으면 성능이 크게 저하될 수 있다.

관련 용어