У меня есть Keras, установленный с бэкэндом Tensorflow и CUDA. Я хотел бы иногда по требованию заставить Keras использовать CPU. Можно ли это сделать, не говоря уже об установке отдельного процессора Tensorflow в виртуальной среде? Если да, то как? Если бэкэнд был Theano, флаги могли быть установлены, но я не слышал о флажках Tensorflow, доступных через Keras.
Может ли Keras с поддержкой Tensorflow принудительно использовать процессор или графический процессор?
Ответ 1
Если вы хотите заставить Keras использовать процессор
Способ 1
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""
до импорта Keras/Tensorflow.
Способ 2
Запустите ваш скрипт как
$ CUDA_VISIBLE_DEVICES="" ./your_keras_code.py
Смотрите также
Ответ 2
Довольно отдельный способ сделать это состоит в том, чтобы использовать
import tensorflow as tf
from keras import backend as K
num_cores = 4
if GPU:
num_GPU = 1
num_CPU = 1
if CPU:
num_CPU = 1
num_GPU = 0
config = tf.ConfigProto(intra_op_parallelism_threads=num_cores,
inter_op_parallelism_threads=num_cores,
allow_soft_placement=True,
device_count = {'CPU' : num_CPU,
'GPU' : num_GPU}
)
session = tf.Session(config=config)
K.set_session(session)
Здесь, с booleans
GPU
и CPU
, мы указываем, хотим ли мы запускать наш код с GPU или CPU, жестко определяя количество GPU и CPU, к которым сеанс Tensorflow разрешен. Переменные num_GPU
и num_CPU
определяют это значение. num_cores
устанавливает количество ядер ЦП, доступных для использования через intra_op_parallelism_threads
и inter_op_parallelism_threads
.
Переменная intra_op_parallelism_threads
определяет количество потоков, которым разрешено использовать параллельную операцию в одном узле в графе вычислений (intra). В то время inter_ops_parallelism_threads
переменная inter_ops_parallelism_threads
определяет количество потоков, доступных для параллельных операций через узлы графа вычислений (inter).
allow_soft_placement
позволяет запускать операции на ЦП, если выполняется любой из следующих критериев:
-
для работы нет реализации GPU
-
нет известных или зарегистрированных устройств с графическим процессором
-
необходимо совмещать с другими входами ЦП
Все это выполняется в конструкторе моего класса перед любыми другими операциями и полностью отделимо от любой модели или другого кода, который я использую.
Примечание. Для этого необходимо tensorflow-gpu
и cuda
/cudnn
, поскольку для этой опции используется GPU.
Refs:
Ответ 3
Это сработало для меня (win10), место перед импортом keras:
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
Ответ 4
В соответствии с keras tutorial вы можете просто использовать ту же область tf.device
, что и в обычном тензорном потоке:
with tf.device('/gpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x) # all ops in the LSTM layer will live on GPU:0
with tf.device('/cpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x) # all ops in the LSTM layer will live on CPU:0
Ответ 5
Просто импортируйте tenensortflow и используйте керасы, это так просто.
import tensorflow as tf
# your code here
with tf.device('/gpu:0'):
model.fit(X, y, epochs=20, batch_size=128, callbacks=callbacks_list)
Ответ 6
Я просто потратил некоторое время, чтобы понять это. Том ответ не полный. Скажем, ваша программа - test.py
, вы хотите использовать gpu0 для запуска этой программы и оставить другие gpus свободными.
Вы должны написать CUDA_VISIBLE_DEVICES=0 python test.py
Заметьте это DEVICES
не DEVICE
Ответ 7
Это работает для меня:
import tensorflow as tf
# your code here
with tf.device('/gpu:0'):
model.compile(...)
model.fit(...)