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 可能很慢,因此不建议在训练循环内调用此方法。