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

PyTorch训练CUDA内存不足求助,已尝试缓存清理仍未解决

解决PyTorch在Jupyter Notebook中CUDA内存不足的问题

你已经尝试了初始化时的内存清理,但仍在loss.backward()阶段触发CUDA OOM,结合报错里的内存占用细节(PyTorch已分配8.96 GiB、存在未分配的保留内存),可以从以下几个方向解决:

1. 修复CUDA内存碎片问题

报错提示内存碎片可能是诱因,通过设置PyTorch的CUDA分配参数优化内存利用:

import os
# 设置max_split_size_mb,值可根据情况调整(如64、256)
os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'max_split_size_mb:128'

建议在导入torch前设置这个环境变量,或者重启内核后添加该代码再执行训练。

2. 训练过程中动态清理内存

仅在代码开头执行清理是不够的,需在训练循环中针对性释放内存:

for epoch in range(epochs):
    for input_tensor, mask in dataloader:
        input_tensor, mask = input_tensor.cuda(), mask.cuda()
        optim.zero_grad()
        
        # 前向传播、计算损失
        predicted_img = model(input_tensor)
        loss_mask = torch.mean((predicted_img - input_tensor) ** 2 * mask / mask_ratio)
        
        # 反向传播与优化
        loss_mask.backward()
        optim.step()
        
        # 清理当前batch的资源
        loss_mask.detach()  # 解除损失张量与计算图的关联
        # 显式删除不再使用的张量
        del loss_mask, predicted_img
        gc.collect()
        torch.cuda.empty_cache()

同时注意:Jupyter单元格执行后变量会残留,训练前重启内核,避免之前的模型、张量占用内存。

3. 核心内存优化手段

  • 减小Batch Size:直接降低单次迭代的内存占用,这是最快速有效的方法。
  • 启用混合精度训练:通过torch.cuda.amp将部分张量转为半精度,大幅减少内存消耗:
    from torch.cuda.amp import GradScaler, autocast
    
    scaler = GradScaler()
    for input_tensor, mask in dataloader:
        input_tensor, mask = input_tensor.cuda(), mask.cuda()
        optim.zero_grad()
        
        with autocast():
            predicted_img = model(input_tensor)
            loss_mask = torch.mean((predicted_img - input_tensor) ** 2 * mask / mask_ratio)
        
        scaler.scale(loss_mask).backward()
        scaler.step(optim)
        scaler.update()
    
  • 冻结冗余模型参数:如果是微调模型,冻结不需要训练的底层参数,减少梯度计算的内存占用:
    # 示例:冻结模型backbone层
    for param in model.backbone.parameters():
        param.requires_grad = False
    
  • 检查GPU张量冗余:确保所有临时张量用完即删除,避免不必要的GPU内存占用。

4. Jupyter专属优化

  • 将完整训练代码放在单个单元格执行,避免多单元格执行后残留大量未使用变量。
  • 可使用%reset -f命令清空当前命名空间的变量(执行前确认无需要保留的内容)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:56:24