在训练模型时,有时会出现GPU利用率很低的情况。有可能是CPU读取数据的速度跟不上模型训练的速度,导致GPU处于等待的状态。一个可能的原因是dataloader的num_workers=0,只有一个主进程。为避免这种情况可以根据机器设置合适的num_workers,一般设置为8或16。
注意num_workers<总CPU物理核心数
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
为避免出现Pytorch DataLoader 内存泄漏 RuntimeError: received 0 items of ancdata
添加以下代码:
torch.multiprocessing.set_sharing_strategy('file_system')