한 개의 GPU에서 여러 개의 네트워크 학습을 동시에 진행하는 상황을 GPU 멀티태스킹이라 합니다.
이 경우 CPU 과부하가 발생하기 쉬운 이유는 다음과 같습니다.
num_workers
와 배치 사이즈 조정멀티태스킹 환경에서는 CPU 코어와 GPU 메모리를 여러 학습 프로세스가 나눠 쓰기 때문에, 과도한 리소스 할당은 곧바로 병목으로 이어집니다.
실행 팁
CPU 코어 기반 계산
num_workers
값num_workers=4
부터 시작배치 사이즈 줄이기
실시간 모니터링
htop
: CPU 코어별 사용률 균형 확인watch -n 1 nvidia-smi
: GPU 활용률 확인동시 학습이 필수적이지 않다면 한 번에 하나씩 학습하는 방식이 효율적일 수 있습니다.
장점
방법
여러 학습 프로세스가 CPU를 공유하면 리소스 경쟁이 심화됩니다.
리눅스에서 CPU 코어 고정
import os
os.sched_setaffinity(0, {0, 1, 2, 3}) # 0번~3번 코어만 사용
리소스 스케줄러 사용
하드웨어 기능을 활용해 GPU를 논리적으로 분할하면 충돌을 방지할 수 있습니다.
가장 간단한 방법
num_workers
와 배치 사이즈를 줄여서 각 학습의 CPU/GPU 점유율 완화여유가 있다면
규모가 크다면
num_workers
계산으로 시작제가 보기에는 여기에 프로세스 수와 CPU 코어 수 기반 num_workers
추천 표랑 실험용 PyTorch 코드 예시까지 넣으면,
읽는 사람이 바로 따라 할 수 있는 "완성형 가이드"가 될 수 있습니다.
이렇게 확장하면 검색 유입도 훨씬 올라갈 거예요.
num_workers
추천 표CPU 물리 코어 수 | 학습 프로세스 수 | 프로세스별 추천 num_workers | 비고 |
---|---|---|---|
4 | 1 | 3 | 여유 1코어는 OS/기타 작업용 |
4 | 2 | 2 | 균등 분배 |
4 | 4 | 1 | 최소치, I/O 최적화 필요 |
8 | 1 | 7 | 코어 하나는 시스템 여유 |
8 | 2 | 4 | CPU 점유 균형 |
8 | 4 | 2 | 병목 방지 |
8 | 8 | 1 | 멀티프로세스 부담 큼 |
16 | 1 | 15 | 대규모 배치 가능 |
16 | 2 | 8 | GPU 2개 or 멀티 태스킹 |
16 | 4 | 4 | 안정적인 초기값 |
16 | 8 | 2 | 고속 SSD 필수 |
32 | 1 | 31 | 대규모 데이터 적합 |
32 | 4 | 8 | 일반적인 HPC 설정 |
32 | 8 | 4 | I/O 튜닝 병행 필요 |
32 | 16 | 2 | 최소 권장치 |
계산 공식
추천 num_workers ≈ floor( (CPU 물리 코어 수) / (프로세스 수) )
여유를 위해 1코어는 OS와 기타 백그라운드 작업용으로 남겨둠.
물리 코어 vs 논리 코어
lscpu
또는 htop
에서 물리 코어 수 확인디스크 I/O 속도 고려
num_workers
를 공식보다 조금 높여도 OK모니터링 필수
htop
에서 CPU 코어 사용률 균등 확인nvidia-smi
로 GPU idle time 확인 후 조정