news 2026/7/7 20:29:26

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/7/6 18:59:21

终极指南:用Charticulator轻松构建个性化数据图表

终极指南:用Charticulator轻松构建个性化数据图表 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 在数据可视化领域,Charticulator是一个…

作者头像 李华
网站建设 2026/7/7 15:55:49

终极指南:3步上手Zig游戏开发框架

终极指南:3步上手Zig游戏开发框架 【免费下载链接】zig-gamedev Building game development ecosystem for ziglang! 项目地址: https://gitcode.com/gh_mirrors/zi/zig-gamedev 嘿,你是不是一直在寻找一个既强大又易用的游戏开发工具&#xff1f…

作者头像 李华
网站建设 2026/7/7 1:16:43

DolphinScheduler插件化架构解析:如何构建30+技术生态的调度平台?

DolphinScheduler插件化架构解析:如何构建30技术生态的调度平台? 【免费下载链接】dolphinscheduler Dolphinscheduler是一个分布式调度系统,主要用于任务调度和流程编排。它的特点是易用性高、可扩展性强、性能稳定等。适用于任务调度和流程…

作者头像 李华
网站建设 2026/7/7 19:15:12

ArcGIS大师之路500技---027SHP数据分享到奥维

文章目录前言1. SHP数据2. 导入奥维3. 导入设置4. 属性设置5. 奥维视图6.分享到手机7. 在手机中查看前言 各位GISer大家好,我们去外野核查的时候经常需要把GIS中矢量数据上传到奥维中,以便在外业能快速找到图斑位置。将SHP数据分享到奥维地图是一个常见…

作者头像 李华
网站建设 2026/7/7 7:40:07

Contract-Templates:快速生成专业合同的智能解决方案

Contract-Templates:快速生成专业合同的智能解决方案 【免费下载链接】Contract-Templates 项目地址: https://gitcode.com/gh_mirrors/co/Contract-Templates 还在为起草合同而烦恼吗?🤔 每次面对空白文档都不知道从何下手&#xff…

作者头像 李华
网站建设 2026/7/7 4:58:57

Feather图标库终极指南:高效集成与实战技巧

Feather图标库终极指南:高效集成与实战技巧 【免费下载链接】feather 项目地址: https://gitcode.com/gh_mirrors/fea/feather 你是否曾在深夜调试时发现某个图标突然不显示了?翻遍代码才发现是因为图标名称拼写错误——"user"写成了&…

作者头像 李华