Я вижу множество различных методов на многих веб-сайтах и руководствах Tensorflow, чтобы приступить к реализации примера распределенного обучения, но не могу очистить свой разум от них.Позвольте мне быть простым и ясным: у меня есть модель, созданная под keras, я настроил TF_CONFIG, чтобы иметь шефа, работника, ps и сервер оценщика, и я предполагаю, что приведенный ниже код должен выполнять эту работу:
runConfig = tf.estimator.RunConfig(
session_config=config,
model_dir=log_dir,
save_summary_steps=1,
save_checkpoints_steps=train_steps
)
estimator = tf.keras.estimator.model_to_estimator(model, model_dir=log_dir, config=runConfig)
train_spec = tf.estimator.TrainSpec(input_fn=lambda: read_datasets(...), max_steps=epochs*train_steps)
eval_spec = tf.estimator.EvalSpec(input_fn=lambda: read_datasets(...), steps=None)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
И тогда я вижу графики производительности и значения на Tensorboard.Я предполагаю, что код для всех серверов точно такой же, за исключением части TF_CONFIG, и для размещения в общей папке требуется только одна копия обучающих данных, а один общий каталог настроен для сохранения параметров модели и контрольных точек, а также главногособирается синхронизировать все при разделении данных между работниками и сохранении модели и сводок.
Здесь есть кое-что, что мне не совсем ясно: я хочу оценить обученную модель на тестовых данных, и яПредположим, что я могу просто выполнить приведенную ниже команду, чтобы получить оценку потерь и точности в объекте словаря:
eval_dic = estimator.evaluate(input_fn=lambda: read_datasets(...), steps=test_steps)
Но этот код выполняется всеми службами (работником, начальником и оценщиком), которые я используюне думаю, что должно быть.Кроме того, результат, который я получаю, просто нулевой.
Кроме того, я вижу страницы о стратегии распределения и ее влиянии на керас и оценщики, которые меня сильно смущают.Мне действительно нужны все эти стратегические вещи, или достаточно вышеприведенного кода?Что насчет input_fn?Я предполагал, что начальник заботится о разделении данных, но в документации по тензорному потоку (https://www.tensorflow.org/guide/distribute_strategy) говорится о различных вещах для реализации keras и оценщика, а мое приложение представляет собой модель keras, инкапсулированную в оценщик! Что мне делать?