torch.Storage

torch.Storage 是默认数据类型(如通过 torch.get_default_dtype() 获取)对应的存储类的别名。例如,如果默认数据类型是 torch.float,那么 torch.Storage 将解析为 torch.FloatStorage

实际上,torch.<type>Storagetorch.cuda.<type>Storage 类(如torch.FloatStoragetorch.IntStorage 等)从不会被实例化。调用它们的构造函数会创建一个具有适当torch.dtypetorch.devicetorch.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内存且位于正确设备上,则不会进行复制操作,直接返回原对象。

参数
  • device (int) – 指定目标GPU的编号。默认使用当前设备。

  • non_blocking (bool) – 如果源位于 pinned 内存中且该参数为 True,复制操作将相对于主机异步进行。否则,此参数无效。

返回类型

data_ptr()[源代码]
属性 设备
double()[源代码]

将此存储转化为双精度类型。

dtype:数据类型
element_size()[源代码]
属性filename:Optional[str]

如果该存储是通过文件的内存映射创建的,则返回与之关联的文件名;否则返回None

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存储。

如果 sharedTrue,则所有进程之间共享内存,并且所有更改都会写入文件。如果 sharedFalse,那么存储上的更改不会影响文件。

size 表示存储中元素的数量。如果 sharedFalse,则文件必须至少包含 size * sizeof(Type) 字节(Type 是存储的类型)。如果 sharedTrue,则在需要时会创建文件。

参数
  • filename (str) – 需要映射的文件名称

  • shared (bool) – 是否共享内存(是否将 MAP_SHAREDMAP_PRIVATE 传递给底层的 mmap(2) 调用

  • size (int) – 表示存储中元素的数量

get_device()[源代码]
返回类型

int

half()[源代码]

将此存储改为半精度类型。

hpu(device=None, non_blocking=False)[源代码]

返回该对象在HPU内存中的副本。

如果该对象已存在于HPU内存且位于正确设备上,则无需进行复制,直接返回原对象。

参数
  • device (int) – 目标HPU的编号。默认值为当前设备。

  • non_blocking (bool) – 如果源位于 pinned 内存中且该参数为 True,复制操作将相对于主机异步进行。否则,此参数无效。

返回类型

int()[源代码]

将此存储改为整型。

属性is_cuda
属性is_hpu
is_pinned(device='cuda')[源代码]

确定CPU TypedStorage 是否已经固定在设备上。

参数

device (strtorch.device) – 需要固定内存的设备。默认值:'cuda'

返回值

一个布尔类型的变量。

is_shared()[源代码]
is_sparse:bool=False
long()[源代码]

将此存储类型转换为长整型。

nbytes()[源代码]
pickle_storage_type()[源代码]
pin_memory(device='cuda')[源代码]

将CPU上的TypedStorage复制到固定内存中,如果没有已经被固定的话。

参数

device (strtorch.device) – 需要固定内存的设备。默认值:'cuda'

返回值

一个与CPU固定的存储。

resizable()[源代码]
resize_(size)[源代码]
share_memory_()[源代码]

参见 torch.UntypedStorage.share_memory_()

short()[源代码]

将此存储类型转换为短整型。

size()[源代码]
to(*, device, non_blocking=False)[源代码]

返回该对象在设备内存中的副本。

如果该对象已在正确设备上,将不再进行复制,直接返回原对象。

参数
  • device (int) – 目的设备。

  • non_blocking (bool) – 如果源位于 pinned 内存中且该参数为 True,复制操作将相对于主机异步进行。否则,此参数无效。

返回类型

tolist()[源代码]

返回一个包含该存储中所有元素的列表。

type(dtype=None, non_blocking=False)[源代码]

如果没有提供dtype,则返回类型;否则,将此对象转换为指定的类型。

如果已经是正确类型,就不会进行复制,直接返回原对象。

参数
  • dtype (type字符串) – 指定所需的类型

  • non_blocking (bool) – 如果为 True,且源在 pinned 内存中而目标在 GPU 上或反之,则复制操作将异步执行。否则,此参数无效。

  • **kwargs – 为了兼容性,可能包含async关键字来代替non_blocking参数。请注意,async已经弃用。

返回类型

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内存且位于正确设备上,则不会进行复制操作,直接返回原对象。

参数
  • device (int) – 指定目标GPU的编号。默认使用当前设备。

  • non_blocking (bool) – 如果源位于 pinned 内存中且该参数为 True,复制操作将相对于主机异步进行。否则,此参数无效。

返回类型

Union[_StorageBase, TypedStorage]

data_ptr()
device:设备
double()

将此存储转化为双精度类型。

elementSize()
属性filename:Optional[str]

返回与该存储相关的文件名。

如果存储在CPU上,并且通过from_file() 方法以sharedTrue 创建文件,则文件名将是一个字符串。否则,此属性为 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存储。

如果 sharedTrue,则所有进程之间共享内存,并且所有更改都会写入文件。如果 sharedFalse,那么存储上的更改不会影响文件。

size 表示存储中的元素数量。如果 sharedFalse,则文件必须至少包含 size * sizeof(Type) 字节(其中 Type 是存储的类型;对于 UnTypedStorage 类型,文件必须至少包含 size 字节)。如果 sharedTrue,则在需要时会创建该文件。

参数
  • filename (str) – 需要映射的文件名称

  • shared (bool) – 共享属性的布尔值指示符

    是否共享内存(即在底层的mmap(2)调用中传递MAP_SHAREDMAP_PRIVATE

  • size (int) – 表示存储中元素的数量

get_device()
返回类型

int

()

将此存储改为半精度类型。

hpu(device=None, non_blocking=False)

返回该对象在HPU内存中的副本。

如果该对象已存在于HPU内存且位于正确设备上,则无需进行复制,直接返回原对象。

参数
  • device (int) – 目标HPU的编号。默认值为当前设备。

  • non_blocking (bool) – 如果源位于 pinned 内存中且该参数为 True,复制操作将相对于主机异步进行。否则,此参数无效。

返回类型

Union[_StorageBase, TypedStorage]

int()

将此存储改为整型。

属性is_cuda
属性is_hpu
is_pinned(device='cuda')

确定设备上的CPU存储是否已固定。

参数

device (strtorch.device) – 需要固定内存的设备。默认值:'cuda'

返回值

一个布尔类型的变量。

is_shared()
is_sparse:bool=False
is_sparse_csr:bool=False
long()

将此存储类型转换为长整型。

mps()

如果该存储尚未存在于MPS上,则返回其MPS副本。

nbytes()
new()
pin_memory(device='cuda')

将CPU存储复制到固定内存,如果它还没有被固定的话。

参数

device (strtorch.device) – 需要固定内存的设备。默认值:'cuda'

返回值

一个与CPU固定的存储。

调整大小()
resize()
share_memory_(*args, **kwargs)[源代码]

将存储移到共享内存。

对于已存在于共享内存中的存储和无需移动即可实现跨进程共享的CUDA存储而言,这将是一个无效操作。处于共享内存中的存储无法进行大小调整。

请注意,为了缓解类似这个问题,从多个线程调用此函数(针对同一对象)是线程安全的。但是,在没有适当同步的情况下调用 self 的其他任何函数则不是线程安全的。请参阅多进程最佳实践以获取更多详细信息。

注意

当共享内存中所有的引用都被删除时,相应的共享内存对象也会被删除。PyTorch 设计了一个特别的清理机制,确保即便当前进程意外终止,也能完成这一操作。

值得指出的是 share_memory_() 和使用 shared=Truefrom_file() 之间的区别。

  1. share_memory_ 使用 shm_open(3) 创建一个 POSIX 共享内存对象,而 from_file() 则使用 open(2) 打开用户传递的文件名。

  2. 两者都使用带有MAP_SHARED参数的mmap(2)调用,将文件/对象映射到当前虚拟地址空间。

  3. share_memory_ 在将对象映射后会调用 shm_unlink(3),以确保当没有进程使用该共享内存对象时将其释放。而torch.from_file(shared=True) 不会解除文件链接,因此此文件是持久的,并且会在用户手动删除之前一直存在。

返回值

self

short()

将此存储类型转换为短整型。

size()
返回类型

int

(*, 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[源代码]
本页目录