Spec-Zone.ru › PyTorch 1

torch.utils.mobile_optimizer

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

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

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

By default, if optimization blocklist is None or empty, optimize_for_mobile will run the following optimizations:
  • Слияние Conv2D + BatchNorm (опция блокировки MobileOptimizerType::CONV_BN_FUSION): Этот оптимизационный проход объединяет Conv2d-BatchNorm2d в Conv2d в методе forward этого модуля и всех его подмодулей. Веса и смещения Conv2d соответственно обновляются.
  • Вставка и объединение предварительно упакованных операций (опция блокировки 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 (опция блокировки MobileOptimizerType::REMOVE_DROPOUT): Этот оптимизационный проход удаляет dropout и dropout_ узлы из этого модуля, когда обучение ложно.
  • Поднятие конволюционных упакованных параметров (опция блокировки MobileOptimizerType::HOIST_CONV_PACKED_PARAMS): Этот оптимизационный проход перемещает упакованные параметры свертки в корневой модуль, чтобы структуры свертки можно было удалить. Это уменьшает размер модели без влияния на численные результаты.

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/1.13/mobile_optimizer.html

Spec-Zone.ru

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