PyTorch torch存储

2025-07-02 11:35 更新

PyTorch 存储管理详解

一、什么是 torch.Storage

torch.Storage 是 PyTorch 中用于表示单个数据类型的连续一维数组的类。它是 torch.Tensor 的底层数据结构,每个 torch.Tensor 都对应一个相同数据类型的 torch.Storage。存储提供了对张量底层数据的直接访问和操作能力,是内存管理的重要组成部分。

二、torch.Storage 的基本操作

(一)创建存储

您可以使用多种方式创建存储,包括直接构造、从文件加载或从缓冲区创建。

import torch


## 创建一个 FloatStorage
float_storage = torch.FloatStorage(5)  # 创建一个大小为5的FloatStorage


## 从文件加载存储
storage_from_file = torch.FloatStorage.from_file("storage.bin", shared=False, size=10)


## 从缓冲区创建存储
buffer = bytearray([1, 2, 3, 4])
storage_from_buffer = torch.FloatStorage.from_buffer(buffer, 'big')

(二)类型转换

torch.Storage 支持多种类型转换方法,可以将存储转换为不同的数据类型。

## 将存储转换为其他类型
char_storage = float_storage.char()
int_storage = float_storage.int()
long_storage = float_storage.long()

(三)数据复制

您可以将存储复制到 CPU 或 GPU 上,或者在存储之间进行数据复制。

## 将存储复制到CPU
cpu_storage = float_storage.cpu()


## 将存储复制到GPU
cuda_storage = float_storage.cuda()


## 复制存储数据
copied_storage = float_storage.clone()

(四)内存共享与固定

torch.Storage 提供了内存共享和固定的功能,方便在多进程或异步操作中使用。

## 将存储移动到共享内存
shared_storage = float_storage.share_memory_()


## 将存储复制到固定内存
pinned_storage = float_storage.pin_memory()

(五)其他操作

torch.Storage 还支持其他一些操作,如获取存储的大小、数据类型、元素大小等。

## 获取存储的大小
print(float_storage.size())


## 获取存储的数据类型
print(float_storage.dtype)


## 获取元素大小(字节)
print(float_storage.element_size())

三、torch.Storage 的应用

(一)高效内存管理

在处理大规模数据或长时间运行的程序时,合理使用存储可以帮助您更好地管理内存,避免内存泄漏等问题。

## 示例:创建一个较大的存储并手动释放内存
import torch


## 创建一个较大的存储
large_storage = torch.FloatStorage(1000000)


## 模拟一些操作
## ...


## 手动释放存储内存(在实际使用中,Python的垃圾回收机制通常会自动处理)
del large_storage

(二)数据持久化

您可以将存储保存到文件中,以便后续加载和使用。

## 将存储保存到文件
storage_to_save = torch.FloatStorage(10)
## 填充存储数据
for i in range(10):
    storage_to_save[i] = i * 1.0


## 保存到文件
storage_to_save.to_file("my_storage.bin")


## 从文件加载存储
loaded_storage = torch.FloatStorage.from_file("my_storage.bin", shared=False, size=10)
print(loaded_storage.tolist())

(三)多进程共享

在多进程环境中,您可以使用共享存储来实现进程间的数据共享。

from multiprocessing import Process
import torch


## 创建共享存储
shared_storage = torch.FloatStorage.from_file("shared_storage.bin", shared=True, size=5)


def modify_storage(storage):
    # 在子进程中修改共享存储
    for i in range(5):
        storage[i] = i * 2.0


## 创建子进程
p = Process(target=modify_storage, args=(shared_storage,))
p.start()
p.join()


## 查看修改后的存储
print(shared_storage.tolist())

四、总结

通过本教程,我们详细了解了 PyTorch 中的 torch.Storage 类及其相关操作。torch.Storage 作为 torch.Tensor 的底层数据结构,在内存管理和数据操作中扮演着关键角色。掌握存储的使用方法,可以帮助我们更高效地管理和操作张量数据,提升程序的性能和稳定性。

标题:PyTorch 存储管理详解:从基础到实践 | 编程狮教程

描述:

关键词:PyTorch 存储管理, torch.Storage 应用, 内存管理技巧, 编程狮 PyTorch 教程, W3Cschool 深度学习, 存储类型转换, 数据持久化

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号