• 文档 >
  • 模块代码 >
  • torch >
  • torch.nn.utils.memory_format
快捷键

torch.nn.utils.memory_format 的源代码

# mypy: 允许未类型化定义
导入 火炬


[文档]def 转换 conv2d 权重内存格式(模块, 内存格式): r将 ``nn.Conv2d.weight`` 的 ``memory_format`` 转换为 ``memory_format``。 转换递归地应用于嵌套的 `nn.Module`,包括 `module`。 注意,它只更改内存格式,但不改变每个维度的语义。 此函数用于简化计算以采用 NHWC 内核,这 在具有计算能力 >= 7.0 的 CUDA 设备上对 fp16 数据提供了相当大的加速。 .. 注意:: 调用 `model.to(memory_format=torch.channels_last)` 更加激进 比起实用函数 `convert_conv2d_weight_memory_format`。任何 具有四维权重的层都会受到 `model.to` 的影响,这并不 一定能够从转换为指定的 `memory_format` 中受益。 我们有信心的一点是,在 cuDNN 中进行 NHWC(channels_last)转换,因为即使在需要应用置换输入张量的情况下,运行卷积在 NHWC 中也是有利的。 因此,我们的策略是仅将卷积的权重转换为 NHWC 格式。 即使在必须对输入张量进行置换的情况下,这也很有益。 因此,我们的策略是仅将卷积的权重转换为 NHWC 格式。 channels_last. 这确保了; 1. 将使用快速卷积核,其好处可能 超出排列(如果输入不是同一格式)的开销。 2. 在对层不产生益处的层上不应用不必要的排列。 从内存格式转换而来。 最佳情况是,卷积层之间的层是通道。 最后兼容。输入张量在遇到第一个卷积层时会转换为通道最后这种内存格式,并保持在该内存格式中。 遇到第一个卷积层时会被转换为通道最后这种内存格式,并保持在该内存格式中。 因此,以下卷积不需要对输入张量进行置换。 如果通道的最后一层不兼容层位于卷积 层,我们需要将输入张量重新排列回连续格式 为此层。输入张量将通过剩余的层 连续格式,在遇到通道时可以转换为通道最后 另一个卷积层。没有必要将这种转换传播到早期层,因为大多数层对“memory_format”相当不敏感 。因为大多数层对“memory_format”相当不敏感 ``memory_format``。 这个声明可能会改变,当 PyTorch 支持排列融合时, 可能还有比在卷积之前立即融合排列更好的位置, Args: 模块(nn.Module):``nn.Conv2d`` 和 ``nn.ConvTranspose2d`` 或容器 ``nn.Module`` memory_format: 用户指定的 ``memory_format``, 例如 ``torch.channels_last`` 或 ``torch.contiguous_format``, 返回: 原模块已更新为 ``nn.Conv2d``, 示例: >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_CUDA) >>> # xdoctest: +REQUIRES(env:CUBLAS_WORKSPACE_CONFIG) >>> input = torch.randint(1, 10, (2, 8, 4, 4), dtype=torch.float16, device="cuda") >>> model = nn.Sequential( >>> nn.Conv2d(8, 4, 3)).cuda().half() >>> # 这与以下内容相同: >>> # nn.utils.convert_conv2d_weight_memory_format(model, torch.channels_last) >>> model = nn.utils.convert_conv2d_weight_memory_format(model, torch.channels_last) >>> out = model(input) "源代码" 当支持 channels_last 时,扩展到`_ConvNd` 超越仅限于 4 维张量 如果 isinstance(模块, (火炬.nn.卷积 2D, 火炬.nn.ConvTranspose2d)): 权重数据 = ( 模块.重量.detach().克隆().连续(内存格式=内存格式) ) 模块.重量.数据 = 权重数据.调整大小( 重量数据.尺寸(), 内存格式=内存格式 ) 儿童 模块.儿童(): 将 conv2d_weight_memory_format 转换为 memory_format(儿童, 内存格式) 返回 模块
[文档]def 将 conv3d_weight_memory_format 转换为 memory_format(模块, 内存格式): r将`nn.Conv3d.weight`的`memory_format`转换为`memory_format` 转换递归地应用于嵌套的 `nn.Module`,包括 `module`。 注意,它只更改内存格式,但不改变每个维度的语义。 此函数用于简化计算以采用 NHWC 内核,这 在具有计算能力 >= 7.0 的 CUDA 设备上对 fp16 数据提供了相当大的加速。 .. 注意:: 调用 `model.to(memory_format=torch.channels_last_3d)` 更加激进 比起实用函数 `convert_conv3d_weight_memory_format`。任何 具有四维权重的层都会受到 `model.to` 的影响,这并不 一定能够从转换为指定的 `memory_format` 中受益。 我们有信心的一点是 NDHWC(channels_last_3d)转换,因为即使在需要应用置换输入张量的情况下,运行卷积在 NDHWC 中也是有利的。 因此,我们的策略是仅将卷积的权重转换为 NDHWC。 即使在必须对输入张量进行置换的情况下,运行卷积在 NDHWC 中也是有利的。 因此,我们的策略是仅将卷积的权重转换为 NDHWC。 channels_last_3d. 这确保了; 1. 将使用快速卷积核,其好处可能 超出排列(如果输入不是同一格式)的开销。 2. 不会在那些没有受益的层上应用不必要的排列。 从内存格式转换而来。 最佳情况是,卷积层之间的层是通道。 最后兼容。输入张量在遇到第一个卷积层时会转换为通道最后这种内存格式,并保持在该内存格式中。 遇到第一个卷积层时会被转换为通道最后这种内存格式,并保持在该内存格式中。 因此,以下卷积不需要对输入张量进行置换。 如果通道的最后一层不兼容层位于卷积 层,我们需要将输入张量重新排列回连续格式 为此层。输入张量将通过剩余的层 连续格式,在遇到通道时可以转换为通道最后 另一个卷积层。没有必要将这种转换传播到早期层,因为大多数层对“memory_format”相当不敏感 。因为大多数层对“memory_format”相当不敏感 ``memory_format``。 这个声明可能会改变,当 PyTorch 支持排列融合时, 可能还有比在卷积之前立即融合排列更好的位置, Args: 模块(nn.Module):``nn.Conv3d`` 和 ``nn.ConvTranspose3d`` 或容器 ``nn.Module`` memory_format: 用户指定的 ``memory_format``, 例如 ``torch.channels_last`` 或 ``torch.contiguous_format``, 返回: 原模块已更新为 ``nn.Conv3d`` 示例: >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_CUDA) >>> # xdoctest: +REQUIRES(env:CUBLAS_WORKSPACE_CONFIG) >>> input = torch.randint(1, 10, (2, 8, 4, 4, 4), dtype=torch.float16, device="cuda") >>> model = nn.Sequential( >>> nn.Conv3d(8, 4, 3)).cuda().half() >>> # This is identical to: >>> # nn.utils.convert_conv3d_weight_memory_format(model, torch.channels_last_3d) >>> model = nn.utils.convert_conv3d_weight_memory_format(model, torch.channels_last_3d) >>> out = model(input) "源代码" 当支持 channels_last 时,扩展到`_ConvNd` 超越仅限于 4 维张量 如果 isinstance(模块, (火炬.nn.卷积 3D, 火炬.nn.ConvTranspose3d)): 权重数据 = ( 模块.重量.detach().克隆().连续(内存格式=内存格式) ) 模块.重量.数据 = 权重数据.调整大小( 重量数据.尺寸(), 内存格式=内存格式 ) 儿童 模块.儿童(): 转换 conv3d 权重内存格式(儿童, 内存格式) 返回 模块

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源,获取您的疑问解答

查看资源