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 中的條目已是在磁碟上帶有關聯檔案儲存的張量,但未按照 prefix 儲存到正確的位置,則會引發異常。如果為
True,任何現有的張量都將被複制到新位置。
- 關鍵字引數:
num_threads (int, optional) – 用於寫入 memmap 張量的執行緒數。預設為 0。
return_early (bool, optional) – 如果為
True且num_threads>0,該方法將返回 tensordict 的 future。share_non_tensor (bool, optional) – 如果為
True,則非張量資料將在程序之間共享,並且在單個節點內任何 worker 上的寫操作(例如 inplace 更新或設定)將更新所有其他 worker 上的值。如果非張量葉子數量較高(例如,共享大量的非張量資料棧),這可能導致 OOM 或類似錯誤。預設為False。
然後 TensorDict 會被鎖定,這意味著任何非 inplace 的寫操作(例如,重新命名、設定或刪除條目)將引發異常。一旦 tensordict 被解鎖,記憶體對映屬性將變為
False,因為跨程序的身份無法再保證。- 返回值:
如果
return_early=False,則返回一個新 tensordict,其中的張量儲存在磁碟上;否則返回一個TensorDictFuture例項。
注意
以這種方式序列化對於深度巢狀的 tensordict 可能很慢,因此不建議在訓練迴圈內呼叫此方法。