目录

torch.utils.mobile_optimizer

警告

不再主动支持 PyTorch Mobile。请查看 ExecuTorch、PyTorch 的 全新的设备端推理库。您还可以查看 有关 XNNPACKVulkan 委托的文档。

Torch 移动版支持实用程序在 eval 模式下运行带有模块的优化传递列表。 该方法采用以下参数:torch.jit.ScriptModule 对象、黑名单优化集、保留的方法列表和后端。torch.utils.mobile_optimizer.optimize_for_mobile

对于 CPU Backend,默认情况下,如果优化 blocklist 为 None 或为空,将运行以下优化:optimize_for_mobile
  • Conv2D + BatchNorm 融合(mobile_optimizer 的黑名单选项。MobileOptimizerType.CONV_BN_FUSION):此优化传递折叠到此模块及其所有子模块的 in 方法中。的权重和偏差会相应地更新。Conv2d-BatchNorm2dConv2dforwardConv2d

  • Insert and Fold 预打包操作(阻止列表选项 mobile_optimizer。MobileOptimizerType.INSERT_FOLD_PREPACK_OPS):此优化过程重写了图形,以将 2D 卷积和线性运算替换为其预打包的对应项。预打包操作是有状态操作,因为它们需要创建一些状态,例如权重预打包,并在操作执行期间使用此状态,即预打包权重。XNNPACK 就是这样一个后端,它提供预打包的运算,其内核针对移动平台(如 ARM CPU)进行了优化。预打包权重可实现高效的内存访问,从而加快内核执行速度。目前,pass 重写了图形以替换为 1) 为 XNNPACK conv2d/线性操作预打包权重的 op,以及 2) 将预打包的权重和激活作为输入并生成输出激活的 op。由于 1 只需要执行一次,因此我们将重量预包装折叠,以便在模型加载时仅执行一次。这个过程做 1 和 2,然后折叠,即删除,重量预包装操作。optimize_for_mobileConv2D/Linearoptimize_for_mobile

  • ReLU/Hardtanh 融合:XNNPACK 运算支持钳位融合。也就是说,output activation 的钳制是作为 kernel 的一部分完成的,包括 2D 卷积和 linear op kernel 。因此,夹紧实际上是免费的。因此,任何可以表示为钳位运算的 op (例如 或 )都可以与 XNNPACK 中的 previous 或 op 融合。此通道通过查找遵循 XNNPACK 运算(由前一通道写入)的运算来重写图形,并将它们融合在一起。ReLUhardtanhConv2DlinearReLU/hardtanhConv2D/linear

  • 删除 dropout (阻止列表选项 mobile_optimizer。MobileOptimizerType.REMOVE_DROPOUT):当 training 为 false 时,此优化传递会从此模块中删除 和 节点。dropoutdropout_

  • Conv 打包参数提升(阻止列表选项 mobile_optimizer。MobileOptimizerType.HOIST_CONV_PACKED_PARAMS):此优化过程将卷积打包的参数移动到根模块,以便可以删除卷积结构。这样可以减小模型大小,而不会影响数值。

  • Add/ReLU 融合(阻止列表选项 mobile_optimizer。MobileOptimizerType.FUSE_ADD_RELU):此通道查找跟随操作的操作实例,并将它们融合为单个 。reluaddadd_relu

对于 Vulkan Backend,默认情况下,如果优化黑名单为 None 或为空,将运行以下优化:optimize_for_mobile
  • 自动 GPU 传输(mobile_optimizer 的黑名单选项。MobileOptimizerType.VULKAN_AUTOMATIC_GPU_TRANSFER):此优化过程重写图形,以便将输入和输出数据移入和移出 GPU 成为模型的一部分。

optimize_for_mobile还将调用 freeze_module pass,它只保留 method。如果你有其他需要保留的方法,请将它们添加到 preserved method 列表中并传递到该方法中。forward

torch.utils.mobile_optimizer。optimize_for_mobilescript_moduleoptimization_blocklist=preserved_methods=backend='CPU'[来源]

优化 torch 脚本模块以进行移动部署。

参数
  • script_moduleScriptModule) – 类型为 ScriptModule 的 torch 脚本模块实例。

  • optimization_blocklistOptional[Set[_MobileOptimizerType]]) – 类型为 MobileOptimizerType 的集。如果未传递 set, optimization 方法将运行所有 Optimizer Pass;否则,优化器 method 将运行未包含在 optimization_blocklist 中的优化通道。

  • preserved_methodsOptional[List]) – 调用freeze_module pass 时需要保留的方法列表

  • backendstr) – 用于运行结果模型的设备类型('CPU'(默认)、'Vulkan' 或 'Metal')。

返回

新的优化 torch 脚本模块

返回类型

递归脚本模块

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源