Производительность обработки Tensorflow с несколькими GPU
Друзья! У меня есть вопрос об обработке с несколькими GPU. Я использую 4 gpus и попробовал простой пример A ^ n + B ^ n 3 способами, как показано ниже.
Одиночный графический процессор
with tf.device('/gpu:0'): ....tf.matpow codes...
Несколько GPU
with tf.device('/gpu:0'): ....tf.matpow codes... with tf.device('/gpu:1'): ....tf.matpow codes...
Не определен конкретный GPU (я думаю, может быть, все GPU используется)
....just tf.matpow codes...
когда попробовал это, результат был непостижимым. результат был: 1. единичный графический процессор: 6.x секунд 2. множественный графический процессор (2 графических процессора): 2.x секунд 3. никакой конкретный графический процессор не был назначен (возможно, 4 графических процессора): 4.x секунд
Я не могу понять, почему #2 быстрее, чем #3. Кто-нибудь может мне помочь?
Благодарю.
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))
В третьем примере кода (где не был указан графический процессор) Tensorflow не использовал все ваши графические процессоры. По умолчанию, если Tensorflow может найти графический процессор ("/gpu:0") для использования, он назначает как можно больше вычислений этому графическому процессору. Вы должны были бы конкретно указать ему, что хотите, чтобы он использовал все 4, как вы делали во втором примере кода.
Из документации Tensorflow:
Если в вашей системе несколько графических процессоров, по умолчанию будет выбран графический процессор с наименьшим идентификатором. Если вы хотите работать на другом графическом процессоре, вам нужно будет явно указать предпочтения:
with tf.device('/gpu:2'):
tf code here