torch.Storage¶
torch.Storage
是与默认数据类型 (torch.get_default_dtype()
) 相对应的存储类的别名。例如,如果默认数据类型是 torch.float
,则 torch.Storage
解析为 torch.FloatStorage
。
torch.<type>Storage
和 torch.cuda.<type>Storage
类(例如 torch.FloatStorage
、torch.IntStorage
等)实际上从未被实例化。调用它们的构造函数会创建一个具有适当 torch.dtype
和 torch.device
的 torch.TypedStorage
。 torch.<type>Storage
类拥有与 torch.TypedStorage
相同的所有类方法。
torch.TypedStorage
是特定 torch.dtype
的元素的连续一维数组。它可以接受任何 torch.dtype
,并且内部数据将以适当的方式解释。 torch.TypedStorage
包含一个 torch.UntypedStorage
,它将数据存储为未类型化的字节数组。
每个带步幅的 torch.Tensor
都包含一个 torch.TypedStorage
,它存储 torch.Tensor
视图的所有数据。
警告
除了 torch.UntypedStorage
之外的所有存储类将在未来被移除,并且 torch.UntypedStorage
将在所有情况下使用。
- class torch.TypedStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- cuda(device=None, non_blocking=False)[source]¶
返回此对象在 CUDA 内存中的副本。
如果此对象已在 CUDA 内存中并在正确的设备上,则不会执行任何复制操作,并且会返回原始对象。
- property device¶
- classmethod from_file(filename, shared=False, size=0) Storage [source]¶
创建一个由内存映射文件支持的 CPU 存储。
如果
shared
为True
,则所有进程之间共享内存。所有更改都会写入文件。如果shared
为False
,则存储上的更改不会影响文件。size
是存储中的元素数。如果shared
为False
,则文件必须至少包含size * sizeof(Type)
字节(Type
是存储的类型)。如果shared
为True
,则会根据需要创建文件。- 参数
filename (str) – 要映射的文件名
shared (bool) – 是否共享内存(是否将
MAP_SHARED
或MAP_PRIVATE
传递给底层的 mmap(2) 调用)size (int) – 存储中的元素数
- hpu(device=None, non_blocking=False)[source]¶
返回此对象在 HPU 内存中的副本。
如果此对象已在 HPU 内存中并在正确的设备上,则不会执行任何复制操作,并且会返回原始对象。
- property is_cuda¶
- property is_hpu¶
- is_pinned(device='cuda')[source]¶
确定 CPU TypedStorage 是否已在设备上固定。
- 参数
device (str or torch.device) – 要固定内存的设备。默认值:
'cuda'
- 返回值
布尔变量。
- pin_memory(device='cuda')[source]¶
如果 CPU TypedStorage 未固定,则将其复制到固定内存。
- 参数
device (str or torch.device) – 要固定内存的设备。默认值:
'cuda'
.- 返回值
一个固定的 CPU 存储。
- type(dtype=None, non_blocking=False)[source]¶
如果没有提供 dtype,则返回类型,否则将此对象转换为指定的类型。
如果已经是正确的类型,则不会执行任何复制操作,并返回原始对象。
- 参数
- 返回值类型
Union[_StorageBase, TypedStorage, str]
- untyped()[source]¶
返回内部
torch.UntypedStorage
.
- class torch.UntypedStorage(*args, **kwargs)[source]¶
- bfloat16()¶
将此存储转换为 bfloat16 类型。
- bool()¶
将此存储转换为 bool 类型。
- byte()¶
将此存储转换为 byte 类型。
- byteswap(dtype)¶
交换底层数据中的字节。
- char()¶
将此存储转换为字符类型。
- clone()¶
返回此存储的副本。
- complex_double()¶
将此存储转换为复数双精度类型。
- complex_float()¶
将此存储转换为复数单精度类型。
- copy_()¶
- cpu()¶
如果此存储不在 CPU 上,则返回此存储的 CPU 副本。
- cuda(device=None, non_blocking=False)¶
返回此对象在 CUDA 内存中的副本。
如果此对象已在 CUDA 内存中并在正确的设备上,则不会执行任何复制操作,并且会返回原始对象。
- 参数
- 返回值类型
Union[_StorageBase, TypedStorage]
- data_ptr()¶
- double()¶
将此存储转换为双精度类型。
- element_size()¶
- property filename: Optional[str]¶
返回与该存储关联的文件名。
如果存储在 CPU 上且是通过
from_file()
创建,其中shared
为True
,则文件名将为字符串。否则,此属性为None
。
- 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
,则文件将在需要时创建。- 参数
filename (str) – 要映射的文件名
shared (bool) –
是否共享内存(是否将
MAP_SHARED
或MAP_PRIVATE
传递给底层的 mmap(2) 调用)size (int) – 存储中的元素数
- half()¶
将此存储转换为半精度类型。
- hpu(device=None, non_blocking=False)¶
返回此对象在 HPU 内存中的副本。
如果此对象已在 HPU 内存中并在正确的设备上,则不会执行任何复制操作,并且会返回原始对象。
- 参数
- 返回值类型
Union[_StorageBase, TypedStorage]
- int()¶
将此存储转换为整数类型。
- property is_cuda¶
- property is_hpu¶
- is_pinned(device='cuda')¶
确定 CPU 存储是否已固定在设备上。
- 参数
device (str or torch.device) – 要固定内存的设备。默认值:
'cuda'
.- 返回值
布尔变量。
- long()¶
将此存储转换为长类型。
- mps()¶
如果该存储尚未在 MPS 上,则返回该存储的 MPS 副本。
- nbytes()¶
- new()¶
- pin_memory(device='cuda')¶
将 CPU 存储复制到固定内存,如果它尚未固定。
- 参数
device (str or torch.device) – 要固定内存的设备。默认值:
'cuda'
.- 返回值
一个固定的 CPU 存储。
- resizable()¶
- resize_()¶
将存储移动到共享内存。
对于已在共享内存中的存储和 CUDA 存储,这是一个无操作,它们不需要为了跨进程共享而移动。共享内存中的存储无法调整大小。
注意,为了缓解诸如 此 之类的問題,从同一对象上的多个线程调用此函数是线程安全的。但是,在没有适当同步的情况下,在 self 上调用任何其他函数是**不**线程安全的。有关更多详细信息,请参阅 多进程最佳实践。
注意
当对共享内存中的存储的所有引用都被删除时,关联的共享内存对象也将被删除。PyTorch 具有一个特殊的清理过程,以确保即使当前进程意外退出也会发生这种情况。
值得注意的是
share_memory_()
与使用shared = True
的from_file()
之间的区别share_memory_
使用 shm_open(3) 创建一个 POSIX 共享内存对象,而from_file()
使用 open(2) 打开用户传递的文件名。两者都使用带有
MAP_SHARED
的 mmap(2) 调用 将文件/对象映射到当前虚拟地址空间share_memory_
将在映射对象后对对象调用shm_unlink(3)
,以确保在没有进程打开对象时释放共享内存对象。torch.from_file(shared=True)
不会取消链接该文件。此文件是持久性的,并将保留,直到用户将其删除。
- 返回值
self
- short()¶
将此存储转换为短类型。
- to(*, device, non_blocking=False)¶
- 返回值类型
Union[_StorageBase, TypedStorage]
- tolist()¶
返回一个包含此存储元素的列表。
- type(dtype=None, non_blocking=False)¶
- 返回值类型
Union[_StorageBase, TypedStorage]
- untyped()¶
- class torch.DoubleStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.float64[source]¶
- class torch.FloatStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.float32[source]¶
- class torch.HalfStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.float16[source]¶
- class torch.LongStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype =
- class torch.IntStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.int32[source]¶
- class torch.ShortStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.int16[source]¶
- class torch.CharStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.int8[source]¶
- class torch.ByteStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.uint8[source]¶
- class torch.BoolStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.bool[source]¶
- class torch.BFloat16Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.bfloat16[source]¶
- class torch.ComplexDoubleStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.complex128[source]¶
- class torch.ComplexFloatStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.complex64[source]¶
- class torch.QUInt8Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.quint8[source]¶
- class torch.QInt8Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.qint8[source]¶
- class torch.QInt32Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.qint32[source]¶
- class torch.QUInt4x2Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.quint4x2[source]¶
- class torch.QUInt2x4Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[source]¶
- dtype: torch.dtype = torch.quint2x4[source]¶