2017-01-10 8 views
2

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

  1. Один GPU

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

    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. Нет конкретный графический процессор обозначен (возможно 4 GPU): 4.е секунды

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

Спасибо.

+0

# 3 использует только GPU: 0. Кроме того, первый запуск ядра на графическом процессоре может добавить пару секунд на графический процессор, вы должны предварительно разогреть свои графические процессоры, запустив эти операционные системы перед началом синхронизации - http://stackoverflow.com/questions/40410210/tensorflow-2 -gpu-slower-then-single-gpu/40430717 # 40430717 –

+0

Компиляция операционных вычислений PTXAS выполняется для каждого устройства GPU при инициализации. –

ответ

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)) 
1

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

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

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

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