Eu tenho o Keras instalado com o back-end Tensorflow e CUDA. Às vezes, eu gostaria de forçar Keras a usar a CPU. Isso pode ser feito sem dizer instalar um Tensorflow separado apenas de CPU em um ambiente virtual? Se sim, como? Se o backend fosse Theano, os sinalizadores poderiam ser definidos, mas eu não ouvi falar dos sinalizadores do Tensorflow acessíveis via Keras.
python
machine-learning
tensorflow
keras
mikal94305
fonte
fonte
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
como na resposta abaixoCUDA_DEVICE_ORDER=PCI_BUS_ID
na edição nº 152import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"] = ""
, agora como faço para "desfazer" isso? Gostaria que Keras usasse a GPU novamente.Uma maneira bastante separável de fazer isso é usar
Aqui, com
booleans
GPU
eCPU
, 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áveisnum_GPU
enum_CPU
definem este valor.num_cores
em seguida, define o número de núcleos de CPU disponíveis para uso viaintra_op_parallelism_threads
einter_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 ainter_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
ecuda
/cudnn
deve ser instalado porque a opção é fornecida para usar uma GPU.Refs:
O que significam as opções em ConfigProto, como allow_soft_placement e log_device_placement?
Significado de inter_op_parallelism_threads e intra_op_parallelism_threads
fonte
allow_soft_placement
,intra_op_parallelism_threads
,inter_op_parallelism_threads
inter
/intra_op_parallelism_threads
referem-se a operações de CPU ou GPU?Isso funcionou para mim (win10), coloque antes de importar keras:
fonte
Basta importar tensortflow e usar keras, é muito fácil.
fonte
tf.device('/cpu:0')
, ainda posso ver a memória sendo alocada para o python posteriormente comnvidia-smi
.with
?De acordo com o tutorial do keras , você pode simplesmente usar o mesmo
tf.device
escopo do tensorflow regular:fonte
with
pode ser qualquer código Keras.Acabei de passar algum tempo descobrindo. A resposta de Thoma não está completa. Diga que seu programa é
test.py
, você deseja usar gpu0 para executar este programa e manter outros gpus livres.Você deveria escrever
CUDA_VISIBLE_DEVICES=0 python test.py
Observe que
DEVICES
não éDEVICE
fonte
Para pessoas que trabalham no PyCharm e para forçar a CPU, você pode adicionar a seguinte linha na configuração Executar / Depurar, em Variáveis de ambiente:
fonte