2017-01-10 5 views
2

친구! 여러 GPU로 처리하는 것에 대해 질문이 있습니다. 나는 4 개의 gpus를 사용하고 있으며 아래처럼 3 가지 방법으로 간단한 A^n + B^n 예제를 시도했다.여러 Gpu로 Tensorflow 처리 성능

  1. 단일 GPU

    with tf.device('/gpu:0'): 
        ....tf.matpow codes... 
    
  2. 다중 GPU

    with tf.device('/gpu:0'): 
        ....tf.matpow codes... 
    with tf.device('/gpu:1'): 
        ....tf.matpow codes... 
    
  3. 지정 없음 특정 GPU 없습니다

    ....just tf.matpow codes... 
    
(I 아마 사용 된 GPU의 모든 생각)

시도했을 때 그 결과는 이해할 수 없었습니다. 결과였다 1 개의 GPU : 6.x의 초 2. 여러 개의 GPU (2 개 GPU를) 2.X 초 3. 지정없이 특정 GPU (아마 4의 GPU) : 4.x의 초

I 왜 # 2가 # 3보다 빠르는지 이해할 수 없다. 누구든지 나를 도울 수 있습니까?

감사합니다.

+0

# 3는 GPU를 사용합니다 : 0. 또한 GPU에서 첫 번째 커널을 실행하면 GPU 당 몇 초가 걸릴 수 있습니다. 타이밍을 시작하기 전에 GPT를 실행하여 GPU를 미리 예열해야합니다. http://stackoverflow.com/questions/40410210/tensorflow-2 -gpu-slower-then-single-gpu/40430717 # 40430717 –

+0

초기화시 각 GPU 장치에 대해 연산 연산의 PTXAS 컴파일이 수행됩니다. –

답변

2

Tensorflow 스케줄러는 단일 GPU에서 잘 작동하지만 아직 여러 GPU에서 계산 배치를 최적화하는 데 그리 좋지 않습니다. (현재 진행중이지만) 세부 정보가 없어도 정확히 무슨 일이 일어나는지 알기가 어렵습니다. 더 나은 그림을 얻으려면 계산이 실제로 스케쥴러에 의해 배치되는 위치를 기록 할 수 있습니다. 당신은 tf.Session를 만들 때에 log_device_placement 플래그를 설정하여이 작업을 수행 할 수 있습니다 :

# Creates a session with log_device_placement set to True. 
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 
1

을 (어떤 GPU가 지정되지 않은) 세 번째 코드 샘플 Tensorflow이 GPU를 모두 사용하지 않은에서. 기본적으로 Tensorflow가 사용할 GPU ("/ gpu : 0")를 찾을 수있는 경우 GPU에 가능한 많은 계산을 할당합니다. 두 번째 코드 샘플에서 사용한 것처럼 4를 모두 사용하기를 원한다고 구체적으로 말해야합니다. Tensorflow 문서에서

은 :

당신이 당신의 시스템에 하나 개 이상의 GPU가있는 경우

, 가장 낮은 ID와 GPU가 기본적으로 선택됩니다. 다른 GPU에서 실행하고 싶은 경우에, 당신은 명시 적으로 기본 설정을 지정해야합니다

with tf.device('/gpu:2'): 
    tf code here