Spraw, aby Keras działał na wielordzeniowym systemie wielordzeniowym

11

Pracuję na modelu Seq2Seq przy użyciu LSTM z Keras (przy użyciu tła Theano) i chciałbym zrównoleglić procesy, ponieważ nawet kilka MB danych potrzebuje kilku godzin na szkolenie.

Oczywiste jest, że procesory graficzne są znacznie lepsze w równoległości niż procesory. W tej chwili mam tylko procesory do pracy. Miałem dostęp do 16 procesorów (2 wątki na rdzeń X 4 rdzenie na gniazdo X 2 gniazda)

Z DOC wielordzeniowych wsparcia w Theano, udało mi się wykorzystać wszystkie cztery rdzenie z jednego gniazda. Zasadniczo więc procesor jest wykorzystywany w 400% przy 4 procesorach, a pozostałe 12 procesorów pozostaje nieużywanych. Jak też z nich korzystać. Tensorflow można również zastosować zamiast tła Theano, jeśli działa.

wprowadź opis zdjęcia tutaj

yazhi
źródło

Odpowiedzi:

7

Aby ustawić liczbę wątków używanych w Theano (a tym samym liczbę rdzeni procesora), musisz ustawić kilka parametrów w środowisku:

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

Powinno to pozwolić na użycie wszystkich rdzeni wszystkich procesorów.

Można to oczywiście zrobić również w 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
źródło
Byłbym wdzięczny za ten kod do ustawiania liczby rdzeni w R (używam keras w R i używa tylko części rdzeni ...). Specjalnie dla tensorflow. Dzięki, Milan
gutompf
2
Możesz użyć Sys.setenv (), aby ustawić zmienne środowiskowe w R, podobnie jak przy użyciu os.environ [var] w Pythonie.
Thomas Cleberg