Обучение, распространяемое на движке AI, замедляется, потому что оценка не распространяется - PullRequest
0 голосов
/ 21 ноября 2019

Мы обучали нейронную сеть на движке ИИ с набором данных, состоящим из 96 000 000 точек данных. Нейронная сеть обучалась распределенным образом, и, как обычно, мы использовали 20% данных в качестве оценочных данных. Для обучения распределенных мы использовали оценки TensorFlow и метод tf.estimator.train_and_evaluate. Так как наш набор данных очень большой, наш набор оценок также довольно велик. Если посмотреть на использование процессором главного и рабочего узлов и провести тестирование с набором данных оценки, состоящим только из 100 выборок, кажется, что оценка не распределена и выполняется только на главном узле. Это приводит к увеличению количества потребляемых единиц ОД примерно в 5 раз между наличием данных оценки стандартного размера (20% от общих данных) и наличием только 100 точек данных для оценки, в то время как объем данных обучения одинаков.

Мы видим два возможных решения этой проблемы:

  1. Выполняется ли также оценка, но возможно ли это технически на платформе AI?
  2. Поиск представителя меньшего размеранабор оценочных данных. Существует ли наилучший практический подход для создания этого меньшего набора данных?

Ниже приводится то, что я считаю соответствующей частью кода. Функция 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)

Ответы [ 2 ]

1 голос
/ 21 ноября 2019

TF не так уж удобно для распределенного обучения. Проверьте mxnet . Хорошее вступление здесь .

0 голосов
/ 22 ноября 2019

После просмотра комментариев и более подробного изучения кажется, что оценка не замедляет процесс, но оценка происходит дважды (один раз во время обучения и всегда в конце обучения). Поэтому время обучения больше, просто потому, что нужно ждать окончания оценки. Спасибо за все комментарии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...