Отфильтруйте дочерние элементы в Linq к объектам ASP.NET

TF выделяет всю доступную память на каждом видимом графическом процессоре, если не указано иное. Вот 4 способа придерживаться только одного (или нескольких) графических процессоров.

Решение Bash. Установите CUDA_VISIBLE_DEVICES=0,1 в своем терминале / консоли перед запуском ноутбука Python или Jupyter.

Решение Python. перед построением сеанса выполните следующие 2 строки кода

import os
os.environ["CUDA_VISIBLE_DEVICES"]="0,1"

Автоматизированное решение. Приведенный ниже метод автоматически обнаружит устройства с графическим процессором, которые не используются другими сценариями, и установит для вас CUDA_VISIBLE_DEVICES. Вы должны позвонить mask_unused_gpus перед построением сеанса. Это отфильтрует графические процессоры по текущему использованию памяти. Таким образом, вы можете запускать несколько экземпляров вашего скрипта одновременно, не изменяя ваш код и не устанавливая параметры консоли.

Функция:

import subprocess as sp
import os

def mask_unused_gpus(leave_unmasked=1):
  ACCEPTABLE_AVAILABLE_MEMORY = 1024
  COMMAND = "nvidia-smi --query-gpu=memory.free --format=csv"

  try:
    _output_to_list = lambda x: x.decode('ascii').split('\n')[:-1]
    memory_free_info = _output_to_list(sp.check_output(COMMAND.split()))[1:]
    memory_free_values = [int(x.split()[0]) for i, x in enumerate(memory_free_info)]
    available_gpus = [i for i, x in enumerate(memory_free_values) if x > ACCEPTABLE_AVAILABLE_MEMORY]

    if len(available_gpus) < leave_unmasked: raise ValueError('Found only %d usable GPUs in the system' % len(available_gpus))
    os.environ["CUDA_VISIBLE_DEVICES"] = ','.join(map(str, available_gpus[:leave_unmasked]))
  except Exception as e:
    print('"nvidia-smi" is probably not installed. GPUs are not masked', e)

mask_unused_gpus(2)

Ограничения: если вы запустите несколько сценариев одновременно, это может вызвать коллизию, поскольку память не выделяется сразу при создании сеанса. В случае, если это проблема для вас, вы можете использовать рандомизированную версию, как в исходном исходном коде: mask_busy_gpus ()

Tensorflow 2.0 предлагает еще один метод:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  # Restrict TensorFlow to only use the first GPU
  try:
    tf.config.experimental.set_visible_devices(gpus[0], 'GPU')
  except RuntimeError as e:
    # Visible devices must be set at program startup
    print(e)

1
задан Community 23 May 2017 в 12:19
поделиться