2017-04-04 2 views
0

i를 CIFAR10 데이터 세트에 대한 미세 조정 ResNet50 tf.slim의 train_image_classifier.py 스크립트를 사용하고 있습니다 : 3K 단계는멀티 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 

를 켜짐이 실행을 단일 GPU (Tesla M40)는 약 3 천만, 4 GPU는 50 만 이상을 필요로합니다. 정확도는 두 경우 모두 비슷합니다 (~ 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 사용량을 추적했습니다. 약 4 %의 GPU가 90 % 이상 사용 된 후 0 %의 순간이 발생하고 만성적으로 교육을 통해이 모든 것을 좋아합니다. – Anas

+0

[Github] (https://github.com/tensorflow/tensorflow/issues) – keveman

답변

1
  1. 더 빠르게 작동하지 않습니다. 다중 GPU를 사용하려면 num_clones를 설정하십시오. 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

관련 문제