Fai funzionare Keras su un sistema cpu multi-core multi-macchina


10

Sto lavorando sul modello Seq2Seq usando LSTM di Keras (usando lo sfondo Theano) e vorrei parallelizzare i processi, perché anche pochi MB di dati richiedono diverse ore per la formazione.

È chiaro che le GPU sono molto meglio in parallelo rispetto alle CPU. Al momento, ho solo CPU con cui lavorare. Potrei accedere a 16 CPU (2 thread per core X 4 core per socket X 2 socket)

Dal documento di supporto multi-core in Theano, sono riuscito a utilizzare tutti e quattro i core di un singolo socket. Quindi, sostanzialmente la CPU ha un utilizzo del 400% con 4 CPU utilizzate e le restanti 12 CPU rimangono inutilizzate. Come li uso anche io. Tensorflow potrebbe anche essere usato al posto dello sfondo di Theano, se funziona.

inserisci qui la descrizione dell'immagine

Risposte:


6

Per impostare il numero di thread utilizzati in Theano (e, quindi, il numero di core della CPU), è necessario impostare alcuni parametri nell'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'

Ciò dovrebbe consentire di utilizzare tutti i core di tutte le CPU.

Questo, ovviamente, può essere fatto anche in 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>

Sarei grato per questo codice per aver impostato il numero di core in R (sto usando keras in R e sta usando solo una parte dei core ...). Soprattutto per tensorflow. Grazie, Milano
gutompf,

2
È possibile utilizzare Sys.setenv () per impostare le variabili di ambiente in R, in modo simile all'utilizzo di os.environ [var] in Python.
Thomas Cleberg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.