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

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>

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.