0Pricing
Learn AI with Python · 강의

DataParallel을 활용한 다중 GPU 학습

nn.DataParallel, GPU 메모리 균형 조정, 대역폭 병목, DDP가 더 나은 경우를 다룹니다.

DataParallel을 활용한 다중 GPU 학습은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

여러 GPU를 사용하는 이유

최신 모델과 배치는 단일 GPU의 메모리와 연산 능력을 넘어섭니다. 여러 GPU를 사용하면 더 큰 모델을 학습하거나 더 큰 배치를 실제 경과 시간이 더 짧은 동안 처리할 수 있습니다. PyTorch는 이를 위한 여러 방법을 제공하며, 가장 간단한 방법은 DataParallel입니다.

데이터 병렬 처리

데이터 병렬 처리는 모든 GPU에 모델을 복제하고 각 입력 배치를 여러 GPU에 나눕니다. 각 GPU는 할당된 데이터 조각에 대해 계산한 다음, 모든 복제본이 동기화된 상태를 유지하도록 그래디언트를 결합합니다.

nn.DataParallel

nn.DataParallel은 한 줄로 모델을 감쌀 수 있게 해 줍니다. 사용할 GPU ID를 전달하면 PyTorch가 입력을 자동으로 분산하고 출력을 수집합니다.

import torch
import torch.nn as nn

model = MyModel().cuda()
model = nn.DataParallel(model, device_ids=[0, 1])

배치 자동 분할

순전파 중에 DataParallel은 나열된 GPU 전체에 0번 차원을 따라 배치를 분할합니다. 두 개의 GPU에서 배치 64개는 32개씩인 두 개의 하위 배치가 됩니다. 각 GPU는 자신의 하위 배치에 동일한 모델을 병렬로 실행합니다.

# batch of 64 with device_ids=[0, 1]
# GPU 0 processes samples 0..31
# GPU 1 processes samples 32..63

그래디언트 평균화

역전파 중에 GPU별 그래디언트가 주 장치로 수집되고 평균화됩니다(실제로는 합산한 후 스케일 조정). 따라서 모델 업데이트가 전체 배치를 반영하게 됩니다. 그런 다음 다음 step을 위해 복제본이 다시 동기화됩니다.

일반적인 학습 반복문

가장 좋은 점은 학습 반복문이 거의 바뀌지 않는다는 것입니다. 데이터를 주 GPU로 옮기고 평소처럼 래핑된 모델을 호출하면 됩니다. DataParallel이 내부에서 분산 처리를 수행합니다.

for x, y in loader:
    x, y = x.cuda(), y.cuda()
    optimizer.zero_grad()
    out = model(x)            # auto-split across GPUs
    loss = criterion(out, y)
    loss.backward()           # gradients averaged
    optimizer.step()

GPU 0 불균형

DataParallel에는 잘 알려진 결함이 있습니다. 주 GPU(대개 GPU 0)가 모든 출력을 수집하고 손실을 계산하므로 메모리와 연산을 더 많이 부담합니다. GPU가 많아지면 GPU 0이 병목이 되고 다른 GPU보다 먼저 메모리가 부족해질 수 있습니다.

단일 프로세스, 다중 스레드

DataParallel은 단일 파이썬 프로세스에서 실행되며 스레드를 사용해 GPU를 구동합니다. 파이썬 전역 인터프리터 잠금과 분산 및 수집 오버헤드 때문에 특히 GPU가 2~4개를 넘으면 확장 효율이 제한됩니다.

DDP를 선호하는 이유

이러한 이유로 본격적인 다중 GPU 작업에는 DistributedDataParallel (DDP)이 권장됩니다. DDP는 GPU마다 하나의 프로세스를 실행하고, 효율적인 전체 집계를 사용해 그래디언트를 동기화하며, GPU 0 병목을 없애 거의 선형적인 확장을 제공합니다.

DataParallel을 사용해도 괜찮은 경우

DataParallel은 GPU 2개를 사용하는 단일 머신에서 빠르게 실험할 때는 사용할 수 있습니다. 이 경우 한 줄로 작성할 수 있다는 간결함이 비효율성을 상쇄합니다. 여러 노드에서 학습하거나 GPU가 많다면 대신 DDP를 사용하십시오.

흔한 함정: 저장

래핑된 모델의 state_dict에는 module. 접두사가 붙습니다. 정리된 체크포인트를 저장하려면 model.module.state_dict()를 저장하십시오. 그러면 나중에 래핑되지 않은 모델에 올바르게 불러올 수 있습니다.

torch.save(model.module.state_dict(), "model.pt")

빠른 확인

DataParallel에 대해 배운 내용을 확인해 보십시오.

복습

DataParallel을 사용한 다중 GPU 학습을 배웠습니다:

  • nn.DataParallel(model, device_ids=[0, 1])은 모델을 복제하고 배치를 분할합니다
  • 각 step마다 GPU 전체에서 그래디언트가 평균화됩니다
  • GPU 0 불균형과 단일 프로세스 설계가 확장을 제한합니다
  • GPU가 많거나 여러 노드에서 학습할 때는 DDP를 선호하십시오

자주 묻는 질문

“DataParallel을 활용한 다중 GPU 학습” 강의는 무료인가요?

네 — “DataParallel을 활용한 다중 GPU 학습” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

“DataParallel을 활용한 다중 GPU 학습”에서 뭘 배우나요?

nn.DataParallel, GPU 메모리 균형 조정, 대역폭 병목, DDP가 더 나은 경우를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“DataParallel을 활용한 다중 GPU 학습” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. DataParallel을 활용한 다중 GPU 학습
  2. DistributedDataParallel(DDP)
  3. AMP를 활용한 혼합 정밀도 학습
  4. Hugging Face Accelerate를 활용한 효율적인 학습
← Learn AI with Python(으)로 돌아가기