from_dlpack

paddle. from_dlpack ( dlpack, *, device=None, copy=None ) [源代码]

将 DLPack 格式的 Tensor 解码为 Paddle Tensor,DLPACK 是一种通用稳定的内存数据结构,可用于不同深度学习框架之间的 Tensor 共享。

备注

一个 dlpack 只能被 from_dlpack 解码一次。

参数

  • dlpack (SupportDLPack | PyCapsule) - 一个实现了 __dlpack____dlpack_device__ 方法的对象,或者是一个带有 dltensor 的 PyCapsule 对象。

  • device (PlaceLike, 可选) - 返回的 Tensor 所在的设备。如果不指定,返回的 Tensor 将与输入的 dlpack 位于同一设备上。

  • copy (bool, 可选) - 是否复制输入的内容。如果为 True,则输出的 Tensor 总是被复制。如果为 False,则输出的 Tensor 永远不会被复制,如果需要复制则会引发 BufferError 异常。如果为 None,则在可能的情况下重用现有的内存缓冲区,否则进行复制。默认值为 None。

返回

  • out (Tensor) - 从 dlpack 中解码得到的 Paddle Tensor,支持的数据类型为: bool,float16,float32,float64,uint8,int8,int16,int32,int64,complex64,complex128,支持的设备类型为: CPUCUDAPlaceCUDAPinnedPlace

代码示例 1

 >>> import paddle
 >>> # From DLPack capsule
 >>> x = paddle.to_tensor([[0.2, 0.3, 0.5, 0.9],
 ...                       [0.1, 0.2, 0.6, 0.7]], place="cpu")
 >>> dlpack = paddle.to_dlpack(x)

 >>> y = paddle.from_dlpack(dlpack)
 >>> # dlpack capsule will be renamed to 'used_dltensor' after decoded
 >>> print(dlpack)
 <capsule object "used_dltensor" at 0x7f6103c681b0>

 >>> print(y)
 Tensor(shape=[2, 4], dtype=float32, place=Place(cpu), stop_gradient=True,
        [[0.20000000, 0.30000001, 0.50000000, 0.89999998],
         [0.10000000, 0.20000000, 0.60000002, 0.69999999]])
 >>> # data of tensor x is shared with tensor y
 >>> y[0, 0] = 10.0
 >>> print(x)
 Tensor(shape=[2, 4], dtype=float32, place=Place(gpu:0), stop_gradient=True,
        [[10.       , 0.30000001, 0.50000000, 0.89999998],
         [0.10000000, 0.20000000, 0.60000002, 0.69999999]])

代码示例 2

 >>> # Directly from external tensor that implements '__dlpack__' and '__dlpack_device__' methods
 >>> import paddle
 >>> import numpy as np
 >>> x = np.array([[0.2, 0.3, 0.5, 0.9],
 ...              [0.1, 0.2, 0.6, 0.7]])
 >>> y = paddle.from_dlpack(x)
 >>> y[0, 0] = 10.0
 >>> # data of tensor x is shared with tensor y
 >>> print(x)
 [[10.   0.3  0.5  0.9]
 [ 0.1  0.2  0.6  0.7]]