JDAI-CV / fast-reid

SOTA Re-identification Methods and Toolbox
Apache License 2.0
3.42k stars 837 forks source link

多机多卡,速度缓慢 #639

Closed wang11wang closed 2 years ago

wang11wang commented 2 years ago

你好,我在使用 2机,每机6卡的时候,相比于 单机6卡,训练速度为原来的 1/5 使用的命令如下:

export NCCL_SOCKET_IFNAME='eth0'
python train.py --config-file config.yaml --num-gpus 6 \
   --num-machines 2 \
   -machine-rank 0 \   # 另一台机器是 1
   --dist-url tcp://ip:12345

请问可能是哪个地方出错的?

L1aoXingyu commented 2 years ago

会不会是两台机器之间的带宽比较低

wang11wang commented 2 years ago

局域网的机器,带宽没有问题; 观察到一个现象:将DataloaderX直接改成PyTorch官方的Dataloader之后,训练速度是原来的1/3; 而且使用open-mmlab的mmselfsup进行训练的时候,是正常的,训练速度是原来的1.8倍。

L1aoXingyu commented 2 years ago

这个现象比较奇怪,因为在单节点多卡上速度没有变慢,但是多节点上速度变慢了,按道理多节点和单节点除了带宽之外没有本质区别,我再想想为什么会出现这样的问题。

wang11wang commented 2 years ago

感谢查看问题; 我目前认为代码是没有问题的,应该是我的训练数据量比较大(几百万),频繁的读取数据,导致了CPU瓶颈。

L1aoXingyu commented 2 years ago

是观测到 GPU 的利用率有非常大的波动吗

wang11wang commented 2 years ago

是的,GPU 利用率波动非常大,而且 GPU 功率比较低,同时日志中的 data_time 相对 time 也比较大,htop 看到的 load average 也很大

annyhou commented 2 years ago

你好!这个问题解决了么?我也遇到了同样的问题,然后gpu占2000M,但是利用率100%,cpu利用率也是在600%多,这个正常么?

wang11wang commented 2 years ago

我觉得是硬件问题,从代码层面只能缓解,无法解决; 有以下思路供参考: 把数据放到SSD上【最有效】 把BackGroundGenerator的max_prefetch调大一点