Можно ли тренироваться с tenorflow 1, используя float16? - PullRequest
1 голос
/ 11 февраля 2020

В настоящее время обучаем керас на модели tenorflow с настройкой по умолчанию - float32.

После обучения сеть квантуется: отбрасывает веса на поплавок16. Это улучшает производительность на ~ x3 при сохранении той же точности.

Я пытался тренироваться с самого начала, используя float16, и с треском провалился. Я не могу найти ссылку, которая объясняет, если это возможно, а если нет, то почему это невозможно.

1 Ответ

2 голосов
/ 11 февраля 2020

Автоматическая смешанная точность от NVidia может быть способом до go.

Из того, что я собрал с 1.14, оно поддерживается (поддерживается) в апстриме. Все, что вам нужно сделать, это обернуть ваш оптимизатор следующим образом:

opt = tf.train.experimental.enable_mixed_precision_graph_rewrite(opt)

Вам также может потребоваться установить специфику c environment variable в вашем скрипте Python, а именно:

os.environ[‘TF_ENABLE_AUTO_MIXED_PRECISION’] = ‘1’

Выше уже должны использоваться хорошие методы обучения смешанной точности (например, масштабирование потерь, ведение float32, где необходимо и т. Д. c.).

Хорошим ресурсом для этого решения должна быть официальная документация NVidia .

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

Я бы посоветовал не использовать ручное приведение, поскольку вы можете легко потерять точность (например, в статистике BatchNorm, используемой при выводе), если вы не знаете входы и выходы из спецификаций c слои.

Кроме того, вы также можете проверить тип Google bfloat16 (мозг-плавающий), который имеет exponent часть float32 (8 бит) и меньшую дробь. Это позволяет ему сохранять больший диапазон значений (например, при вычислении градиентов) по сравнению с float16, что позволяет избежать loss scaling.

Выше (bfloat16) должен быть полезен, в основном, в TPU, поддержка AFAIK NVidia GPU не слишком велика (кто-то поправит меня, если я ошибаюсь). Некоторая информация здесь .

...