Почему инициализация tf.keras model.fit() занимает так много времени? Как это можно оптимизировать?

#python-3.x #tensorflow #tf.keras

#python-3.x #тензорный поток #tf.keras

Вопрос:

Использование tensorflow.keras (2.0-alpha0 с поддержкой GPU) У меня очень долгое время инициализации с помощью tf.keras.model.fit() как для вновь скомпилированных моделей, так и для моделей, ранее сохраненных и перезагруженных.

Я считаю, что это после tf.data.Datasets() уже загружены и предварительно обработаны, поэтому я не понимаю, что занимает так много времени, и нет вывода из TF / Keras:

 2019-04-19 23:29:18.109067: tensorflow/core/common_runtime/gpu/gpu_device.cc:1149] Created TensorFlow device
Resizing images and creating data sets with num_parallel_calls=8
Loading existing model to continue training.
Starting model.fit()
Epoch 1/100
2019-04-19 23:32:22.934394: tensorflow/core/kernels/data/shuffle_dataset_op.cc:150] Shuffle buffer filled.
2019-04-19 23:38:52.374924: tensorflow/core/common_runtime/bfc_allocator.cc:230] Allocator (GPU_0_bfc) ran out of memory trying to allocate 2.62GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available.
  

3 минуты на загрузку модели и заполнение буфера перемешивания и 6 минут на … что? И как можно оптимизировать эту таинственную работу? (5 ГГц 8700K, 32 ГБ ОЗУ, NVME SSD, 1080ti 11G DDR5 — диспетчер задач показывает 100% однопоточное использование ЦП, умеренный доступ к диску, медленное увеличение использования ОЗУ до ~ 28 ГБ максимум, нулевое использование графического процессора в течение этого периода).

Есть ли какой-либо способ сериализовать или сохранить модели более эффективным способом, чтобы их можно было регулярно запускать и останавливать без 10 минут накладных расходов?

Является ли TF / Keras каким-то образом ленивой загрузкой наборов данных и их предварительной обработкой в этот период?

Ответ №1:

Похоже, проблема с использованием нескольких рабочих для tf.data.Datasets() . Из сообщений журнала видно, что вы используете 8 параллельных процессов, что объясняет, почему вы показываете такое высокое использование CPU / RAM. Так что это не проблема с моделью.

Насколько мне известно, первый раз, когда вы используете Datasets, должен быть довольно медленным, но он ускорится после кэширования данных.

Если вызов model.fit() все еще запускается очень медленно, вы можете уменьшить количество процессов до 4 или 2. Это может повлиять на время обучения, поскольку ваш SSD-накопитель может замедлиться из-за необходимости загрузки данных.