distributed_torch

多GPU分配#

实现逻辑:寻找(可用显存 / 总显存)最大的的GPU,并优先安排任务

nvidia-smi可以很方便的获得GPU的各种详细信息。

首先获得可用的GPU数目,nvidia-smi -L | grep GPU |wc -l

然后获得GPU各自的总显存,nvidia-smi -q -d Memory | grep -A4 GPU | grep Total | grep -o ‘[0-9]+‘

最后获得GPU各自的可用显存,nvidia-smi -q -d Memory | grep -A4 GPU | grep Free | grep -o ‘[0-9]+‘

将(可用显存 / 总显存)另存为numpy数组,并使用np.argmax返回值即为可用GPU

1
2
3
4
5
6
7
8
9
10
11
12
def available_GPU(self):
import subprocess
import numpy as np
nDevice = int(subprocess.getoutput("nvidia-smi -L | grep GPU |wc -l"))
total_GPU_str = subprocess.getoutput("nvidia-smi -q -d Memory | grep -A4 GPU | grep Total | grep -o '[0-9]\+'")
total_GPU = total_GPU_str.split('\n')
total_GPU = np.array([int(device_i) for device_i in total_GPU])
avail_GPU_str = subprocess.getoutput("nvidia-smi -q -d Memory | grep -A4 GPU | grep Free | grep -o '[0-9]\+'")
avail_GPU = avail_GPU_str.split('\n')
avail_GPU = np.array([int(device_i) for device_i in avail_GPU])
avail_GPU = avail_GPU / total_GPU
return np.argmax(avail_GPU)

参考资料#

pytorch(分布式)数据并行个人实践总结——DataParallel/DistributedDataParallel

torch 多进程训练(详细例程)

PyTorch多进程分布式训练最简单最好用的实施办法

python并行编程 - GPU篇

Pytorch 分布式、多进程模块测试

多进程GPU调用问题

GPU加速02:超详细Python Cuda零基础入门教程,没有显卡也能学

使用python多GPU任务分配

Deep Learning:PyTorch 基于docker 容器的分布式训练实践