memmap¶
- class tensordict.memmap(data: TensorDictBase, prefix: Optional[str] = None, copy_existing: bool = False, *, num_threads: int = 0, return_early: bool = False, share_non_tensor: bool = False)¶
將所有張量寫入新的 tensordict 中對應的記憶體映射張量。
- 參數:
data (TensorDictBase) – 要儲存的資料結構。
prefix (str) – 記憶體映射張量將儲存的目錄前綴。目錄樹結構將模仿 tensordict 的結構。
copy_existing (bool) – 如果為 False(預設值),如果 tensordict 中的項目已經是儲存在磁碟上的張量並具有關聯的檔案,但未根據前綴儲存在正確的位置,則會引發例外。如果為
True
,則任何現有張量都將複製到新位置。
- 關鍵字參數:
num_threads (int, optional) – 用於寫入 memmap 張量的執行緒數量。預設為 0。
return_early (bool, optional) – 如果
True
且num_threads>0
,則該方法將傳回 tensordict 的 future。share_non_tensor ( bool, optional) – 如果
True
,非 Tensor 的資料將在各個進程之間共享,並且在單一節點內,任何 worker 上進行的寫入操作(例如原地更新或設定)將更新所有其他 worker 上的值。如果非 Tensor leaf 節點的數量很多(例如,共享大量非 Tensor 資料),這可能會導致 OOM 或類似錯誤。預設值為False
。
然後 TensorDict 會被鎖定,這表示任何非原地的寫入操作都會拋出例外(例如,重新命名、設定或移除一個 entry)。一旦 tensordict 被解鎖,memory-mapped 屬性會變成
False
,因為跨進程的 identity 不再保證。- 傳回:
如果
return_early=False
,則傳回一個新的 tensordict,其中 tensors 儲存在磁碟上,否則傳回一個TensorDictFuture
實例。
注意
以這種方式序列化對於深度巢狀的 tensordicts 來說可能會很慢,因此不建議在訓練迴圈中呼叫此方法。