【问题标题】:Multi-GPU training using tf.slim takes more time than single GPU使用 tf.slim 进行多 GPU 训练比单 GPU 需要更多时间
【发布时间】:2017-08-30 05:04:56
【问题描述】:

我正在使用 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。关于可能是什么问题的任何想法?谢谢!

【问题讨论】:

  • 时间线有助于识别性能瓶颈。时间线的使用:stackoverflow.com/questions/36123740/…
  • @YaoZhang 我通过 nvidia-smi 跟踪了 GPU 的使用情况,所有 4 个 GPU 的使用率都在 90+% 左右,然后是 0%,并且长期这样贯穿整个培训。
  • 如果你在Github提出问题,这个问题会得到更好的回答

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


【解决方案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)

【讨论】:

  • 在这种情况下可以做些什么来加快训练速度?谢谢。
  • @Anas 先找到瓶颈。看看我发布的第二个链接。我现在正在学习使用时间线进行分析。你也可以试试。
猜你喜欢
  • 1970-01-01
  • 2016-10-20
  • 2019-10-23
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2021-04-24
相关资源
最近更新 更多