Производительность обработки Tensorflow с несколькими GPU

друзья! У меня вопрос по поводу обработки с несколькими GPU. Я использую 4 GPU и попробовал простой пример A^n + B^n тремя способами, как показано ниже.

  1. Один графический процессор

    with tf.device('/gpu:0'):
         ....tf.matpow codes...
    
  2. Несколько графических процессоров

    with tf.device('/gpu:0'):
         ....tf.matpow codes...
    with tf.device('/gpu:1'):
         ....tf.matpow codes...
    
  3. Конкретный графический процессор не указан (я думаю, что все используемые графические процессоры)

    ....just tf.matpow codes...
    

когда попробовал это, результат был непонятен. результат был 1. один GPU: 6,x секунд 2. несколько gpu (2 gpu): 2,x секунды 3. не указан конкретный gpu (возможно, 4 gpu): 4,x секунды

Я не могу понять, почему № 2 быстрее, чем № 3. Кто-нибудь может мне помочь?

Спасибо.


person Yongjun Cho    schedule 10.01.2017    source источник
comment
# 3 использует только GPU: 0. Кроме того, первый запуск ядра на графическом процессоре может добавить пару секунд для каждого графического процессора, вам необходимо предварительно разогреть свои графические процессоры, запустив на них эти операции перед запуском времени - stackoverflow.com/questions/40410210/   -  person Yaroslav Bulatov    schedule 10.01.2017
comment
Компиляция вычислительных операций PTXAS выполняется для каждого устройства GPU при инициализации.   -  person Rick Lentz    schedule 11.01.2017


Ответы (2)


Хотя планировщик Tensorflow хорошо работает для одного графического процессора, он пока не так хорош для оптимизации размещения вычислений на нескольких графических процессорах. (Хотя в настоящее время над этим ведется работа.) Без дополнительных подробностей трудно точно понять, что происходит. Чтобы получить лучшую картину, вы можете записать, где планировщик фактически размещает вычисления. Вы можете сделать это, установив флаг log_device_placement при создании tf.Session:

# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
person saeta    schedule 11.01.2017

В третьем примере кода (где графический процессор не указан) Tensorflow не использовал все ваши графические процессоры. По умолчанию, если Tensorflow может найти GPU ("/gpu:0") для использования, он назначает как можно больше вычислений этому GPU. Вам нужно будет указать, что вы хотите, чтобы он использовал все 4, как вы сделали во втором примере кода.

Из документации Tensorflow:

Если в вашей системе более одного графического процессора, по умолчанию будет выбран графический процессор с наименьшим идентификатором. Если вы хотите работать на другом графическом процессоре, вам нужно явно указать предпочтение:

with tf.device('/gpu:2'):
    tf code here
person Sultan Kenjeyev    schedule 27.02.2017