Skip to main content
이 문서는 머신러닝 섹션의 일부입니다.

왜 분산 학습이 필요한가?

딥러닝 모델의 크기와 학습 데이터의 양이 증가하면서, 단일 GPU로는 학습 시간이 수일에서 수주까지 걸릴 수 있습니다. 분산 학습(Distributed Training) 은 여러 GPU 또는 여러 노드에 학습을 분산하여 학습 시간을 크게 단축 합니다.
💡 비유: 1,000페이지 책을 번역할 때, 한 명이 하면 100일 걸리지만, 10명이 나누어 하면 10일이면 됩니다. 분산 학습도 마찬가지로, 데이터와 연산을 여러 GPU에 나누어 병렬로 처리합니다.

분산 학습 전략


TorchDistributor 사용법

TorchDistributor 는 Databricks ML Runtime에서 PyTorch 분산 학습을 쉽게 실행할 수 있게 해주는 도구입니다. Spark 클러스터의 GPU를 자동으로 감지하고, 분산 학습 환경을 설정합니다.

기본 사용법

TorchDistributor 주요 파라미터

local_mode 설정 가이드


DeepSpeed 연동

DeepSpeed 는 Microsoft가 개발한 분산 학습 최적화 라이브러리로, 대규모 모델 학습 시 메모리 효율을 크게 개선합니다.

DeepSpeed ZeRO 단계

DeepSpeed 설정 파일 (ds_config.json)

TorchDistributor + DeepSpeed


Horovod

Horovod 는 Uber가 개발한 분산 학습 프레임워크로, MPI 기반의 올-리듀스(All-Reduce) 알고리즘을 사용합니다.
💡 TorchDistributor vs Horovod: 새로운 프로젝트에서는 TorchDistributor(PyTorch DDP 기반)를 권장합니다. Horovod는 기존 Horovod 코드를 Databricks로 마이그레이션할 때 유용합니다.

멀티 GPU / 멀티 노드 설정

클러스터 설정 예시

분산 학습 규모별 가이드


MLflow 연동

분산 학습에서도 MLflow를 활용하여 실험을 추적할 수 있습니다.

현업 사례: 분산 학습을 시작했는데 단일 GPU보다 느린 이유

“GPU 4개면 4배 빠르겠지?” — 현업에서 가장 흔한 오해입니다. 분산 학습이 오히려 느려지는 사례를 구체적으로 살펴보겠습니다.

사례: 이미지 분류 모델 학습

왜 이런 일이 벌어지는가 — 분산 학습의 오버헤드

분산 학습의 실제 속도 향상(Speedup) 은 다음 공식에 가깝습니다:

분산이 항상 빠르지 않은 경우

분산 학습이 꼭 필요한 경우 — 모델 크기 기준

💡 현업에서는 이렇게 합니다: 분산 학습이 의미 있으려면 연산 시간이 통신 시간을 압도 해야 합니다. 이것은 모델이 크거나 데이터가 많을 때 성립합니다.

분산 학습 성능을 최대화하는 실전 팁

⚠️ 현업에서는 이렇게 합니다: 분산 학습을 시작하기 전에 반드시 단일 GPU에서 프로파일링 을 합니다. torch.profiler로 연산 시간, 데이터 로딩 시간, 유휴 시간을 측정하세요. 데이터 로딩이 병목이면 GPU를 더 추가해도 의미가 없습니다. 먼저 num_workers를 늘리고 pin_memory=True를 설정하세요.
💡 비용 최적화 팁: Spot/Preemptible 인스턴스를 사용하면 GPU 비용을 60~70% 절약할 수 있습니다. 단, 30분~1시간마다 체크포인트를 저장 해야 합니다. Spot 인스턴스가 회수되면 마지막 체크포인트부터 재시작합니다. 체크포인트 없이 12시간 학습하다가 11시간째에 회수되면 11시간의 GPU 비용이 증발합니다.

정리


참고 링크