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 與張量的記憶體共享。