tensorflow как уменьшить высокую нагрузку «от устройства к устройству»

#tensorflow #optimization #gpu

#tensorflow #оптимизация #графический процессор

Вопрос:

Я профилировал модель, которую я запускаю, и подавляющее большинство времени на каждом шаге (295 из 320 мс) занимают операции «от устройства к устройству» (см. Изображение). Я предполагаю, что это означает, что загрузка данных с моего процессора на мой графический процессор и обратно является узким местом.

Я запускаю это на одной машине. Данные хранятся на твердотельном накопителе и передаются в графический процессор. Я использую tf.data от tensorflow.Dataset API и выполнение всех рекомендуемых действий, таких как предварительная выборка и num_parallel_calls=tf.data.experimental.AUTOTUNE

Мои вопросы: (1) Верно ли мое предположение? (2) Как мне уменьшить эту огромную нагрузку на мою модель?

Обзор профилирования Tensorboard

Комментарии:

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

2. спасибо за комментарий, нет, это на одной машине, к вопросу добавлено разъяснение.

3. Вы использовали tf.data. Набор данных для входного конвейера? Если да, выполняли ли вы предварительную выборку данных в конце конвейера? Возможно, это помогло бы вам.

4. спасибо, Александр, я использую tf.data. Набор данных и предварительная выборка строго. Я добавлю это к вопросу

Ответ №1:

Не правильный ответ, но это что-то; используя смешанное обучение точности tensorflow, я смог сократить время «от устройства к устройству» до ~ 145 мс. Это все еще огромная нагрузка по сравнению со всем остальным профилированным, и я хотел бы иметь возможность уменьшить ее еще больше.

Я тоже не знаю, почему это помогло. Я предполагаю, что mp-обучение означает, что передается меньшее количество байтов, поэтому, возможно, это помогает.

Новый обзор профилирования Tensorboard