2017-04-04 189 views
0

我使用tf.slim的train_image_classifier.py脚本在CIFAR10数据集微调ResNet50:多GPU训练使用tf.slim需要更多的时间比单GPU

python train_image_classifier.py \      
    --train_dir=${TRAIN_DIR}/all \               
    --dataset_name=cifar10 \                
    --dataset_split_name=train \               
    --dataset_dir=${DATASET_DIR} \               
    --checkpoint_path=${TRAIN_DIR} \              
    --model_name=resnet_v1_50 \               
    --max_number_of_steps=3000 \               
    --batch_size=32 \                  
    --num_clones=4 \                  
    --learning_rate=0.0001 \                
    --save_interval_secs=10 \                
    --save_summaries_secs=10 \                
    --log_every_n_steps=10 \                 
    --optimizer=sgd 

对于3K的步骤,对运行中的这单GPU(特斯拉M40)需要约30mn,而在4个GPU上运行需要50million。 (两种情况下的准确度都相似:〜75%和〜78%)。

我知道多GPU设置延迟的一个可能原因是加载图像,但在tf.slim的情况下,它使用CPU。任何想法可能是什么问题?谢谢!

+0

时间线将有助于确定性能瓶颈。时间轴的使用:http://stackoverflow.com/questions/36123740/is-there-a-way-of-determining-how-much-gpu-memory-is-in-use-by-tensorflow/37931964#37931964 –

+0

@YaoZhang我通过nvidia-smi跟踪了GPU的使用情况,并且有大约90 +%使用了所有4个GPU,之后是0%的时刻,在整个培训过程中慢慢地这样。 – Anas

+0

如果您在[Github](https://github.com/tensorflow/tensorflow/issues) – keveman

回答

1
  1. 你不会变得更快当设置num_clones使用多GPU。因为slim会训练每个GPU中的batch_size * num_clones数据分割。之后,通过div num_clones计算每个损失并对总损失进行求和。 (https://github.com/tensorflow/models/blob/master/research/slim/deployment/model_deploy.py
  2. 当CPU成为瓶颈时,输入管道无法为列车产生如此多的数据。当设置num_clones = 4时,你将会缓慢地获得4次(https://www.tensorflow.org/performance/performance_guide
+0

上提出问题,这会得到更好的回答。在这种情况下可以做些什么,然后加快培训?谢谢。 – Anas

+0

@Anas先找到瓶颈。看看我发布的第二个链接。我正在学习现在使用时间线进行分析。你也可以尝试。 – bottlerun