가속기 선택
가속기 선택 (Accelerator selection)
분산 학습 중에 PyTorch가 어떤 가속기(CUDA, XPU, MPS, HPU 등)를 어떤 순서로 보게 할지 직접 제어할 수 있어요. 더 빠른 디바이스를 우선하거나, 사용 가능한 하드웨어 중 일부로 학습을 제한하고 싶을 때 유용하지요. 이 기능은 DistributedDataParallel과 DataParallel 모두에서 동작하며, Accelerate나 DeepSpeed 통합이 필요하지 않아요.
출처: 문서
본문
가속기의 순서 (Order of accelerators)
하드웨어별 환경 변수를 사용해서 가속기를 선택하고 순서를 정할 수 있어요. 실행할 때마다 명령줄에 설정하거나, ~/.bashrc나 다른 시작 설정 파일에 추가하면 돼요.
[!WARNING] 환경 변수를 export 하는 것은 피하는 게 좋아요. 환경 변수가 어떻게 설정됐는지 까먹으면 조용히 엉뚱한 가속기로 학습할 수 있으니까요. 학습 실행과 같은 명령줄에 환경 변수를 함께 설정해 주세요.
예를 들어 네 개 중 가속기 0과 2를 선택하려면:
CUDA_VISIBLE_DEVICES=0,2 torchrun trainer-program.py ...
PyTorch는 GPU 0과 2만 보게 되고, 이들은 cuda:0과 cuda:1로 매핑돼요. 순서를 뒤집으려면(GPU 2를 cuda:0으로, GPU 0을 cuda:1로):
CUDA_VISIBLE_DEVICES=2,0 torchrun trainer-program.py ...
GPU 없이 실행하려면:
CUDA_VISIBLE_DEVICES= python trainer-program.py ...
CUDA 디바이스의 순서는 CUDA_DEVICE_ORDER로 제어해요.
-
PCIe 버스 ID 순서로 정렬(
nvidia-smi와 일치):export CUDA_DEVICE_ORDER=PCI_BUS_ID -
연산 능력(compute capability) 순서로 정렬(가장 빠른 것부터):
export CUDA_DEVICE_ORDER=FASTEST_FIRST
인텔 XPU의 경우:
ZE_AFFINITY_MASK=0,2 torchrun trainer-program.py ...
PyTorch는 XPU 0과 2만 보게 되고, 이들은 xpu:0과 xpu:1로 매핑돼요. 순서를 뒤집으려면(XPU 2를 xpu:0으로, XPU 0을 xpu:1로):
ZE_AFFINITY_MASK=2,0 torchrun trainer-program.py ...
인텔 XPU의 순서는 다음과 같이 제어해요:
export ZE_ENABLE_PCI_ID_DEVICE_ORDER=1
인텔 XPU에서 디바이스 열거와 정렬에 대해 더 자세히 보려면 Level Zero 문서를 확인해 주세요.