You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch使用模型后如何彻底释放GPU显存?

PyTorch训练后GPU显存彻底释放方案

你操作后仍有显存残留的核心原因:只删除了模型对象,训练过程中产生的其他CUDA侧对象(优化器、中间张量、pinned内存等)仍被Python引用持有,导致PyTorch无法释放对应显存,同时CUDA驱动会为运行中的Python进程预留部分显存上下文,不会完全退回到进程启动初始状态。

1. 全量清理CUDA关联对象

  • 除model外,需要同步删除所有移动到CUDA侧的对象:优化器、损失函数对象、学习率调度器、训练/验证过程中保存的输出张量、标签张量、自定义CUDA缓存变量等
  • 清理时注意执行顺序:先做Python垃圾回收清除无效引用,再清空CUDA缓存,示例代码如下:
import gc
import torch

# 替换为你自己定义的所有CUDA侧对象
del model, optimizer, criterion, lr_scheduler, train_outputs, val_labels
del train_dataloader, val_dataloader

gc.collect()
torch.cuda.empty_cache()

2. 特殊场景适配

  • Jupyter环境:不要直接输出CUDA张量作为cell运行结果,Jupyter会自动持有该对象的引用导致无法释放,需要查看的话先调用.cpu()转为CPU张量再输出
  • 多卡训练场景:清理前先销毁分布式进程组,添加代码:torch.distributed.destroy_process_group()
  • DataLoader开启pin_memory:训练结束后主动删除dataloader和对应的dataset对象,解除pinned内存占用

3. 进程级显存强制清理

如果上述操作后仍有显存残留,且不想终止当前Python进程,可以调用PyTorch内置的CUDA设备重置接口:

# 重置指定CUDA设备的所有状态,释放所有该进程占用的显存
torch.cuda.device("cuda:0").reset()

注意:执行设备重置后,当前进程中所有已经创建的CUDA张量都会失效,不可再访问。

如果你的Python进程还在运行,CUDA驱动会预留100-300MiB左右的上下文显存,这部分是正常预留,只要后续新的训练任务可以正常占用显存就无需额外处理,只有当你需要把显存让给其他独立进程使用时才需要完全释放。

内容的提问来源于stack exchange,提问作者user3668129

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:27:04