Мы обучали нейронную сеть на движке ИИ с набором данных, состоящим из 96 000 000 точек данных. Нейронная сеть обучалась распределенным образом, и, как обычно, мы использовали 20% данных в качестве оценочных данных. Для обучения распределенных мы использовали оценки TensorFlow и метод tf.estimator.train_and_evaluate. Так как наш набор данных очень большой, наш набор оценок также довольно велик. Если посмотреть на использование процессором главного и рабочего узлов и провести тестирование с набором данных оценки, состоящим только из 100 выборок, кажется, что оценка не распределена и выполняется только на главном узле. Это приводит к увеличению количества потребляемых единиц ОД примерно в 5 раз между наличием данных оценки стандартного размера (20% от общих данных) и наличием только 100 точек данных для оценки, в то время как объем данных обучения одинаков.
Мы видим два возможных решения этой проблемы:
- Выполняется ли также оценка, но возможно ли это технически на платформе AI?
- Поиск представителя меньшего размеранабор оценочных данных. Существует ли наилучший практический подход для создания этого меньшего набора данных?
Ниже приводится то, что я считаю соответствующей частью кода. Функция input_fn возвращает пакетный набор данных tf.data.Dat.
run_config = tf.estimator.RunConfig(
save_checkpoints_steps=1000, keep_checkpoint_max=10, tf_random_seed=random_seed
)
myestimator = _get_estimator(
hidden_neurons, run_config, learning_rate, output_dir, my_rmse
)
# input_fn for tf.estimator Spec must be a callable function without args.
# So we pack our input_fn in a lambda function
callable_train_input_fn = lambda: input_fn(
filenames=train_paths,
num_epochs=num_epochs,
batch_size=train_batch_size,
num_parallel_reads=num_parallel_reads,
random_seed=random_seed,
input_format=input_format,
)
callable_eval_input_fn = lambda: input_fn(
filenames=eval_paths,
num_epochs=num_epochs,
batch_size=eval_batch_size,
shuffle=False,
num_parallel_reads=num_parallel_reads,
random_seed=random_seed,
input_format=input_format,
)
train_spec = tf.estimator.TrainSpec(
input_fn=callable_train_input_fn, max_steps=max_steps_train
)
eval_spec = tf.estimator.EvalSpec(
input_fn=callable_eval_input_fn,
steps=max_steps_eval,
throttle_secs=throttle_secs,
exporters=[exporter],
name="taxifare-eval",
)
tf.estimator.train_and_evaluate(myestimator, train_spec, eval_spec)