2017-04-04 193 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