0

我正在使用 tf.slim 的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)上运行大约需要 3000 万,而在 4 个 GPU 上运行需要 50+ 百万。(两种情况下的准确度相似:~75% 和~78%)。

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

4

1 回答 1

1
  1. 设置 num_clone 以使用多 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
于 2017-12-13T10:15:44.793 回答