加载Hugging Face预训练模型时CUDA内存不足异常求助
问题分析与解决方案
先理清楚错误里的关键矛盾:你指定了使用GPU2,但报错信息显示的是GPU0——这是因为CUDA_VISIBLE_DEVICES=2会让PyTorch把物理GPU2映射为它能识别的GPU0,所以实际要排查的是物理GPU2的显存状态。
总显存15.78GiB但可用仅618MiB,大概率是这些原因:
- 系统进程隐性占用:如果服务器带桌面环境,Xorg这类显示服务会占用数GiB显存,但
nvidia-smi可能不会将其标记为用户进程,需要专门查看对应GPU的进程列表。 - 残留进程未清理:之前运行的Python脚本可能没完全退出,后台残留进程偷偷占了显存。
- 硬件预留显存:部分GPU会预留少量显存给视频解码、显示输出等功能,但一般不会占这么多,可作为次要排查点。
直接试试这些解决办法:
强制清空GPU缓存
在加载模型前添加代码,释放PyTorch未主动回收的显存:import torch torch.cuda.empty_cache()优化模型加载逻辑
启用低内存模式,同时用半精度加载模型(显存占用直接减半),修改代码为:import torch model = AutoModelForSeq2SeqLM.from_pretrained( MODEL_CHECKPOINT, low_cpu_mem_usage=True ).to("cuda", dtype=torch.float16)mt5-base半精度下显存占用约1.1GiB,完全能在15GiB的GPU中放下。
排查物理GPU2的真实占用
运行命令查看该GPU的完整进程和显存使用情况:nvidia-smi -i 2如果发现Xorg等系统进程占了大量显存,要么关闭桌面环境,要么切换到无GUI的终端会话运行脚本。
调整显存分配策略
在脚本开头添加环境变量配置,让PyTorch更高效地分配显存块:os.environ['PYTORCH_CUDA_ALLOC_CONF'] = 'max_split_size_mb:128'
内容的提问来源于stack exchange,提问作者Blindschleiche
相关产品推荐
相关产品推荐

