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/Linear1) операцией, предварительно упаковывающей веса для XNNPACK-операций conv2d/linear, и 2) операцией, принимающей предварительно упакованные веса и активации в качестве входных данных и генерирующей выходные активации. Поскольку операция 1 должна быть выполнена только один раз, мы сливаем предварительную упаковку весов, чтобы она выполнялась только один раз во время загрузки модели. Этот пассoptimize_for_mobileвыполняет 1 и 2, а затем сливает, т. е. удаляет, операции предварительной упаковки весов. -
Слияние ReLU/Hardtanh: XNNPACK-операции поддерживают слияние операций обрезки. То есть обрезка выходных активаций выполняется как часть ядра, включая ядра двумерных свёрок и линейных операций. Таким образом, обрезка фактически выполняется бесплатно. Таким образом, любая операция, которая может быть выражена как операция обрезки, такая как
ReLUилиhardtanh, может быть слита с предыдущейConv2Dилиlinearоперацией в XNNPACK. Этот пасс переписывает граф, находяReLU/hardtanhоперации, следующие за XNNPACKConv2D/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.
-
Слияние Conv2D + BatchNorm (опция исключения
-
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 и с него становится частью модели.
-
Автоматическая передача на 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