我们刚刚在工作中使用了多台机器,而且我正在尝试验证Caffe上的2个GPU是否优于1.要做到这一点,我要做的就是使用CIFAR-10数据集的快速列车示例。所以,到目前为止,我发现2GPU减慢了速度,我不明白为什么。
我正在运行的caffe版本是:
me@ubuntu:~/Downloads/caffe$ ./build/tools/caffe -version
caffe version 1.0.0-rc3
GPU的拓扑结构如下:
me@ubuntu:~$ nvidia-smi topo -m
GPU0 GPU1 GPU2 GPU3 CPU Affinity
GPU0 X PIX PHB PHB 0-11
GPU1 PIX X PHB PHB 0-11
GPU2 PHB PHB X PIX 0-11
GPU3 PHB PHB PIX X 0-11
Legend:
X = Self
SOC = PCI path traverses a socket-level link (e.g. QPI)
PHB = PCI path traverses a host bridge
PXB = PCI path traverses multiple internal switches
PIX = PCI path traverses an internal switch
NV# = Path traverses # NVLinks
他们处理的流程如下:
me@ubuntu:~$ nvidia-smi pmon
# gpu pid type sm mem enc dec command
# Idx # C/G % % % % name
0 1679 G 0 0 0 0 X
0 2740 G 0 1 0 0 compiz
0 3600 G 0 0 0 0 firefox
1 - - - - - - -
2 - - - - - - -
3 3328 C 0 0 0 0 python
我使用这个基本脚本训练了CIFAR-10数据集:
#!/usr/bin/env sh
set -e
TOOLS=./build/tools
$TOOLS/caffe train \
--solver=examples/cifar10/cifar10_quick_solver.prototxt --gpu=1,2 $@ >> ~/Desktop/caffe_2GPUa_out.txt 2>&1
略有变化:
--gpu=2,3
和
--gpu=2
我希望--gpu=2,3
获得最快的结果,然后是--gpu=1,2
,然后是--gpu=2
。相反,我看到的恰恰相反。
我看到的就是这个,
--gpu=2
:
I0227 14:41:26.948098 7712 caffe.cpp:251] Starting Optimization
I0227 14:42:04.841394 7712 caffe.cpp:254] Optimization Done.
--gpu=1,2
:
I0227 15:22:56.675775 7946 parallel.cpp:425] Starting Optimization
I0227 15:23:39.097970 7946 caffe.cpp:254] Optimization Done.
--gpu=2,3
:
I0227 14:43:13.466243 7742 parallel.cpp:425] Starting Optimization
I0227 14:43:56.215469 7742 caffe.cpp:254] Optimization Done.
所以,我训练的时间是:
gpu=2 34.89 sec
gpu=1,2 42.42 sec
gpu=2,3 42.74 sec
显然,我不了解与Caffe一起运行多个GPU的事情。我原本预计使用2个GPU可以让我加速大约1.8倍。我在这里不理解什么?