【PyTorch】设置CUDA_VISIBLE_DEVICES无效的问题以及多卡使用以及CUDA out of memory问题

这篇具有很好参考价值的文章主要介绍了【PyTorch】设置CUDA_VISIBLE_DEVICES无效的问题以及多卡使用以及CUDA out of memory问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法1:
理想情况下,该环境变量应设置在程序的顶部。如果在设置 torch.backends.cudnn.benchmark 之后调用 CUDA_VISIBLE_DEVICES 变量,则更改 CUDA_VISIBLE_DEVICES 变量将不起作用。

import os
os.environ["CUDA_VISIBLE_DEVICES"]=<YOUR_GPU_NUMBER_HERE>

方法2:

$ CUDA_VISIBLE_DEVICES=1,2 python train.py

REF

  • https://discuss.pytorch.org/t/how-to-change-the-default-device-of-gpu-device-ids-0/1041/29

问题:单机多卡使用时,指定device不是从0开始时,出现AssertionError: Invalid device id错误

原因:
pytorch默认使用gpu编号为device:0的设备,可以使用
torch.nn.DataParallel(model, device_ids=[0, 1])
对模型进行制定gpu指定编号多gpu训练,必须要有编号为device:0的gpu,不然会报AssertionError: Invalid device id错误;

如果当gpu编号为device:0的设备被占用时,指定其他编号gpu使用torch.nn.DataParallel(model, device_ids=[1, 2])指定gpu编号会出现AssertionError: Invalid device id错误,这是因为pytorch默认使用gpu编号为device:0的设备,需要修改pytorch默认编号;

解决方法

方法1:

# 使用set_device函数来指定默认GPU使用编号
torch.cuda.set_device(6)

#使用方式
torch.nn.DataParallel(model,device_ids=[6,7,8])

缺点:

  • 必须包含set_device(1)指定的device:1的设备;
  • 且仍然会存在占用一些device:0的gpu内存;

方法2:(推荐)

# 使用如下方式来指定使用设备,这样会会把device:6改为device:0,
# device:7改为device:1,以此类推. 则pytorch默认的编号还是以device:0开始.
os.environ["CUDA_VISIBLE_DEVICES"] = "6,7,8"

# 指定方式
torch.nn.DataParallel(model,device_ids=[0,1,2])

REF

  • https://blog.csdn.net/kongkongqixi/article/details/100521590

**问题:**单机多卡训练时,代码只运行了gpu0,并导致CUDA out of memory. 如下图所示:
RuntimeError: CUDA out of memory. Tried to allocate 5.18 GiB (GPU 0; 31.74 GiB total capacity; 21.11 GiB already allocated; 5.10 GiB free; 25.60 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.

解决方法:
with torch.cuda.device(7):
opt = opts().parse()
main(opt)

pytorch在初始化的时候会默认在第0块显卡上进行,会占用一定的显存,这就导致,在第0块显卡空闲内存不多时,程序会反复报上面的错误。

torch.nn.DataParallel
pytorch单机多卡最简单的实现方法就是使用nn.DataParallel类,其几乎仅使用一行代码net = torch.nn.DataParallel(net)就可让模型同时在多张GPU上训练,它大致的工作过程如下图所示:
【PyTorch】设置CUDA_VISIBLE_DEVICES无效的问题以及多卡使用以及CUDA out of memory问题,pytorch,人工智能,python

DataParallel前传与反传工作过程

在每一个Iteration的Forward过程中,nn.DataParallel都自动将输入按照gpu_batch进行split,然后复制模型参数到各个GPU上,分别进行前传后将得到网络输出,最后将结果concat到一起送往0号卡中。

**在Backward过程中,先由0号卡计算loss函数,**通过loss.backward()得到损失函数相于各个gpu输出结果的梯度grad_l1 … gradln,接下来0号卡将所有的grad_l送回对应的GPU中,然后GPU们分别进行backward得到各个GPU上面的模型参数梯度值gradm1 … gradmn,最后所有参数的梯度汇总到GPU0卡进行update。

注:DataParallel的整个并行训练过程利用python多线程实现

由以上工作过程分析可知,nn.DataParallel有着这样几个无法避免的问题:文章来源地址https://www.toymoban.com/news/detail-851371.html

  • 负载不均衡问题。gpu0所承担的任务明显要重于其他gpu
  • 速度问题。每个iteration都需要复制模型且均从GPU0卡向其他GPU复制,通讯任务重且效率低;python多线程GIL锁导致的线程颠簸(thrashing)问题。
  • 只能单机运行。由于单进程的约束导致。
  • 只能切分batch到多GPU,而无法让一个model分布在多个GPU上。当一个模型过大,设置batchsize=1时其显存占用仍然大于单张显卡显存,此时就无法使用DataParallel类进行训练。
    因此官方推荐使用torch.nn.DistributedDataParallel替代nn.DataParallel,即使是单机多卡的情况下。

REF

  • https://www.cnblogs.com/yinpengchen/p/15498448.html
  • https://www.cnblogs.com/qizhou/p/16770143.html
  • https://zhuanlan.zhihu.com/p/206467852

到了这里,关于【PyTorch】设置CUDA_VISIBLE_DEVICES无效的问题以及多卡使用以及CUDA out of memory问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • cuda12.0 安装 pytorch

    前两天买的 y7000p 到了,然后就要重新配下环境。 流程如下 首先下载 miniconda ,我下的是 python3.8 的 创建自己的自定义环境 检查自己的 cuda 版本,我的是 cuda:12.0 然后再 pytorch 上找到对应 cuda 版本的进行下载, pip install 或者 conda install 都可以 1. 直达链接 2. conda create --name y

    2024年02月01日
    浏览(27)
  • CUDA(CUDA Toolkit)、显卡算力、PyTorch版本之间的匹配

    刚开始在Anaconda搞环境的时候没注意到这四者之间的对应关系,点进去CUDA Toolkit的安装官网: CUDA Toolkit 12.1 Downloads | NVIDIA Developer Resources CUDA Documentation/Release NotesMacOS Tools Training Sample Code Forums Archive of Previous CUDA Releases FAQ Open Source PackagesSubmit a BugTarball and Zip Archive Deliverables h

    2024年02月05日
    浏览(53)
  • 【深度学习环境配置】ubuntu 20.04+4060 Ti+CUDA 11.8+pytorch(装机、显卡驱动、CUDA、cudnn、pytorch)

    【深度学习环境配置】ubuntu 20.04+4060 Ti+CUDA 11.8+pytorch(装机、显卡驱动、CUDA、cudnn、pytorch) 📆 安装时间 2023.11.08-2023.11.10 Windows 和 Ubuntu 双系统的安装和卸载 B站教程 【本文基本上跟这个详细教程一致,优先推荐看这个!】ubuntu20.04 下深度学习环境配置 史上最详细教程 【精

    2024年02月04日
    浏览(39)
  • 如何正确下载PyTorch、CUDA版本!!

    因为在torch框架里经常出现NVIDIA、CUDA、PyTorch这几个不兼容,等等一些让人头疼的问题。这里总结正确下载pytorch的方法。 目录 安装pytorch 安装CUDA 一.查看自己cuda版本 方法一:  方法二: CMD中输入:   我的是CUDA版本12.0,版本向下兼容,意思就是 CUDA 12.0及以下版本的都可以安

    2024年02月15日
    浏览(33)
  • cuda+anaconda+pytorch按照教程

    1、查看当前显卡支持的最高版本,有两种方式: 1)NVIDIA控制面板—帮助—系统信息—组件—NVCUDA.dll对应版本 请注意,12.2为本机CUDA支持的最高版本 nvidia-smi显示的同上,也表示cuda支持的最高版本 安装cuda后在cmd窗口使用nvcc -V命令看到的是自己安装的cuda版本,这个安装后不

    2024年02月12日
    浏览(22)
  • CUDA与PyTorch版本对应关系

    PyTorch版本 CUDA版本 1.2.0、1.4.0、1.5.0、1.5.1、1.6.0、1.7.0、1.7.1 9.2 1.0.0、1.0.1、1.1.0、1.2.0 10.0 1.4.0、1.5.0、1.5.1、1.6.0、1.7.0、1.7.1、1.8.1 10.1 1.5.0、1.5.1、1.6.0、1.7.0、1.7.1、1.8.0、1.8.1、1.8.2、1.9.0、1.9.1、1.10.0、1.10.1、1.11.0、1.12.0、1.12.1 10.2 1.7.0、1.7.1 11.0 1.8.0、1.8.1、1.8.2、1.9.0、1.9.

    2024年01月24日
    浏览(31)
  • CUDA11.1对应pytorch安装

    看了好多篇文章,尝试了好多次pytorch的安装,终于成功了 ,下面记录成功的安装方法。 1.1确定cuda版本 首先应当确定自己电脑的cuda版本,根据电脑显卡cuda的版本选择应当安装的cuda,可以在命令行中输入nvidia-smi查看显卡信息 可以看到CUDA的版本为11.1,即11.1以下的版本都可以

    2023年04月08日
    浏览(29)
  • CUDA、cuDNN以及Pytorch介绍

    在讲解cuda和cuDNN之前,我们首先来了解一下英伟达(NVIDA)公司。 NVIDIA是一家全球领先的计算机技术公司,专注于图形处理器(GPU)和人工智能(AI)计算。公司成立于1993年,总部位于美国加利福尼亚州的圣塔克拉拉。NVIDIA的产品和技术广泛应用于各个领域,包括游戏、虚拟

    2024年02月13日
    浏览(35)
  • cuda11.2对应pytorch安装

    想必大家查看自己cuda是11.2版本,但是在pytorch官网没有找到对应的安装命令,请参考一下命令: 测试:

    2024年02月12日
    浏览(33)
  • IDEA 设置字体大小无效

    设置字体大小,一般都是从file=settings=editor=font=Size里设置,一般都有效。   但是,如果是更换了主体,则需要从主体颜色菜单那里这是,你看这个页面,上面黄色三角也提示你了,要去颜色主体菜单去设置,进入同级目录:Editor=Color Scheme,然后修改Font,APPLY之后就生效了。

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包