torch.存储¶
torch.Storage 是与默认数据类型对应的存储类的别名(torch.get_default_dtype())。例如,如果默认数据类型是 torch.float,torch.Storage 解析为
torch.FloatStorage。
torch. 和 torch.cuda. 类,
如 torch.FloatStorage、torch.IntStorage 等,实际上从未被实例化。调用它们的构造函数会创建
一个具有适当 torch.dtype 和
torch.device 的 torch.TypedStorage。torch. 类具有与 torch.TypedStorage 相同的所有类方法。
一个 torch.TypedStorage 是一个连续的、一维的元素数组,元素类型为特定的 torch.dtype。它可以被赋予任何 torch.dtype,并且内部数据将被适当地解释。torch.TypedStorage 包含一个 torch.UntypedStorage,它以无类型的字节数组形式保存数据。
每个strided torch.Tensor 包含一个 torch.TypedStorage,
它存储了 torch.Tensor 视图的所有数据。
警告
除了torch.UntypedStorage之外的所有存储类将在未来被移除,并且torch.UntypedStorage将在所有情况下使用。
- class torch.TypedStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]¶
- cuda(device=None, non_blocking=False, **kwargs)[源代码]¶
返回此对象在CUDA内存中的副本。
如果此对象已经位于CUDA内存中并且位于正确的设备上,则不会执行复制操作,并返回原始对象。
- property device¶
- classmethod from_file(filename, shared=False, size=0) Storage[源代码]¶
创建一个由内存映射文件支持的CPU存储。
如果
shared是True,则所有进程之间共享内存。 所有更改都会写入文件。如果shared是False,则存储上的更改不会影响文件。size是存储中的元素数量。如果shared是False, 那么文件必须至少包含size * sizeof(Type)字节 (Type是存储的类型)。如果shared是True,则如果需要,将创建文件。- Parameters
filename (str) – 要映射的文件名
共享 (布尔值) – 是否共享内存(是否传递
MAP_SHARED或MAP_PRIVATE到底层的 mmap(2) 调用)大小 (int) – 存储中的元素数量
- hpu(device=None, non_blocking=False, **kwargs)[源代码]¶
返回此对象在HPU内存中的副本。
如果此对象已经在HPU内存中并且位于正确的设备上,则不会执行复制操作,并返回原始对象。
- property is_cuda¶
- property is_hpu¶
- is_pinned(device='cuda')[源代码]¶
确定 CPU TypedStorage 是否已在设备上固定。
- Parameters
设备 (字符串 或 torch.device) – 要固定内存的设备。默认值:
'cuda'- Returns
一个布尔变量。
- is_sparse = False¶
- pin_memory(device='cuda')[源代码]¶
如果尚未固定,请将 CPU TypedStorage 复制到固定内存。
- Parameters
设备 (字符串 或 torch.device) – 要固定内存的设备。默认值:
'cuda'。- Returns
一个固定的CPU存储。
- type(dtype=None, non_blocking=False)[源代码]¶
如果未提供dtype,则返回类型,否则将此对象转换为指定的类型。
如果这已经是正确的类型,则不会进行复制,并返回原始对象。
- untyped()[源代码]¶
返回内部的
torch.UntypedStorage。
- class torch.UntypedStorage(*args, **kwargs)[源代码]¶
- bfloat16()¶
将此存储转换为bfloat16类型。
- bool()¶
将此存储转换为布尔类型。
- byte()¶
将此存储转换为字节类型。
- byteswap(dtype)¶
在底层数据中交换字节。
- char()¶
将此存储转换为字符类型。
- clone()¶
返回此存储的副本。
- complex_double()¶
将此存储转换为复数双精度类型。
- complex_float()¶
将此存储转换为复数浮点类型。
- copy_()¶
- cpu()¶
如果此存储不在CPU上,则返回其CPU副本。
- cuda(device=None, non_blocking=False, **kwargs)¶
返回此对象在CUDA内存中的副本。
如果此对象已经位于CUDA内存中并且位于正确的设备上,则不会执行复制操作,并返回原始对象。
- data_ptr()¶
- double()¶
将此存储转换为双精度类型。
- element_size()¶
- fill_()¶
- float()¶
将此存储转换为浮点类型。
- float8_e4m3fn()¶
将此存储转换为 float8_e4m3fn 类型
- float8_e4m3fnuz()¶
将此存储转换为 float8_e4m3fnuz 类型
- float8_e5m2()¶
将此存储转换为 float8_e5m2 类型
- float8_e5m2fnuz()¶
将此存储转换为 float8_e5m2fnuz 类型
- static from_buffer()¶
- static from_file(filename, shared=False, size=0) Storage¶
创建一个由内存映射文件支持的CPU存储。
如果
shared是True,则所有进程之间共享内存。 所有更改都会写入文件。如果shared是False,则存储上的更改不会影响文件。size是存储中的元素数量。如果shared是False, 那么文件必须至少包含size * sizeof(Type)字节 (Type是存储的类型,在UnTypedStorage的情况下,文件必须至少包含size字节)。如果shared是True,则如果需要,将创建文件。- Parameters
filename (str) – 要映射的文件名
共享 (布尔值) –
是否共享内存(是否传递
MAP_SHARED或MAP_PRIVATE到底层的 mmap(2) 调用)大小 (int) – 存储中的元素数量
- half()¶
将此存储转换为半精度类型。
- hpu(device=None, non_blocking=False, **kwargs)¶
返回此对象在HPU内存中的副本。
如果此对象已经在HPU内存中并且位于正确的设备上,则不会执行复制操作,并返回原始对象。
- int()¶
将此存储转换为整数类型。
- property is_cuda¶
- property is_hpu¶
- is_pinned(device='cuda')¶
确定CPU存储是否已在设备上固定。
- Parameters
设备 (字符串 或 torch.device) – 要固定内存的设备。默认值:
'cuda'。- Returns
一个布尔变量。
- long()¶
将此存储转换为长整型。
- mps()¶
如果尚未在MPS上,则返回此存储的MPS副本。
- nbytes()¶
- new()¶
- pin_memory(device='cuda')¶
如果尚未固定,请将CPU存储复制到固定内存。
- Parameters
设备 (字符串 或 torch.device) – 要固定内存的设备。默认值:
'cuda'。- Returns
一个固定的CPU存储。
- resizable()¶
- resize_()¶
将存储移动到共享内存中。
对于已经位于共享内存中的存储以及不需要为跨进程共享而移动的CUDA存储,这是一个空操作。共享内存中的存储无法调整大小。
请注意,为了缓解类似此问题,从多个线程在同一对象上调用此函数是线程安全的。 然而,在没有适当同步的情况下,调用self上的任何其他函数都不是线程安全的。请参阅多进程最佳实践了解更多详情。
注意
当共享内存中的所有存储引用都被删除时,关联的共享内存对象也会被删除。PyTorch有一个特殊的清理过程,以确保即使当前进程意外退出,这种情况也会发生。
值得注意的是
share_memory_()和from_file()在shared = True时的区别share_memory_使用 shm_open(3) 创建一个 POSIX 共享内存对象,而from_file()使用 open(2) 打开用户传递的文件名。两者都使用带有
MAP_SHARED的mmap(2)调用将文件/对象映射到当前虚拟地址空间share_memory_将在映射对象后调用shm_unlink(3),以确保当没有进程打开该对象时,共享内存对象被释放。torch.from_file(shared=True)不会取消链接文件。该文件是持久的,并将一直存在,直到用户删除它。
- Returns
self
- short()¶
将此存储转换为短类型。
- tolist()¶
返回一个包含此存储中元素的列表。
- type(dtype=None, non_blocking=False, **kwargs)¶
如果未提供dtype,则返回类型,否则将此对象转换为指定的类型。
如果这已经是正确的类型,则不会进行复制,并返回原始对象。
- untyped()¶
- class torch.BFloat16Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]¶
- class torch.ComplexDoubleStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]¶
- class torch.ComplexFloatStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]¶