2017-04-04 1 views
0

Je suis ResNet50 réglage fin du jeu de données CIFAR10 en utilisant un script train_image_classifier.py de tf.slim:formation multi-GPU en utilisant tf.slim prend plus de temps que seul 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 

Pour 3k étapes, l'exécution de ce sur une seul GPU (Tesla M40) dure environ 30mn, lors de l'exécution sur GPU 4 prend 50 mn. (La précision est similaire dans les deux cas: ~ 75% et ~ 78%).

Je sais que l'une des causes possibles de retard dans les configurations multi-GPU est le chargement des images, mais dans le cas de tf.slim, il utilise le processeur pour cela. Des idées de ce qui pourrait être le problème? Je vous remercie!

+0

La chronologie aiderait à identifier le goulot d'étranglement des performances. Utilisation de la chronologie: http://stackoverflow.com/questions/36123740/-there-a-way-of-determining-how-much-gpu-memory-is-in-use-by-tensorflow/37931964#37931964 –

+0

@YaoZhang J'ai gardé une trace de l'utilisation du GPU à travers nvidia-smi, et il y a des rafales des 4 GPU utilisées à environ 90 +% suivies par des moments de 0%, et chroniquement comme ça tout au long de la formation. Ceci est – Anas

+0

mieux répondre que si vous déposez une question sur [Github] (https://github.com/tensorflow/tensorflow/issues) – keveman

Répondre

1
  1. Vous ne deviendrez pas plus rapide Lorsque vous définissez num_clones pour utiliser multi gpu. Parce que mince formera batch_size * données num_clones scission dans chacun de vos GPU. Après cela, calculez chaque perte par div num_clones et additionnez la perte totale. (https://github.com/tensorflow/models/blob/master/research/slim/deployment/model_deploy.py)
  2. Lorsque le goulot d'étranglement CPU deviennent, d'un pipeline d'entrée ne peut pas produit de données tant pour le train. Ensuite, vous obtiendrez 4 fois lentement lorsque vous définissez num_clones = 4. (https://www.tensorflow.org/performance/performance_guide)
+0

Que peut-on faire dans ce cas, alors d'accélérer la formation? Merci. – Anas

+0

@Anas trouver le goulot d'étranglement en premier. Jetez un oeil sur le deuxième lien que j'ai publié. J'apprends à utiliser le calendrier pour profiler maintenant. Vous pouvez essayer ça aussi. – bottlerun