Что такое устройство, соединяющее StreamExecutor с прочностью 1 ребра матрицы - PullRequest
0 голосов
/ 05 сентября 2018

У меня четыре графические карты NVIDIA GTX 1080, и когда я инициализирую сессию, я вижу следующий вывод консоли:

Adding visible gpu devices: 0, 1, 2, 3
 Device interconnect StreamExecutor with strength 1 edge matrix:
      0 1 2 3 
 0:   N Y N N 
 1:   Y N N N 
 2:   N N N Y 
 3:   N N Y N 

А еще у меня есть 2 графические карты NVIDIA M60 Tesla, и инициализация выглядит так:

Adding visible gpu devices: 0, 1, 2, 3
 Device interconnect StreamExecutor with strength 1 edge matrix:
      0 1 2 3 
 0:   N N N N 
 1:   N N N N 
 2:   N N N N 
 3:   N N N N 

И я заметил, что этот вывод был изменен для меня с момента последнего обновления с 1.6 до 1.8 для 1080 gpu. Выглядело это примерно так (точно не помню, только воспоминания):

 Adding visible gpu devices: 0, 1, 2, 3
Device interconnect StreamExecutor with strength 1 edge matrix:
     0 1 2 3            0 1 2 3
0:   Y N N N         0: N N Y N
1:   N Y N N    or   1: N N N Y
2:   N N Y N         2: Y N N N
3:   N N N Y         3: N Y N N

Мои вопросы:

  • что это за соединение устройства ?
  • как это влияет на вычислительную мощность?
  • почему он отличается для разных графических процессоров?
  • может ли он меняться со временем по аппаратным причинам (сбои, несоответствие драйверов ...)?

1 Ответ

0 голосов
/ 26 марта 2019

TL; DR

что это за соединение между устройствами?

Как заявил Альмог Дэвид в комментариях, это говорит о том, имеет ли один графический процессор прямой доступ к памяти другого.

как это влияет на вычислительную мощность?

Единственный эффект, который это имеет, - это тренировка с несколькими GPU. Передача данных происходит быстрее, если два графических процессора имеют соединение между устройствами.

почему он отличается для разных графических процессоров?

Это зависит от топологии настройки оборудования. Материнская плата имеет только столько слотов PCI-e, которые подключены к одной шине. (проверьте топологию с nvidia-smi topo -m)

может ли он меняться со временем по аппаратным причинам (сбои, несоответствие драйверов ...)?

Я не думаю, что со временем порядок может измениться, если только NVIDIA не изменит схему перечисления по умолчанию. Здесь немного подробнее здесь

Explaination

Это сообщение генерируется в функции BaseGPUDeviceFactory::CreateDevices. Он перебирает каждую пару устройств в указанном порядке и вызывает cuDeviceCanAccessPeer. Как упоминает Альмог Дэвид в комментариях, это просто указывает, можете ли вы выполнять DMA между устройствами.

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

#test.py
import tensorflow as tf

#allow growth to take up minimal resources
config = tf.ConfigProto()
config.gpu_options.allow_growth = True

sess = tf.Session(config=config)

Теперь давайте проверим вывод с другим порядком устройства в CUDA_VISIBLE_DEVICES

$ CUDA_VISIBLE_DEVICES=0,1,2,3 python3 test.py
...
2019-03-26 15:26:16.111423: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0, 1, 2, 3
2019-03-26 15:26:18.635894: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-03-26 15:26:18.635965: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988]      0 1 2 3 
2019-03-26 15:26:18.635974: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0:   N Y N N 
2019-03-26 15:26:18.635982: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 1:   Y N N N 
2019-03-26 15:26:18.635987: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 2:   N N N Y 
2019-03-26 15:26:18.636010: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 3:   N N Y N 
...

$ CUDA_VISIBLE_DEVICES=2,0,1,3 python3 test.py
...
2019-03-26 15:26:30.090493: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0, 1, 2, 3
2019-03-26 15:26:32.758272: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-03-26 15:26:32.758349: I tensorflow/core/common_runtime/gpu/gpu_device.cc:988]      0 1 2 3 
2019-03-26 15:26:32.758358: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 0:   N N N Y 
2019-03-26 15:26:32.758364: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 1:   N N Y N 
2019-03-26 15:26:32.758389: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 2:   N Y N N 
2019-03-26 15:26:32.758412: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1001] 3:   Y N N N
...

Более подробное объяснение соединений можно получить, запустив nvidia-smi topo -m. Например:

       GPU0      GPU1    GPU2   GPU3    CPU Affinity
GPU0     X       PHB    SYS     SYS     0-7,16-23
GPU1    PHB       X     SYS     SYS     0-7,16-23
GPU2    SYS      SYS     X      PHB     8-15,24-31
GPU3    SYS      SYS    PHB      X      8-15,24-31

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe switches (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing a single PCIe switch
  NV#  = Connection traversing a bonded set of # NVLinks

Я полагаю, что чем ниже вы идете в списке, тем быстрее будет передача.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...