news 2026/6/10 1:32:00

PyTorch 多卡训练常见坑:设置 CUDA_VISIBLE_DEVICES 后仍 OOM 在 GPU 0 的解决之道

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch 多卡训练常见坑:设置 CUDA_VISIBLE_DEVICES 后仍 OOM 在 GPU 0 的解决之道

PyTorch 多卡训练常见坑:设置 CUDA_VISIBLE_DEVICES 后仍 OOM 在 GPU 0 的解决之道

问题现象

服务器有两张 GPU(GPU 0 和 GPU 1),GPU 0 正在跑一个大模型任务。

你想在 GPU 1 上单独跑另一个 PyTorch 程序,于是这样启动:

CUDA_VISIBLE_DEVICES=1python train.py --gpu1

程序日志显示:

using GPU : 1 可见 GPU 数量: 1 当前 GPU ID: 0 GPU 名称: NVIDIA GeForce RTX 3090 # 正确是 GPU 1

一切看似正常,但运行几步后报错:

RuntimeError: CUDA out of memory ... (GPU 0; 23.69 GiB total capacity; ...)

明明只看到一张卡,为什么还在物理 GPU 0 上爆显存?

根本原因

这是 PyTorch(尤其是 1.x 版本)的历史遗留 bug:

即使通过CUDA_VISIBLE_DEVICES正确限制了可见 GPU,PyTorch 在首次初始化 CUDA 上下文时,仍会在原始的物理 GPU 0 上分配少量内存(用于内部通信、缓存等)。

后续模型运行虽然在指定的 GPU 上,但只要触发某些操作(如大 tensor 分配、某些模块 forward),就会唤醒 GPU 0 的旧上下文,导致显存被占用,最终 OOM。

解决方案

在所有模型创建和数据移动之前,强制设置当前设备

importtorch# 在创建 net、前,紧跟 import torch 之后torch.cuda.set_device(0)# 这里的 0 是逻辑 ID,即你通过 CUDA_VISIBLE_DEVICES 指定的那张卡

加上这行后,PyTorch 会彻底绑定到新上下文,旧的 GPU 0 上下文不再被触碰,问题瞬间解决。

最佳实践代码结构

importargparseimportosimporttorch# 先 import torchparser=argparse.ArgumentParser()parser.add_argument("--gpu",type=str,default='1')args=parser.parse_known_args()[0]os.environ['CUDA_VISIBLE_DEVICES']=args.gpu# 关键:强制设置设备torch.cuda.set_device(0)torch.cuda.empty_cache()# 可选,保险起见再清一次# 现在才导入模型等fromnetimportNet# ...

额外建议

  • 单卡训练时不要使用torch.nn.DataParallel,它会引入额外开销并可能触发旧 bug。
  • 先用小 batchSize(如 2~4)验证跑通,再逐步增大。
  • 监控命令:watch -n 1 nvidia-smi

总结

一句torch.cuda.set_device(0)就能彻底解决这个让人抓狂的“ GPU 0 占用”问题。记住:限制可见 GPU 后,必须再强制设置当前设备,才能完全隔离。

希望这个坑能帮到更多遇到同样问题的朋友!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 5:46:25

AutoGPT供应链管理决策支持系统

AutoGPT在供应链管理中的决策支持实践 在现代企业运营中,供应链的复杂性正以前所未有的速度增长。原材料价格波动、国际物流中断、需求预测失真……这些挑战让传统的“人工报表”式决策模式显得力不从心。一个采购经理可能需要花三天时间整合历史数据、比价供应商、…

作者头像 李华
网站建设 2026/6/9 5:46:14

Windows 10/11 HEVC解码插件终极安装指南

Windows 10/11 HEVC解码插件终极安装指南 【免费下载链接】在Windows1011安装免费的HEVC解码插件64位86位 本资源文件提供了在Windows 10/11系统上安装免费的HEVC解码插件的解决方案。HEVC(高效视频编码)是一种先进的视频压缩标准,能够显著减…

作者头像 李华
网站建设 2026/6/8 6:04:47

PyOxidizer:重新定义Python应用部署的现代化解决方案

PyOxidizer:重新定义Python应用部署的现代化解决方案 【免费下载链接】PyOxidizer A modern Python application packaging and distribution tool 项目地址: https://gitcode.com/gh_mirrors/py/PyOxidizer 在当今快速发展的软件开发领域,Python…

作者头像 李华
网站建设 2026/6/9 21:25:41

OpenOCD简明指南

一、OpenOCD 简介OpenOCD(Open On-Chip Debugger)是一个开源的片上调试工具,支持多种调试器和目标芯片。它通过 JTAG、SWD 等接口与目标设备通信,提供固件烧录、调试、内存操作等功能。二、快速烧录固件2.1 基本烧录命令openocd -…

作者头像 李华
网站建设 2026/6/9 20:04:41

Granite Docling 258M:轻量级多模态文档理解的技术突破与应用前景

Granite Docling 258M:轻量级多模态文档理解的技术突破与应用前景 【免费下载链接】granite-docling-258M 项目地址: https://ai.gitcode.com/hf_mirrors/ibm-granite/granite-docling-258M 在数字化浪潮席卷各行各业的今天,如何高效处理海量文档…

作者头像 李华
网站建设 2026/6/9 0:52:32

24、Linux系统的多语言支持与办公应用指南

Linux系统的多语言支持与办公应用指南 1. 多语言支持体验 在Linux系统中,能够安装英语以外的语言支持,从而让系统以不同语言呈现,这是其一大魅力所在。比如,在一台机器上可以同时支持中文、日语、瑞典语和默认的英语。只需简单点击几下,注销后重新登录,就能切换到完全不…

作者头像 李华