torch.utils.mobile_optimizer¶
警告
不再主动支持 PyTorch Mobile。请查看 ExecuTorch、PyTorch 的 全新的设备端推理库。您还可以查看 有关 XNNPACK 和 Vulkan 委托的文档。
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-BatchNorm2d
Conv2d
forward
Conv2d
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_mobile
Conv2D/Linear
optimize_for_mobile
ReLU/Hardtanh 融合:XNNPACK 运算支持钳位融合。也就是说,output activation 的钳制是作为 kernel 的一部分完成的,包括 2D 卷积和 linear op kernel 。因此,夹紧实际上是免费的。因此,任何可以表示为钳位运算的 op (例如 或 )都可以与 XNNPACK 中的 previous 或 op 融合。此通道通过查找遵循 XNNPACK 运算(由前一通道写入)的运算来重写图形,并将它们融合在一起。
ReLU
hardtanh
Conv2D
linear
ReLU/hardtanh
Conv2D/linear
删除 dropout (阻止列表选项 mobile_optimizer。MobileOptimizerType.REMOVE_DROPOUT):当 training 为 false 时,此优化传递会从此模块中删除 和 节点。
dropout
dropout_
Conv 打包参数提升(阻止列表选项 mobile_optimizer。MobileOptimizerType.HOIST_CONV_PACKED_PARAMS):此优化过程将卷积打包的参数移动到根模块,以便可以删除卷积结构。这样可以减小模型大小,而不会影响数值。
Add/ReLU 融合(阻止列表选项 mobile_optimizer。MobileOptimizerType.FUSE_ADD_RELU):此通道查找跟随操作的操作实例,并将它们融合为单个 。
relu
add
add_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_mobile(script_module, optimization_blocklist=无, preserved_methods=无, backend='CPU')[来源]¶
优化 torch 脚本模块以进行移动部署。
- 参数
script_module (ScriptModule) – 类型为 ScriptModule 的 torch 脚本模块实例。
optimization_blocklist (Optional[Set[_MobileOptimizerType]]) – 类型为 MobileOptimizerType 的集。如果未传递 set, optimization 方法将运行所有 Optimizer Pass;否则,优化器 method 将运行未包含在 optimization_blocklist 中的优化通道。
preserved_methods (Optional[List]) – 调用freeze_module pass 时需要保留的方法列表
backend (str) – 用于运行结果模型的设备类型('CPU'(默认)、'Vulkan' 或 'Metal')。
- 返回
新的优化 torch 脚本模块
- 返回类型
递归脚本模块