Python中无需重启内核如何完全清空GPU上的PyTorch模型及残留显存
显存未完全释放的原因
torch.cuda.empty_cache()仅会释放PyTorch预留但未被实际使用的空闲缓存显存,不会回收仍被Python变量引用的CUDA张量对应的显存。你剩余的1626MB显存,绝大部分就是仍被引用的模型、优化器、训练过程中存储的张量(如batch数据、loss、中间特征)等对象占用的,模型本身确实仍在占用空间。- 少量固定占用可能来自CUDA驱动的驻留显存,这部分通常仅几百MB,不属于可释放的用户显存。
不重启内核完全清空显存的方法
按以下顺序执行操作即可:
- 删除所有持有CUDA张量的Python变量引用,覆盖所有你定义过的存储在GPU上的对象,示例如下:
# 按需替换成你自己定义的变量名 del model, optimizer, train_dataloader, val_dataloader, loss, intermediate_feature
- 手动触发Python垃圾回收,清理无引用的对象:
import gc gc.collect()
- 再次清空对应GPU的缓存:
with torch.cuda.device('cuda:1'): torch.cuda.empty_cache()
注意:如果代码中存在全局变量、闭包、列表/字典等容器持有CUDA张量的引用,需要一并清理这些引用,否则垃圾回收无法释放对应显存。操作完成后如果仍有几百MB的残留占用,属于CUDA驱动的正常驻留开销,不会影响后续任务运行。
内容的提问来源于stack exchange,提问作者LGDGODV
相关产品推荐
相关产品推荐

