Spec-Zone.ru › PyTorch 2

torch.utils.mobile_optimizer

Предупреждение

Этот API находится в стадии бета-тестирования и может быть изменён в ближайшем будущем.

Torch mobile поддерживает утилиту torch.utils.mobile_optimizer.optimize_for_mobile для выполнения списка оптимизационных пассов с модулями в режиме eval. Метод принимает следующие параметры: объект torch.jit.ScriptModule, набор оптимизаций с исключениями, список сохраняемых методов и бэкэнд.

For CPU Backend, by default, if optimization blocklist is None or empty, optimize_for_mobile will run the following optimizations:
  • Слияние Conv2D + BatchNorm (опция исключения mobile_optimizer.MobileOptimizerType.CONV_BN_FUSION): Этот оптимизационный пасс объединяет Conv2d-BatchNorm2d с Conv2d в методе forward этого модуля и всех его подмодулей. Веса и смещения Conv2d соответственно обновляются.
  • Вставка и слияние предварительно упакованных операций (опция исключения mobile_optimizer.MobileOptimizerType.INSERT_FOLD_PREPACK_OPS): Этот оптимизационный пасс переписывает граф, заменяя двумерные свертки и линейные операции их предварительно упакованными аналогами. Предварительно упакованные операции являются состоятельными операциями, требующими создания некоторого состояния, такого как предварительная упаковка весов, и используют это состояние, т. е. предварительно упакованные веса, во время выполнения операций. XNNPACK — один из таких бэкэндов, предоставляющий предварительно упакованные операции с ядрами, оптимизированными для мобильных платформ (например, ARM-процессоров). Предварительная упаковка весов обеспечивает эффективное обращение к памяти и, следовательно, более быстрое выполнение ядер. В данный момент пасс optimize_for_mobile переписывает граф, заменяя Conv2D/Linear 1) операцией, предварительно упаковывающей веса для XNNPACK-операций conv2d/linear, и 2) операцией, принимающей предварительно упакованные веса и активации в качестве входных данных и генерирующей выходные активации. Поскольку операция 1 должна быть выполнена только один раз, мы сливаем предварительную упаковку весов, чтобы она выполнялась только один раз во время загрузки модели. Этот пасс optimize_for_mobile выполняет 1 и 2, а затем сливает, т. е. удаляет, операции предварительной упаковки весов.
  • Слияние ReLU/Hardtanh: XNNPACK-операции поддерживают слияние операций обрезки. То есть обрезка выходных активаций выполняется как часть ядра, включая ядра двумерных свёрок и линейных операций. Таким образом, обрезка фактически выполняется бесплатно. Таким образом, любая операция, которая может быть выражена как операция обрезки, такая как ReLU или hardtanh, может быть слита с предыдущей Conv2D или linear операцией в XNNPACK. Этот пасс переписывает граф, находя ReLU/hardtanh операции, следующие за XNNPACK Conv2D/linear операциями, созданными предыдущим пассом, и сливает их вместе.
  • Удаление Dropout (опция исключения mobile_optimizer.MobileOptimizerType.REMOVE_DROPOUT): Этот оптимизационный пасс удаляет dropout и dropout_ узлы из этого модуля, когда обучение выключено.
  • Поднятие свёрточных упакованных параметров (опция исключения mobile_optimizer.MobileOptimizerType.HOIST_CONV_PACKED_PARAMS): Этот оптимизационный пасс перемещает свёрточные упакованные параметры в корневой модуль, чтобы можно было удалить структуры свёртки. Это уменьшает размер модели без влияния на численную точность.
  • Слияние Add/ReLU (опция исключения mobile_optimizer.MobileOptimizerType.FUSE_ADD_RELU): Этот пасс находит примеры relu операций, следующих за add операциями, и сливает их в одну add_relu.
for Vulkan Backend, by default, if optimization blocklist is None or empty, optimize_for_mobile will run the following optimization:
  • Автоматическая передача на GPU (опция исключения mobile_optimizer.MobileOptimizerType.VULKAN_AUTOMATIC_GPU_TRANSFER): Этот оптимизационный пасс переписывает граф таким образом, что перемещение входных и выходных данных на GPU и с него становится частью модели.

optimize_for_mobile также вызовет пасс freeze_module, который сохраняет только forward метод. Если вам нужно сохранить другие методы, добавьте их в список сохраняемых методов и передайте его в метод.

torch.utils.mobile_optimizer.optimize_for_mobile(script_module, optimization_blocklist=None, preserved_methods=None, backend='CPU') [source]
Параметры
  • script_module (ScriptModule) – Экземпляр torch script модуля с типом ScriptModule.
  • optimization_blocklist (Optional[Set[_MobileOptimizerType]]) – Множество с типом MobileOptimizerType. Если множество не передано, метод оптимизации запустит все оптимизационные пассы; в противном случае, метод оптимизации запустит оптимизационные пассы, которые не включены в optimization_blocklist.
  • preserved_methods (Optional[List]) – Список методов, которые необходимо сохранить при вызове пасса freeze_module.
  • backend (str) – Тип устройства для запуска результирующей модели (‘CPU’(по умолчанию), ‘Vulkan’ или ‘Metal’).
Возвращает

Новый оптимизированный torch script модуль

Тип возвращаемого значения

RecursiveScriptModule

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/mobile_optimizer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API