Источник | Публичный аккаунт TensorFlow
Мы рады объявить о добавлении в TensorFlow инструментария оптимизации — набора методов, которые могут использовать как начинающие, так и опытные разработчики для оптимизации моделей машинного обучения для развертывания и выполнения.
Мы ожидаем, что эти методы очень полезны для модели Tensorflow, оптимизируют любую готов к развертыванию, но для разработчиков Tensorflow Lite, эти технологии особенно важны, потому что они будут нервными, когда модель памяти, предусмотренная на устройстве, ограничения мощности и ограничениях хранения таких условий Отказ Если вы не пробовали Tensorflow Lite, вы можете нажать здесь для получения дополнительной информации. Примечание: ссылка здесьwww.tensorflow.org/lite/
Оптимизация моделей для уменьшения размера, задержки и мощности с незначительной потерей точностиПервый метод, который мы недавно поддержали, — это квантование после обучения для инструмента преобразования TensorFlow Lite. Для связанных моделей машинного обучения этот метод может обеспечить 4-кратное сжатие и 3-кратное ускорение выполнения.
Благодаря квантованию моделей разработчики также могут получить дополнительные преимущества за счет снижения энергопотребления. Это помогает разработчикам развертывать модели на периферийных устройствах, отличных от мобильных телефонов.
Включить квантование после обучения
Мы интегрировали методы квантования после обучения в инструмент преобразования TensorFlow Lite. Начать работу с этой техникой легко: после создания модели TensorFlow разработчики просто включают флаг «post_training_quantize» в инструменте преобразования TensorFlow Lite. Предполагая, что сохраненная модель хранится в save_model_dir , можно создать квантованный плоский буфер tflite:
converter=tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
converter.post_training_quantize=True
tflite_quantized_model=converter.convert()
open(“quantized_model.tflite”, “wb”).write(tflite_quantized_model)
Наш учебник подробно расскажет, как это сделать. Мы надеемся включить этот метод в общий инструментарий TensorFlow в будущем, чтобы его можно было использовать для развертывания на платформах, которые в настоящее время не поддерживаются TensorFlow Lite. Примечание: ссылка на учебникGitHub.com/tensorflow/…
Преимущества квантования после обучения
-
Уменьшить размер модели в 4 раза
-
Для моделей, состоящих в основном из сверточных слоев, он может работать на 10–50% быстрее.
-
В 3 раза быстрее модели на основе RNN
-
Мы ожидаем меньшего энергопотребления для большинства моделей из-за более низких требований к памяти и вычислительным ресурсам.
На приведенных ниже графиках показано уменьшение размера и ускорение выполнения для нескольких моделей (измерено на одноядерном телефоне Android Pixel 2).
Рис. 1. Сравнение размеров модели. Оптимизированная модель почти в 4 раза меньше. Рис. 2. Сравнение задержки: оптимизированная модель в 1,2–1,4 раза быстрееЭти улучшения скорости и уменьшение размера модели практически не влияют на точность. Как правило, модели, которые уже малы для конкретной задачи (например, MobileNet v1 для классификации изображений), могут потерять большую точность. Мы предоставляем предварительно обученные полностью квантованные модели для многих из этих моделей. Примечание. Ссылка на полную квантованную модель.GitHub.com/tensorflow/…
Рис. 3. Сравнение точности. Снижение точности оптимизированной модели незначительно (кроме MobileNet).Мы надеемся продолжить улучшать результаты в будущем, пожалуйста, обратитесь к руководству по оптимизации модели для получения последних данных измерений. Примечание. Ссылка для оптимизации моделиwoohoo.tensorflow.org/performance…
Как работает квантование после обучения
За кулисами мы оптимизируем таким образом (также известным как квантование), уменьшая точность параметров (то есть весов нейронной сети) от их обученных 32-битных значений с плавающей запятой до меньших и более эффективных 8-битных целочисленных значений. . Дополнительные сведения см. в руководстве по квантованию после обучения. Примечание. Ссылка на руководство по квантованию после обученияwoohoo.tensorflow.org/performance…
Эти оптимизации гарантируют, что определения операций пониженной точности в результирующих моделях сочетаются с реализациями ядра, которые используют смесь математики с фиксированной и плавающей запятой. Это позволяет модели быстро выполнять самые тяжелые вычисления с более низкой точностью, но наиболее чувствительные вычисления с более высокой точностью, поэтому такие задачи обычно практически не приводят к конечной потере точности, в то время как скорость выполнения намного выше, чем чистый метод с плавающей запятой. Если в операции нет подходящего «смешанного» ядра или если инструментарий считает это ненужным, модель повторно преобразует эти параметры для выполнения с более высокой точностью с плавающей запятой. См. страницу квантования после обучения для получения списка поддерживаемых операций смешивания. Примечание. Квантизируйте ссылки на страницы после обучения.woohoo.tensorflow.org/performance…
будущая работа
Мы продолжим совершенствовать методы квантования после обучения, одновременно разрабатывая другие методы, облегчающие оптимизацию модели. Мы интегрируем эти методы в соответствующий рабочий процесс TensorFlow, чтобы упростить их использование.
Квантование после обучения — это первый продукт в наборе инструментов оптимизации, который мы разрабатываем. Мы с нетерпением ждем обратной связи от разработчиков.
Пожалуйста, отправляйте вопросы на GitHub и задавайте вопросы на Stack Overflow. Примечание: ссылка на GitHubGitHub.com/tensorflow/…Ссылка на переполнение стекастек overflow.com/questions/he…
Спасибо
Большое спасибо Raghu Krishnamoorthi, Raziel Alvrarez, Suharsh Sivakumar, Yunlu Li, Alan Chiao, Pete Warden, Shashi Shekhar, Sarah Sirajuddin и Tim Davis за их важный вклад. Также большое спасибо Марку Даусту за помощь в создании учебника Colab. Спасибо Билли Ламберте и Лоуренсу Чену за помощь в создании сайта. Примечание. Ссылка на учебник ColabGitHub.com/tensorflow/…ссылка на сайтwoohoo.tensorflow.org/performance…