Измените GPU по умолчанию в TensorFlow

На основе документации графический процессор по умолчанию - тот, у которого самый низкий идентификатор:

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

Можно ли изменить это значение по умолчанию из командной строки или одной строки кода?

Ответ 1

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

Обратите внимание, что если вы используете CUDA_VISIBLE_DEVICES, имена устройств "/gpu:0", "/gpu:1" и т.д. относятся к 0-му и 1-му видимым устройствам в текущем процессе.

Ответ 2

Просто, чтобы быть понятным относительно использования переменной окружения CUDA_VISIBLE_DEVICES:

Чтобы запустить script my_script.py только на графическом процессоре 1, в терминале Linux вы можете использовать следующую команду:

[email protected]:/scratch/coding/src$ CUDA_VISIBLE_DEVICES=1 python my_script.py 

Дополнительные примеры, иллюстрирующие синтаксис:

Environment Variable Syntax      Results
CUDA_VISIBLE_DEVICES=1           Only device 1 will be seen
CUDA_VISIBLE_DEVICES=0,1         Devices 0 and 1 will be visible
CUDA_VISIBLE_DEVICES="0,1"       Same as above, quotation marks are optional
CUDA_VISIBLE_DEVICES=0,2,3       Devices 0, 2, 3 will be visible; device 1 is masked
CUDA_VISIBLE_DEVICES=""          No GPU will be visible

FYI:

Ответ 3

Как указано в документации, вы можете использовать tf.device('/gpu:id') для указания устройства, отличного от стандартного.

# This will use the second GPU on your system
with tf.device('/gpu:1'):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')

c = tf.matmul(a, b)
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
print sess.run(c)