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
相同的所有类方法。
A torch.TypedStorage
是一个连续的一维数组,包含特定类型的数据。它可以被赋予任何torch.dtype
类型,并且内部数据将根据该类型进行解释。torch.TypedStorage
包含一个torch.UntypedStorage
,以无类型的字节数组形式存储数据。
每个带步长的 torch.Tensor
都包含一个 torch.TypedStorage
,该存储包含了所有由 torch.Tensor
视图引用的数据。
警告
除了torch.UntypedStorage
之外,所有的存储类将在未来被移除,并且在所有情况下都将使用torch.UntypedStorage
。
- classtorch.TypedStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- bfloat16()[源代码]
-
将此存储改为bfloat16类型。
- bool()[源代码]
-
将此存储转化为布尔类型。
- byte()[源代码]
-
将此存储转化为字节类型。
- char()[源代码]
-
将此存储转换为字符型。
- clone()[源代码]
-
返回该存储的副本。
- complex_double()[源代码]
-
将此存储转换为复数双精度类型。
- complex_float()[源代码]
-
将此存储转换为复数浮点型。
- copy_(source, non_blocking=None)[源代码]
-
- cpu()[源代码]
-
如果该存储尚未在CPU上,则返回其在CPU上的副本。
- cuda(device=None, non_blocking=False)[源代码]
-
返回该对象在CUDA内存中的副本。
如果该对象已存在于CUDA内存且位于正确设备上,则不会进行复制操作,直接返回原对象。
- data_ptr()[源代码]
- 属性 设备
- double()[源代码]
-
将此存储转化为双精度类型。
- dtype:数据类型
- element_size()[源代码]
- fill_(value)[源代码]
- float()[源代码]
-
将此存储转化为浮点类型。
- float8_e4m3fn()[源代码]
-
将此存储 cast 为 float8_e4m3fn 类型
- float8_e4m3fnuz()[源代码]
-
将此存储 cast 为 float8_e4m3fnuz 类型
- float8_e5m2()[源代码]
-
将此存储改为 float8_e5m2 类型
- float8_e5m2fnuz()[源代码]
-
将此存储 cast 为 float8_e5m2fnuz 类型
- classmethodfrom_buffer(*args, **kwargs)[源代码]
- classmethodfrom_file(filename, shared=False, size=0) → Storage[源代码]
-
创建一个基于内存映射文件的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) – 表示存储中元素的数量
-
- half()[源代码]
-
将此存储改为半精度类型。
- hpu(device=None, non_blocking=False)[源代码]
-
返回该对象在HPU内存中的副本。
如果该对象已存在于HPU内存且位于正确设备上,则无需进行复制,直接返回原对象。
- int()[源代码]
-
将此存储改为整型。
- 属性is_cuda
- 属性is_hpu
- is_pinned(device='cuda')[源代码]
-
确定CPU TypedStorage 是否已经固定在设备上。
- 参数
-
device (str 或 torch.device) – 需要固定内存的设备。默认值:
'cuda'
- 返回值
-
一个布尔类型的变量。
- is_sparse:bool=False
- long()[源代码]
-
将此存储类型转换为长整型。
- nbytes()[源代码]
- pickle_storage_type()[源代码]
- pin_memory(device='cuda')[源代码]
-
将CPU上的TypedStorage复制到固定内存中,如果没有已经被固定的话。
- 参数
-
device (str 或 torch.device) – 需要固定内存的设备。默认值:
'cuda'
。 - 返回值
-
一个与CPU固定的存储。
- resizable()[源代码]
- resize_(size)[源代码]
- short()[源代码]
-
将此存储类型转换为短整型。
- size()[源代码]
- to(*, device, non_blocking=False)[源代码]
-
返回该对象在设备内存中的副本。
如果该对象已在正确设备上,将不再进行复制,直接返回原对象。
- tolist()[源代码]
-
返回一个包含该存储中所有元素的列表。
- type(dtype=None, non_blocking=False)[源代码]
-
如果没有提供dtype,则返回类型;否则,将此对象转换为指定的类型。
如果已经是正确类型,就不会进行复制,直接返回原对象。
- 参数
- 返回类型
-
Union[_StorageBase, TypedStorage, str]
- 未指定类型()[源代码]
-
返回内部的
torch.UntypedStorage
。
- classtorch.UntypedStorage(*args, **kwargs)[源代码]
-
- bfloat16()
-
将此存储改为bfloat16类型。
- bool()
-
将此存储转化为布尔类型。
- 字节()>
-
将此存储转化为字节类型。
- byteswap(数据类型)
-
交换基础数据中的字节。
- char()
-
将此存储转换为字符型。
- clone()
-
返回该存储的副本。
- complex_double()⟫
-
将此存储转换为复数双精度类型。
- complex_float()
-
将此存储转换为复数浮点型。
- copy_()
- cpu()
-
如果该存储尚未在CPU上,则返回其在CPU上的副本。
- cuda(device=None, non_blocking=False)
-
返回该对象在CUDA内存中的副本。
如果该对象已存在于CUDA内存且位于正确设备上,则不会进行复制操作,直接返回原对象。
- 参数
- 返回类型
-
Union[_StorageBase, TypedStorage]
- data_ptr()
- device:设备
- double()
-
将此存储转化为双精度类型。
- elementSize()
- 属性filename:Optional[str]
-
返回与该存储相关的文件名。
如果存储在CPU上,并且通过
from_file()
方法以shared
为True
创建文件,则文件名将是一个字符串。否则,此属性为None
。
- fill()
- float()
-
将此存储转化为浮点类型。
- float8_e4m3fn()
-
将此存储 cast 为 float8_e4m3fn 类型
- float8_e4m3fnuz()
-
将此存储 cast 为 float8_e4m3fnuz 类型
- float8_e5m2()
-
将此存储改为 float8_e5m2 类型
- float8_e5m2fnuz()
-
将此存储 cast 为 float8_e5m2fnuz 类型
- 静态from_buffer()
- 静态from_file(filename, shared=False, size=0) → Storage
-
创建一个基于内存映射文件的CPU存储。
如果
shared
为True
,则所有进程之间共享内存,并且所有更改都会写入文件。如果shared
为False
,那么存储上的更改不会影响文件。size
表示存储中的元素数量。如果shared
为False
,则文件必须至少包含size * sizeof(Type)
字节(其中Type
是存储的类型;对于UnTypedStorage
类型,文件必须至少包含size
字节)。如果shared
为True
,则在需要时会创建该文件。
- get_device()
-
- 返回类型
- 半()
-
将此存储改为半精度类型。
- hpu(device=None, non_blocking=False)
-
返回该对象在HPU内存中的副本。
如果该对象已存在于HPU内存且位于正确设备上,则无需进行复制,直接返回原对象。
- 参数
- 返回类型
-
Union[_StorageBase, TypedStorage]
- int()
-
将此存储改为整型。
- 属性is_cuda
- 属性is_hpu
- is_pinned(device='cuda')
-
确定设备上的CPU存储是否已固定。
- 参数
-
device (str 或 torch.device) – 需要固定内存的设备。默认值:
'cuda'
。 - 返回值
-
一个布尔类型的变量。
- is_sparse:bool=False
- is_sparse_csr:bool=False
- long()
-
将此存储类型转换为长整型。
- mps()
-
如果该存储尚未存在于MPS上,则返回其MPS副本。
- nbytes()
- new()
- pin_memory(device='cuda')
-
将CPU存储复制到固定内存,如果它还没有被固定的话。
- 参数
-
device (str 或 torch.device) – 需要固定内存的设备。默认值:
'cuda'
。 - 返回值
-
一个与CPU固定的存储。
- 调整大小()
- 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()⟫
-
将此存储类型转换为短整型。
- size()
-
- 返回类型
- 到(*, device, non_blocking=False)>
-
- 返回类型
-
Union[_StorageBase, TypedStorage]
- tolist()
-
返回一个包含该存储中所有元素的列表。
- type(dtype=None, non_blocking=False)
-
- 返回类型
-
Union[_StorageBase, TypedStorage]
- 无类型()
- classtorch.DoubleStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.float64[源代码]
- classtorch.FloatStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.float32[源代码]
- classtorch.HalfStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.float16[源代码]
- classtorch.LongStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.int64[源代码]
- classtorch.IntStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.int32[源代码]
- classtorch.ShortStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.int16[源代码]
- classtorch.CharStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.int8[源代码]
- classtorch.ByteStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.uint8[源代码]
- classtorch.BoolStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.bool[源代码]
- classtorch.BFloat16Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.bfloat16[源代码]
- classtorch.ComplexDoubleStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.complex128[源代码]
- classtorch.ComplexFloatStorage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.complex64[源代码]
- classtorch.QUInt8Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.quint8[源代码]
- classtorch.QInt8Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.qint8[源代码]
- classtorch.QInt32Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.qint32[源代码]
- classtorch.QUInt4x2Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.quint4x2[源代码]
- classtorch.QUint2x4Storage(*args, wrap_storage=None, dtype=None, device=None, _internal=False)[源代码]
-
- dtype:torch.dtype=torch.quint2x4[源代码]