from_dlpack¶
将 DLPack 格式的 Tensor 解码为 Paddle Tensor,DLPACK 是一种通用稳定的内存数据结构,可用于不同深度学习框架之间的 Tensor 共享。
注解
一个 dlpack 只能被 from_dlpack
解码一次。
参数¶
dlpack (SupportDLPack | PyCapsule) - 一个实现了
__dlpack__
与__dlpack_device__
方法的对象,或者是一个带有 dltensor 的PyCapsule
对象。
返回¶
out (Tensor) - 从 dlpack 中解码得到的 Paddle Tensor,支持的数据类型为: bool,float16,float32,float64,uint8,int8,int16,int32,int64,complex64,complex128,支持的设备类型为:
CPU
,CUDAPlace
,CUDAPinnedPlace
。
代码示例 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.utils.dlpack.to_dlpack(x)
>>> y = paddle.utils.dlpack.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.utils.dlpack.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]]