Поиск…


Вступление

Эта тема посвящена настройке и управлению GPU в TensorFlow.

Предполагается, что версия TensorFlow для GPU установлена ​​(см. Https://www.tensorflow.org/install/ для получения дополнительной информации об установке GPU).

Вам также может потребоваться ознакомиться с официальной документацией: https://www.tensorflow.org/tutorials/using_gpu

замечания

Основные источники:

Запустите TensorFlow только на процессоре - с помощью переменной среды CUDA_VISIBLE_DEVICES.

Чтобы гарантировать, что процесс TensorFlow для GPU работает только на CPU:

import os
os.environ["CUDA_VISIBLE_DEVICES"]="-1"    
import tensorflow as tf

Для получения дополнительной информации о CUDA_VISIBLE_DEVICES Этот ответ или документацию CUDA .

Запустить TensorFlow Graph только на CPU - используя `tf.config`

import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(device_count={'GPU': 0}))

Имейте в виду, что этот метод не позволяет графику TensorFlow Graph использовать графический процессор, но TensorFlow все еще блокирует устройство GPU, как описано в этом вопросе, открывшемся в этом методе. Использование CUDA_VISIBLE_DEVICES , по-видимому, является лучшим способом гарантировать, что TensorFlow будет храниться вдали от платы графического процессора (см. Этот ответ ).

Использовать определенный набор устройств GPU

Чтобы использовать определенный набор устройств GPU, можно использовать переменную среды CUDA_VISIBLE_DEVICES :

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"]="0" # Will use only the first GPU device


os.environ["CUDA_VISIBLE_DEVICES"]="0,3" # Will use only the first and the fourth GPU devices

(Цитируется из этого ответа , более подробная информация о переменных среды CUDA здесь .)

Перечислите доступные устройства, доступные TensorFlow в локальном процессе.

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

Управление распределением памяти графического процессора

По умолчанию TensorFlow предварительно выделяет всю память платы GPU (что может CUDA_OUT_OF_MEMORY предупреждение CUDA_OUT_OF_MEMORY ).

Чтобы изменить это, можно

  • измените процент предварительно распределенной памяти, используя per_process_gpu_memory_fraction конфигурации per_process_gpu_memory_fraction ,

    Значение от 0 до 1, которое указывает, какая часть
    доступной памяти графического процессора для предварительного распределения для каждого процесса. 1 означает
    для предварительного выделения всей памяти GPU, 0,5 означает процесс
    выделяет ~ 50% доступной памяти GPU.

  • отключите предварительное выделение, используя allow_growth config. Распределение памяти будет возрастать по мере роста использования.

    Если true, распределитель не предварительно выделяет всю указанную
    Область памяти GPU, вместо этого начинающая небольшая и растущая по мере необходимости.

Например:

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
sess = tf.Session(config=config) as sess:

или же

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess= tf.Session(config=config):

Подробнее о настройках конфигурации здесь .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow