Uma maneira bastante separável de fazer isso é usar
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)
Aqui, com booleans
GPU
e CPU
, indicamos se gostaríamos de executar nosso código com a GPU ou CPU, definindo rigidamente o número de GPUs e CPUs que a sessão do Tensorflow pode acessar. As variáveis num_GPU
e num_CPU
definem este valor. num_cores
em seguida, define o número de núcleos de CPU disponíveis para uso via intra_op_parallelism_threads
e inter_op_parallelism_threads
.
A intra_op_parallelism_threads
variável determina o número de threads que uma operação paralela em um único nó no gráfico de computação pode usar (intra). Enquanto a inter_ops_parallelism_threads
variável define o número de threads acessíveis para operações paralelas entre os nós do gráfico de computação (inter).
allow_soft_placement
permite que as operações sejam executadas na CPU se qualquer um dos seguintes critérios forem atendidos:
não há implementação de GPU para a operação
não há dispositivos GPU conhecidos ou registrados
há uma necessidade de co-localizar com outras entradas da CPU
Tudo isso é executado no construtor da minha classe antes de qualquer outra operação e é completamente separável de qualquer modelo ou outro código que eu uso.
Nota: Isso requer tensorflow-gpu
e cuda
/ cudnn
deve ser instalado porque a opção é fornecida para usar uma GPU.
Refs:
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
como na resposta abaixo