Я хочу пройти обучение по нейронной сети в Tensorflow / Keras, но предпочитаю использовать многопроцессорный модуль python для максимального использования системных ресурсов и экономии времени. То, что я делаю, просто так (я хочу запустить этот код в системе без графического процессора или с одним или несколькими графическими процессорами):
import ... (required modules)
from multiprocessing import Pool
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
tf.keras.backend.set_session(sess)
... some tf and non-tf variable initializations...
... some functions to facilitate reading tensorflow datasets in TFRecord format...
... function defining keras model...
# Main worker function
def doWork(args):
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras.models import load_model
train_data = read_datasets(...)
val_data = read_datasets(...)
test_data = read_datasets(...)
if (NumGPUs > 1):
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = keras_model(...)
model.compile(...)
else:
model = keras_model(...)
model.compile(...)
model.fit(train_data, epochs=epochs, steps_per_epoch=train_steps, ...)
_, test_acc = model.evaluate(test_data, steps=test_steps)
...log results...
if __name__ == '__main__':
pool = Pool(processes=2)
a1 = <set of parameters for the first run>
a1 = <set of parameters for the second run>
pool.map(doWork, (a1, a2))
Я могу запустить этот код на разных компьютерах и получить свои результаты, ноиногда я сталкиваюсь с системными перебоями (особенно если я хочу прервать выполнение нажатием CTRL + C) или завершением программы с различными ошибками, и я думаю, что вышеописанное не является правильным стилем комбинирования многопроцессорной обработки Tensorflow / Keras и Python. Каков правильный стиль написания кода выше?