Подтвердить что ты не робот

Может ли Keras с поддержкой Tensorflow принудительно использовать процессор или графический процессор?

У меня есть Keras, установленный с бэкэндом Tensorflow и CUDA. Я хотел бы иногда по требованию заставить Keras использовать CPU. Можно ли это сделать, не говоря уже об установке отдельного процессора Tensorflow в виртуальной среде? Если да, то как? Если бэкэнд был Theano, флаги могли быть установлены, но я не слышал о флажках Tensorflow, доступных через Keras.

4b9b3361

Ответ 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

Смотрите также

  1. https://github.com/keras-team/keras/issues/152
  2. https://github.com/fchollet/keras/issues/4613

Ответ 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 позволяет запускать операции на ЦП, если выполняется любой из следующих критериев:

  1. для работы нет реализации GPU

  2. нет известных или зарегистрированных устройств с графическим процессором

  3. необходимо совмещать с другими входами ЦП

Все это выполняется в конструкторе моего класса перед любыми другими операциями и полностью отделимо от любой модели или другого кода, который я использую.

Примечание. Для этого необходимо 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(...)