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операции, которые следуют за XNNPACKConv2D/linearоперациями, написанными предыдущим проходом, и объединяет их. -
Удаление Dropout (опция блокировки
MobileOptimizerType::REMOVE_DROPOUT): Этот оптимизационный проход удаляетdropoutиdropout_узлы из этого модуля, когда обучение ложно. -
Поднятие конволюционных упакованных параметров (опция блокировки
MobileOptimizerType::HOIST_CONV_PACKED_PARAMS): Этот оптимизационный проход перемещает упакованные параметры свертки в корневой модуль, чтобы структуры свертки можно было удалить. Это уменьшает размер модели без влияния на численные результаты.
-
Слияние Conv2D + BatchNorm (опция блокировки
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