Faça o Keras rodar em um sistema de CPU com vários núcleos e várias máquinas

11

Estou trabalhando no modelo Seq2Seq usando LSTM da Keras (usando o Theano background) e gostaria de paralelizar os processos, porque poucos MBs de dados precisam de várias horas para treinamento.

É claro que as GPUs são muito melhores em paralelismo do que as CPUs. No momento, só tenho CPUs para trabalhar. Eu poderia acessar 16 CPUs (2 threads por núcleo X 4 núcleos por soquete X 2 soquetes)

No documento de suporte de vários núcleos no Theano, consegui usar todos os quatro núcleos de um único soquete. Portanto, basicamente, a CPU tem 400% de uso com 4CPUs usadas e as 12 CPUs restantes permanecem sem uso. Como faço para usá-los também. O fluxo de tensão também pode ser usado em vez do segundo plano do Theano, se funcionar.

insira a descrição da imagem aqui

yazhi
fonte

Respostas:

7

Para definir o número de threads usados ​​no Theano (e, portanto, o número de núcleos da CPU), você precisará definir alguns parâmetros no ambiente:

import os
os.environ['MKL_NUM_THREADS'] = '16'
os.environ['GOTO_NUM_THREADS'] = '16'
os.environ['OMP_NUM_THREADS'] = '16'
os.eviron['openmp'] = 'True'

Isso deve permitir que você use todos os núcleos de todas as CPUs.

Obviamente, isso também pode ser feito no Tensorflow:

import tensorflow as tf
from keras.backend import tensorflow_backend as K

with tf.Session(config=tf.ConfigProto(
                    intra_op_parallelism_threads=16)) as sess:
    K.set_session(sess)
    <Your Keras code>
Thomas Cleberg
fonte
Eu ficaria grato por este código por definir o número de núcleos em R (estou usando keras em R e está usando apenas parte dos núcleos ...). Especialmente para fluxo tensor. Obrigado, Milão
gutompf
2
Você pode usar Sys.setenv () para definir variáveis ​​de ambiente em R, semelhante ao uso de os.environ [var] no Python.
Thomas Cleberg 22/01