使用tf.slim的多GPU培训比单GPU

时间:2017-04-04 20:05:10

标签: python tensorflow gpu multi-gpu tf-slim

我使用tf.slim' s train_image_classifier.py脚本在CIFAR10数据集上微调ResNet50:

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(Tesla M40)上运行此操作需要大约30,000,而在4个GPU上运行需要50多个mn。 (两种情况下的准确度相似:~75%和~78%)。

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

1 个答案:

答案 0 :(得分:1)

  1. 当设置num_clones使用multi 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