快捷键

torch.utils.dlpack 的源代码

from 打字 导入 任何

导入 火炬
导入 枚举

from torch._C 导入 从 dlpack 转换
from torch._C 导入 转换为 dlpack  转换为 dlpack


 DL 设备类型(枚举.整数枚举):
    # DLPack 规范中的枚举(aten/src/ATen/dlpack.h)
    kDLCPU = 1,
    kDLGPU = 2,
    kDLCPUPinned = 3,
    kDLOpenCL = 4,
    kDLVulkan = 7,
    kDLMetal = 8,
    kDLVPI = 9,
    kDLROCM = 10,
    kDL 扩展设备 = 12,
    kDL 单 API = 14,


火把._C._添加文档字符串(转换为 dlpack, rto_dlpack(tensor) -> PyCapsule

返回一个不可见对象(一个“DLPack 胶囊”),表示张量。

.. 注意:
``to_dlpack`` 是一个遗留的 DLPack 接口。它返回的胶囊
不能在 Python 中用于任何其他目的,除了将其用作输入到
`from_dlpack`。DLPack 的更地道用法是调用
`直接在张量对象上使用 `from_dlpack` - 当这种情况工作时`
对象具有一个 `__dlpack__` 方法,PyTorch 和大多数其他
库确实有了。

.. 警告::
使用 `to_dlpack` 产生的胶囊每次只能调用一次 `from_dlpack`。
当胶囊被多次消费时的行为是未定义的。

参数:
tensor:要导出的张量

DLPack 胶囊共享张量的内存。
""")


# TODO: 添加一个 typing.Protocol 以使 Mypy 能够知道只有接受
# __dlpack__ 和 __dlpack_device__ 方法的对象
[文档]定义 从 dlpack 转换(扩展张量: 任何) -> 'torch.Tensor': from_dlpack(ext_tensor) -> Tensor 将外部库中的张量转换为 ``torch.Tensor``。 返回的 PyTorch 张量将与输入张量共享内存 (可能来自另一个库)。请注意,就地操作 因此也会影响输入张量的数据。这可能会导致 预期之外的问题(例如,其他库可能有只读标志或 不可变的数据结构),因此用户只有在确定 这没有问题的情况下才应该这样做。 参数: ext_tensor(具有 ``__dlpack__`` 属性的对象或 DLPack 封装): 要转换的张量或 DLPack 胶囊。 如果 `ext_tensor` 是一个张量(或 ndarray)对象,它必须支持 `__dlpack__` 协议(即拥有一个 `ext_tensor.__dlpack__`) method)。否则 ``ext_tensor`` 可能是一个 DLPack 胶囊。 一个不透明的 `PyCapsule` 实例,通常由 `to_dlpack` 函数或方法生成。 `to_dlpack` 函数或方法。 示例: >>> 导入 torch.utils.dlpack >>> t = torch.arange(4) 直接转换张量(在 PyTorch >= 1.10 中受支持) >>> t2 = torch.from_dlpack(t) >>> t2[:2] = -1 # 显示内存是共享的 >>> t2 tensor([-1, -1, 2, 3]) >>> t tensor([-1, -1, 2, 3]) # 旧式 DLPack 使用,带有中间胶囊对象 >>> capsule = torch.utils.dlpack.to_dlpack(t) >>> capsule >>> t3 = torch.from_dlpack(capsule) >>> t3 tensor([-1, -1, 2, 3]) >>> t3[0] = -9 # 现在我们正在 3 个张量之间共享内存 >>> t3 tensor([-9, -1, 2, 3]) >>> t2 tensor([-9, -1, 2, 3]) >>> t tensor([-9, -1, 2, 3]) "文档" 如果 有属性(扩展 tensor, '__dlpack__'): 设备 = 扩展 tensor.__dlpack_device__() 设备是 CUDA 或 ROCm,我们需要传递当前 如果 设备[0] (DL 设备类型.kDLGPU, DL 设备类型.kDLROCM): = 火把.cuda.current_stream(fcuda:{设备[1]}') # cuda_stream 是流指针,它是一个公共 # 属性,但它并未被文档化 # 数组 API 指定默认的遗留流必须传递 # 使用 CUDA 的值为 1 # https://data-apis.org/array-api/latest/API_specification/array_object.html?dlpack-self-stream-none#dlpack-self-stream-none is_cuda = 设备[0] == DL 设备类型.kDLGPU # 由于 PyTorch 默认不使用 PTDS,我们直接传递 # 旧版流 stream_ptr = 1 如果 is_cuda 并且 .cuda_stream == 0 否则 .cuda_stream dlpack = 扩展张量.__dlpack__(=流指针) 否则: dlpack = 扩展张量.__dlpack__() 否则: 仅旧版本称为转换器 dlpack = ext_tensor 返回 _from_dlpack(dlpack)

© 版权所有 PyTorch 贡献者。

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

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源