PyTorch 清空列表中 GPU 上的张量

PyTorch 清空列表中 GPU 上的张量

PyTorch 清空列表中 GPU 上的张量

在使用 PyTorch 进行深度学习模型训练的过程中,经常会创建并操作多个张量。有时候我们需要清空一个列表中的张量,特别是当这些张量在 GPU 上进行计算时,需要手动释放它们的显存以避免内存泄漏问题。本文将详细介绍如何清空一个列表中的 GPU 张量并释放显存。

准备工作

在开始本文之前,首先需要确保你已经安装了 PyTorch 并了解如何在 GPU 上创建和使用张量。

import torch

# 检测是否有可用的 GPU
if torch.cuda.is_available():
    device = torch.device("cuda")
    print("CUDA is available!")
else:
    device = torch.device("cpu")
    print("CUDA is not available!")

创建一个包含 GPU 张量的列表

首先,让我们创建一个包含 GPU 张量的列表。我们使用 torch.randn 函数来生成一些随机的张量,并将它们放置在 GPU 上。

tensor_list = [torch.randn(3, 3).to(device) for _ in range(5)]
print("原始张量列表:", tensor_list)

清空列表中的 GPU 张量

清空列表中的 GPU 张量可以通过 del 关键字进行操作。释放一个张量可以直接调用其 to(device) 方法将其放置在 CPU 上,然后再调用 del 删除该张量。

for tensor in tensor_list:
    tensor.data = tensor.to("cpu")
    del tensor

检验 GPU 显存是否被释放

为了验证 GPU 显存是否被正确释放,我们可以使用 torch.cuda.memory_allocated 函数查看当前已分配的显存大小。在释放 GPU 张量后,该值应该为 0。

if torch.cuda.is_available():
    torch.cuda.empty_cache()  # 清空 GPU 缓存
    print("GPU 已释放显存:", torch.cuda.memory_allocated())

完整代码

import torch

# 检测是否有可用的 GPU
if torch.cuda.is_available():
    device = torch.device("cuda")
    print("CUDA is available!")
else:
    device = torch.device("cpu")
    print("CUDA is not available!")

# 创建一个包含 GPU 张量的列表
tensor_list = [torch.randn(3, 3).to(device) for _ in range(5)]
print("原始张量列表:", tensor_list)

# 清空列表中的 GPU 张量
for tensor in tensor_list:
    tensor.data = tensor.to("cpu")
    del tensor

# 检验 GPU 显存是否被释放
if torch.cuda.is_available():
    torch.cuda.empty_cache()  # 清空 GPU 缓存
    print("GPU 已释放显存:", torch.cuda.memory_allocated())

运行结果

当运行上述代码后,如果你的环境中有可用的 GPU,你应该会看到如下输出:

CUDA is available!
原始张量列表: [tensor([[ 0.2284, -1.4138,  0.4676],
        [-0.7423, -1.8184, -0.9588],
        [-0.3180,  1.0530,  0.9185]], device='cuda:0'), 
        tensor([[ 1.2860,  1.2799,  0.5475],
        [-0.7374,  0.7734, -0.3058],
        [-0.5322,  0.2575, -0.6601]], device='cuda:0'),
        ...]
GPU 已释放显存: 0

这表明我们成功地清空了列表中的 GPU 张量并释放了显存。

通过本文的介绍,你现在应该能够清空一个包含 GPU 张量的列表并释放显存了。记得在需要释放 GPU 显存的时候及时清空不再需要的张量,以避免内存泄漏问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程