torch.utils.dlpack¶
- torch.utils.dlpack.from_dlpack(ext_tensor) Tensor [source][source]¶
将外部库中的张量转换为
torch.Tensor
。返回的 PyTorch 张量将与输入张量(可能来自另一个库)共享内存。请注意,原地操作因此也会影响输入张量的数据。这可能导致意外问题(例如,其他库可能具有只读标志或不可变数据结构),因此用户只有在确定没问题的情况下才应执行此操作。
- 参数
ext_tensor(带有
__dlpack__
属性的对象,或 DLPack capsule)–要转换的张量或 DLPack capsule。
如果
ext_tensor
是张量(或 ndarray)对象,它必须支持__dlpack__
协议(即,具有ext_tensor.__dlpack__
方法)。否则,ext_tensor
可以是 DLPack capsule,它是一个不透明的PyCapsule
实例,通常由to_dlpack
函数或方法生成。- 返回类型
示例
>>> import torch.utils.dlpack >>> t = torch.arange(4) # Convert a tensor directly (supported in PyTorch >= 1.10) >>> t2 = torch.from_dlpack(t) >>> t2[:2] = -1 # show that memory is shared >>> t2 tensor([-1, -1, 2, 3]) >>> t tensor([-1, -1, 2, 3]) # The old-style DLPack usage, with an intermediate capsule object >>> capsule = torch.utils.dlpack.to_dlpack(t) >>> capsule <capsule object "dltensor" at ...> >>> t3 = torch.from_dlpack(capsule) >>> t3 tensor([-1, -1, 2, 3]) >>> t3[0] = -9 # now we're sharing memory between 3 tensors >>> t3 tensor([-9, -1, 2, 3]) >>> t2 tensor([-9, -1, 2, 3]) >>> t tensor([-9, -1, 2, 3])
- torch.utils.dlpack.to_dlpack(tensor) PyCapsule ¶
返回一个表示张量的不透明对象(一个“DLPack capsule”)。
注意
to_dlpack
是一个旧的 DLPack 接口。它返回的 capsule 在 Python 中除了作为from_dlpack
的输入外,不能用于任何其他用途。DLPack 更符合惯例的使用方式是直接在张量对象上调用from_dlpack
- 这适用于当该对象具有__dlpack__
方法时,PyTorch 和大多数其他库现在确实具有此方法。警告
对于通过
to_dlpack
生成的每个 capsule,只能调用一次from_dlpack
。多次使用同一 capsule 的行为是未定义的。- 参数
tensor – 要导出的张量
DLPack capsule 与张量的内存共享。