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

torch.utils 源代码

# mypy: 允许未类型化定义

导入 copyreg
导入 os.path 模块 as _osp
导入 弱引用

导入 火炬
from torch.utils 导入 (
    兼容后向 as 向后兼容,
    收集环境变量 as 收集环境变量,
    数据 as 数据,
    确定性 as 确定性,
    钩子 as 钩子,
)
from torch.utils.backend_registration 导入 (
    为私有使用 1 后端生成方法,
    重命名_privateuse1_backend,
)
from torch.utils.cpp_backtrace 导入 获取_cpp_backtrace
from torch.utils.throughput_benchmark 导入 ThroughputBenchmark


[文档]def 设置模块(obj, mod): """ 为给定对象设置 Python 对象的模块属性,以便更美观地打印 """ 如果不是 isinstance(mod, str): 抛出 TypeError 异常("The mod argument should be a string") obj.__module__ = mod
如果
火炬._运行时使用部署(): # 在 torch_deploy 解释器内部无效,不存在冻结模块的路径 cmake 前缀路径 = 否则: cmake 前缀路径 = _osp.连接( _osp.目录名(_osp.目录名(__file__)), 分享, cmake )
[文档]定义 交换张量(t1, t2): "" 此函数交换两个张量对象的内容。 总体而言,这将使 t1 具有 t2 的内容,同时保留 它的身份。 如果 t1 和 t2 有不同的槽位,则这不会工作。 """ 确保没有弱引用 如果 弱引用.getweakrefs(t1): 抛出 运行时错误("无法交换 t1,因为它与弱引用相关联") 如果 弱引用.getweakrefs(t2): 抛出 运行时错误(无法交换 t2,因为它与弱引用相关联) t1 槽位 = 设置(复制注册._槽位名称(t1.)) # 类型:忽略[已定义] t2_槽位 = 设置(复制注册._槽位名称(t2.)) # 类型:忽略[已定义] 如果 t1_slots != t2_slots: 抛出 运行时错误(无法交换具有不同槽位的 t1 和 t2) 定义 swap_attr(名称): 临时 = getattr(t1, 名称) setattr(t1, 名称, (getattr(t2, 名称))) setattr(t2, 名称, tmp) 定义 错误前钩(grad_outputs): 抛出 运行时错误( 尝试执行被 swap_tensors 毒化的 AccumulateGrad 节点 这可能发生在你尝试在一个被交换的张量上反向运行时。 对于具有 `torch.__future__.set_swap_module_params_on_conversion(True)` 的模块 m 您不应该更改模块的设备或 dtype(例如 `m.cpu()` 或 `m.half()`)。 在前后跑动之间。为解决这个问题,请只更改“ "运行前(或运行前后)的设备/数据类型。" ) 定义 检查使用次数(t, 名称="t1"): 使用次数 = t._use_count() 错误字符串 = ( f预期使用次数{名称}要为 1 或 2 个 AccumulateGrad 节点,但得到了{使用次数} " f"确保您在其他地方没有保留对张量的引用。" ) 如果 使用次数 > 1: 如果 使用次数 == 2 t.是否为叶子节点: 累积梯度节点 = 火炬.自动微分..获取梯度边(t).节点 确保累积梯度节点没有被获取梯度边懒初始化 如果 t._use_count() == 2: 累积梯度节点.注册预钩子(错误预钩) 否则: 抛出 运行时错误(错误字符串) 否则: 抛出 运行时错误(错误字符串) 检查使用次数(t1, "t1") 检查使用次数(t2, "t2") 交换类型 注意,如果槽位不匹配,这将失败 交换属性("__类__") # 交换动态属性 交换属性("__dict__") # 交换槽位 对于 t1_slots: 如果 有属性(t1, 插槽) 有属性(t2, 插槽): 交换属性(插槽) elif 有属性(t1, 插槽): setattr(t2, 插槽, (getattr(t1, 插槽))) delattr(t1, 插槽) elif 有属性(t2, 插槽): setattr(t1, 插槽, (getattr(t2, 插槽))) delattr(t2, 插槽) # 交换它们指向的 at::Tensor 火炬._C._swap_tensor_impl(t1, t2)

© 版权所有 PyTorch 贡献者。

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

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源