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

在Flan-T5模型上用LoRA做PEFT训练时遭遇无可用批量大小错误

错误原因分析

核心原因:显存资源耗尽

"no executable batch size found"本质是当前GPU显存不足以承载哪怕最小的训练batch(包括模型参数、梯度、优化器状态等)。你重启内核后恢复,是因为重启彻底清理了之前残留的显存占用:

  • 之前的训练/模型加载进程没有正常退出,残留的CUDA上下文或模型参数占用了大部分8GB显存;
  • Python的垃圾回收机制没及时释放已删除模型的显存,导致显存被“占死”,新的训练进程无法分配足够空间。
解决方案

即时修复(不用重启内核)

  1. 清理残留GPU进程
    • 先查看显存占用进程:
      nvidia-smi
      
    • 杀掉占用显存的异常进程(替换<PID>为进程号):
      kill -9 <PID>
      
  2. 手动释放CUDA缓存
    在训练代码开头添加强制清理逻辑:
    import torch
    # 清理未被释放的显存缓存
    torch.cuda.empty_cache()
    # 可选:打印当前显存状态,确认清理效果
    print(f"已分配显存: {torch.cuda.memory_allocated()/1024**2:.2f} MB")
    print(f"已保留显存: {torch.cuda.memory_reserved()/1024**2:.2f} MB")
    

长期预防(避免重复出现)

  1. 优化LoRA与训练配置
    • 降低LoRA的rank值:比如把r=8改成r=4,减少适配器参数规模;
    • 限制LoRA作用层:只在模型的注意力层添加适配器,而非全层,示例配置:
      from peft import LoraConfig
      lora_config = LoraConfig(
          r=4,
          lora_alpha=8,
          target_modules=["q", "v"],  # 仅作用于注意力的query和value层
          lora_dropout=0.05,
          bias="none",
          task_type="SEQ_2_SEQ_LM"
      )
      
    • 启用混合精度训练:在Trainer配置中添加fp16=True,大幅降低显存占用:
      from transformers import Trainer, TrainingArguments
      training_args = TrainingArguments(
          output_dir="./lora-flan-t5",
          per_device_train_batch_size=4,
          gradient_accumulation_steps=2,  # 梯度累积,等效batch size=8
          fp16=True,  # 混合精度
          num_train_epochs=3,
          logging_steps=10
      )
      
  2. 训练前显存校验
    代码中添加显存预检查,避免启动训练后报错:
    def check_gpu_memory(min_required_mb=2048):
        allocated = torch.cuda.memory_allocated()/1024**2
        reserved = torch.cuda.memory_reserved()/1024**2
        free = (torch.cuda.get_device_properties(0).total_memory/1024**2) - reserved
        if free < min_required_mb:
            raise RuntimeError(f"GPU剩余显存不足:{free:.2f} MB,需至少{min_required_mb} MB")
    # 训练前调用
    check_gpu_memory()
    
  3. 规范进程退出
    训练结束后显式清理资源:
    # 训练完成后
    del trainer, model, tokenizer
    torch.cuda.empty_cache()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:22:40