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

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>

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.