Обучение модели Keras параллельно в Apache Spark - PullRequest
0 голосов
/ 04 октября 2019

\ Я пытаюсь обучить несколько моделей Keras параллельно, используя Apache Spark и Elephas. Вот код для того, что я пытаюсь сделать:

train_data = pd.read_csv("csv_files/stats.csv")
timesteps = 30

model_1, rdd1 = train_LSTM_model(spark_context = sc, dataframe= train_data, column_number=1 ,timesteps = 30)
model_2, rdd2 = train_LSTM_model(spark_context = sc, dataframe = train_data, column_number=2,timesteps = 30)
model_3, rdd3 = train_LSTM_model(spark_context = sc, dataframe = train_data, column_number=3,timesteps = 30)
model_4, rdd4 = train_LSTM_model(spark_context = sc, dataframe = train_data, column_number=4,timesteps = 30)
model_5, rdd5 = train_LSTM_model(spark_context = sc, dataframe = train_data, column_number=5,timesteps = 30)
model_6, rdd6 = train_LSTM_model(spark_context = sc, dataframe = train_data, column_number=6,timesteps = 30)
# Fitting model to RDD
spark_model_1 = fit_to_spark_model(keras_model=model_no_programs_run, rdd = rdd1)
spark_model_2 = fit_to_spark_model(keras_model=model_duration_time, rdd = rdd2)
spark_model_3 = fit_to_spark_model(keras_model=model_avg_duration_time, rdd = rdd3)
spark_model_4 = fit_to_spark_model(keras_model=model_no_processed_records, rdd = rdd4)
spark_model_5 = fit_to_spark_model(keras_model=model_status_states, rdd = rdd5)
spark_model_6 = fit_to_spark_model(keras_model=model_failure_within_period, rdd = rdd6)


# HOW TO RUN THE SCRIPT
#spark-submit --driver-memory 1G ./stats_app.py

Много кода абстрагировано, но в основном функция train_LSTM_model() возвращает скомпилированную модель Keras вместе с RDD. Rdd_1, rdd_2, rdd_ # и т. Д. Принадлежат: rdd = to_simple_rdd(spark_context, X_train, y_train) внутри функции. X_train и y_train были извлечены из переданного в кадре данных в каждую train_LSTM_model() функцию.

Кроме того, вот что делает функция fit_to_spark_model():

def fit_to_spark_model(keras_model, rdd):
   spark_model = SparkModel(keras_model, frequency='epoch', mode='asynchronous')
   spark_model.fit(rdd, epochs=20, batch_size=32, verbose=0, validation_split=0.25)
   return spark_model

Делает ли этосмысл одновременно тренировать несколько моделей Keras на узлах Spark Worker? Или мне придется использовать другой подход? Не уверен, что мне нужен только один RDD или несколько, как я сейчас делаю. Спасибо за тонну.

1 Ответ

0 голосов
/ 05 октября 2019

Я надеюсь, что вы полностью понимаете работу Spark & ​​Elephas перед ее внедрением. Если эти шаги вы сделали для создания распараллеливания с помощью Spark, то позвольте мне пояснить, что это абсолютно не нужно. Параллелизм достигается внутренним искром без какого-либо явного кодирования со стороны пользователя.

train_LSTM_model () - это возвращает модель Keras и создает rdd, используя to_simple_rdd метод Elephas.

Из базовой документацииElephas, я подозреваю, что все rdd и модели, возвращаемые из функции train_LSTM_model, будут одинаковыми (если вы не вносите никаких изменений в размеры данных в кодовом блоке train_LSTM_model). Таким образом, вы в конечном итоге будете создавать аналогичные модели на одном и том же кадре данных несколько раз.

Даже если моя предпосылка о том, что модели и данные одинаковы, неверна, я предлагаю вам запускать каждую модель отдельно, так как это может засорить искру. сервер, потенциально не высвобождая достаточное количество рабочих узлов для каждой модели, что приводит к тому, что каждый прогон модели занимает много времени.

...