CUDA_VISIBLE_DEVICES‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

问题:

命令行出现CUDA_VISIBLE_DEVICES=0 python trainer.py这种命令
这是Linux可以的,但是Windows不行。

解决方案:

这条命令的含义是指定某个GPU来运行程序,我们可以在程序开头添加指定GPU的代码,效果是一样的:

    import os
    os.environ["CUDA_VISIBLE_DEVICES"]='0'

或者在程序外部cmd命令行里执行以下命令,设置临时变量:

set CUDA_VISIBLE_DEVICES=0

或者直接添加到环境变量,同时记得删除原命令的CUDA_VISIBLE_DEVICES=0

在这里插入图片描述


GPU卡号编码规则:

当主机有多个GPU设备时,设置CUDA_VISIBLE_DEVICES 环境变量可以改变CUDA程序所能使用的GPU设备。假如主机中有4块GPU设备,那么这些GPU设备的默认编号为[0,1,2,3],在默认情况下,编号为0的显卡为第一块卡。多卡设置规则如下:
在这里插入图片描述

备注规则:

CUDA应用运行时,CUDA将遍历当前可见的设备,并从零开始为可见设备编号
第一种情况,卡1设置为主卡,但CUDA遍历时会设置为可见编号0
最后一种情况,设备0,2,3将显示为设备0,1,2
如果将字符串的顺序更改为“2,3,0”,则设备2,3,0将分别被设置为0,1,2
如果为CUDA_VISIBLE_DEVICES 设置了不存在的设备,所有实际设备将被隐藏,CUDA 应用将无法使用GPU设备;如果设备序列是存在和不存在设备的混合,那么不存在设备前的所有存在设备将被重新编号,不存在设备之后的所有设备将被屏蔽。
当前可见的(重新编号后的)设备可使用CUDA 程序来查看,代码如下:

import torch
print(torch.cuda.current_device())
1. 临时设置
1.1 命令提前设置环境变量
#Linux: 后面的值为要使用的GPU编号,正常的话是从0开始
export CUDA_VISIBLE_DEVICES=0
#windows: 
set CUDA_VISIBLE_DEVICES=0
1.2 Python代码中设置环境变量
import os
# 仅设置一块可见
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
# 设置多块可见
os.environ['CUDA_VISIBLE_DEVICES'] = '0,2,3'
1.3 命令行前指定
# 以下方法linux可用, windows 需要提前设置环境变量
CUDA_VISIBLE_DEVICES=0 python some-app.py

2. 永久设置

2.1 linux

通过编辑 ~/.bashrc 文件来永久设置,系统启动时将加载 ~/.bashrc 文件,达到自动设置的目的。

export CUDA_VISIBLE_DEVICES=1,2,3

然后通过 如下命令刷新环境变量

. ~/.bashrc
2.2 windows

添加到环境变量,同时记得删除原命令的CUDA_VISIBLE_DEVICES=0

在这里插入图片描述

3. 使用torch.cuda接口

import torch
#当前可见的(重新编号后的)设备可使用如下代码来查看
print(torch.cuda.current_device())
 
torch.cuda.set_device(0)
#或者 使用pytorch的并行GPU接口
net = torch.nn.DataParallel(model, device_ids=[0])
 
#确定GPU的个数
count = torch.cuda.device_count()
#决策使用哪个设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
 
#把一个模型放到GPU上
 
device = torch.device("cuda:0")
model.to(device)
 

4. 使用torch.nn.DataParallel

多卡数据并行一般使用torch.nn.DataParallel

torch.nn.DataParallel(model,device_ids)
 
'''
 使用的GPU一定是编号连续的
 其中model是需要运行的模型,device_ids指定部署模型的显卡,数据类型是list/device。
 device_ids中的第一个GPU(即device_ids[0])和model.cuda()或torch.cuda.set_device()中的第一个GPU序号应保持一致,否则会报错
举例:
'''
torch.nn.DataParallel(model, device_ids=device_ids)
torch.nn.DataParallel(modul, device_ids=[x1,x2,x3,x4,x5,x6,x7])
 
torch.nn.DataParallel(model,device_ids = range(torch.cuda.device_count()) )
 

此外如果两者的第一个GPU序号都不是0,比如设置为:

'''
如下代码,程序可以在GPU2和GPU3上正常运行。
device_ids的默认值是使用可见的GPU,不设置model.cuda()或torch.cuda.set_device()等效于设置了model.cuda(0)
'''
model=torch.nn.DataParallel(model,device_ids=[2,3])
model.cuda(2)
 
#模型绑定GPU代码
model = model.cuda() 
device_ids = [0, 1] 	
model = torch.nn.DataParallel(model, device_ids=device_ids)
 

参考:

【疑难杂症】‘CUDA_VISIBLE_DEVICES‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
CUDA 指定设备的方法,CUDA_VISIBLE_DEVICES 设置当前pytorch程序使用那些GPU设备

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/652867.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xLSTM——解析扩展长短期记忆的网络算法与应用

1.概述 二十多年来, 塞普霍赫赖特 创举 长短期记忆 (LSTM) 架构在许多深度学习突破和实际应用中发挥了重要作用。从生成自然语言到为语音识别系统提供动力,LSTM 一直是人工智能革命背后的驱动力。 然而,即使是 LSTM 的创建者也认识到它们固…

【Sql Server】随机查询一条表记录,并重重温回顾下存储过程的封装和使用

大家好,我是全栈小5,欢迎来到《小5讲堂》。 这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言随机查询语…

Visual Studio +Resharp,让你在C#编程界一骑绝尘!【文末送2024C#入门到精通教程视频+源码C#.NET全栈开发高级VIP班[完结】

目录 前言 一、Visual Studio:C#开发的强大后盾 二、ReSharper:智能代码编辑器的典范 三、Visual Studio ReSharper:一骑绝尘的编程组合 四、如何发挥最大效能 五、结论 文末福利: 文末有福利 前言 在C#编程领域&#x…

情感分析及数据集代码解析

15.1. 情感分析及数据集 — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import os import torch from torch import nn from d2l import torch as d2l#save d2l.DATA_HUB[aclImdb] (http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz,01ada507287d828…

【Altium Designer】安装教程

一、软件下载 二、软件安装 三、授权文件激活 一、软件下载 Altium Designer官网下载 二、软件安装 1.解压完下载好的软件,鼠标右击【OfflineSetup_Altium_Designer_Public_24_5_1】安装程序,选择【以管理员身份运行】。 2.语言选择【Chinese】&#…

如何向《大众日报》理论稿投稿?

《大众日报》是山东省委机关报,其理论版是该报的重要版面之一,主要刊登关于政治、经济、文化、社会等方面的理论文章和研究成果。 - 投稿方式:通常可以通过电子邮件或在线投稿系统向《大众日报》理论版投稿。 - 选题范围:理论版…

回收站删掉的照片还能找回来吗?掌握这5个方法,很简单!

“我一不小心在回收站中误删了一些照片,这些照片对我来说是比较重要的,不知道这些还有机会将它们找回来吗?” 当我们不小心将珍贵的照片从计算机的回收站中误删时,那种瞬间的心痛和焦虑难以言表。这些照片可能记录了我们生活中的重…

kafka-生产者发送消息消费者消费消息

文章目录 1、生产者发送消息&消费者消费消息1.1、获取 kafka-console-producer.sh 的帮助信息1.2、生产者发送消息到某个主题1.3、消费主题数据 1、生产者发送消息&消费者消费消息 1.1、获取 kafka-console-producer.sh 的帮助信息 [rootlocalhost ~]# kafka-console…

解决mybatis/mybatis plus报错:Invalid bound statement (not found) 的方法汇总

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候接口与xml不匹配,要么是找不到,要么是找到了却匹配不到。 我的问题是项目没有把最新的方法x…

上海冠珠旗舰总店盛装开业暨冠珠瓷砖中国美学设计巡回圆满举办

上海,这座融合了东西方文化的国际化大都市,不仅是中国的时尚中心,也是全球潮流的汇聚地。在这里,古典与现代交织,传统与前卫并存,为传统色彩与现代设计的融合提供了得天独厚的条件。 5月25日,上…

svix - webhooks

文章目录 一、关于 SvixClient Library Overview与 Svix 托管服务的区别 二、运行服务器1、部署1.1 Docker1) 使用 Docker Compose2) 独立容器 1.2 预编译的二进制文件1.3 从源代码构建 2、运行时依赖项3、Redis/Valkey 注意事项持久性 Eviction 政策4、服务器配置4.1 配置文件…

红队技巧:仿冒Windows登录

Metasploit框架:phish_windows_credentials Metasploit带有内置的后期漏洞利用功能,可帮助我们完成任务。由于它是后渗透的模块,因此只需要输入会话即可: use post/windows/gather/phish_windows_credentials set session 1 …

WebGL学习(一)渲染关系

学习webgl 开发理解渲染关系是必须的,也非常重要,很多人忽视了这个过程。 我这里先简单写一下,后面尽量用通俗易懂的方式,举例讲解。 WebGL,全称Web Graphics Library,是一种在网页上渲染3D图形的技术。它…

【链表】Leetcode 61. 旋转链表【中等】

旋转链表 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 1: 输入:head [1,2,3,4,5], k 2 输出:[4,5,1,2,3] 解题思路 要将链表每个节点向右移动 k 个位置: 计算链表…

Leetcode3161. 物块放置查询(Go语言的红黑树 + 线段树)

题目截图 题目分析 每次1操作将会分裂成两块区间长度,以最近右端点记录左侧区间的长度即可 因此涉及到单点更新和区间查询 然后左右侧最近端点则使用redBlackTree,也就是python中的sortedlist ac code type seg []int// 把 i 处的值改成 val func (t …

Spark-RDD-常用算子(方法)详解

Spark概述 Spark-RDD概述 Spark RDD 提供了丰富的方法来对数据进行转换和操作。 对 RDD(Resilient Distributed Dataset)的操作可以分为两大类:转换算子(Transformations)和行动算子(Actions)…

无线领夹麦克风哪个品牌好?本期文章揭秘无线麦克风哪个品牌好用

​在当下这个全民皆为媒体的时代大潮中,视频分享已然成为了引领风尚的指向标。在自媒体领域竞争愈发激烈的态势下,若要在这片广阔海洋中扬帆远航,优秀的作品毫无疑问是吸引观众的关键所在。而想要塑造出这样的卓越之作,除了需要创…

java —— 异常处理

一、认识异常 java 中的异常大致分为三类:编译错误、逻辑错误、运行异常。其中编译错误和逻辑错误通常手动更改即可,运行异常是异常处理的主要内容。 java 中的异常全部继承自 Exception 类,其常见的子类如下: 查看异常&#xf…

vscode常用操作

1 vscode跳转node_modules下文件,没有切换定位到左侧菜单目录的问题 2,搜索node-modules 3,设置选中字体颜色 {"workbench.colorTheme": "Default Light Modern","editor.mouseWheelZoom": true,"termin…

clocking wizard IP核通过AXI4-Lite接口实现动态重新配置应用实例

在最近的FPGA应用中,应用到了基于Zynq 7000的Uart串口设计,为了让串口的时钟更精确,采用了外部时钟模式,如下图所示。外部时钟连接到了Clocking Wizard IP核的输出端。 在串口通信时,发现串口有错码出现。例如&#xf…