【踩坑】修复循环设置os.environ[‘CUDA_VISIBLE_DEVICES‘]无效

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

问题示例

for gpus in ['0', '1',  '2',  '3',  '4',  '5',  '6',  '7']:os.environ['CUDA_VISIBLE_DEVICES'] = gpusprint(torch.cuda.get_device_name(0))

        始终将使用第一个GPU,即CUDA:0.

问题解析

        在使用 os.environ['CUDA_VISIBLE_DEVICES'] 动态设置可见的 GPU 时,通常只能在程序开始运行之前进行设置,并且这种设置在程序运行后无法在一个进程中动态改变。这是因为深度学习框架(如 TensorFlow、PyTorch 等)在初始化时就会读取 CUDA_VISIBLE_DEVICES 环境变量,并在后续操作中使用这些设置。因此,尝试在运行时通过循环动态更改 CUDA_VISIBLE_DEVICES 是无效的

解决方法

1. 子进程方法

        通过在子进程中运行深度学习代码,每次子进程启动时重新设置 CUDA_VISIBLE_DEVICES 环境变量。在这种方法中,每次循环都会启动一个新的子进程 your_script.py,并为该子进程设置不同的 GPU。

import os
import subprocessgpus = ['0', '1', '2']for gpu in gpus:env = os.environ.copy()env['CUDA_VISIBLE_DEVICES'] = gpusubprocess.run(['python', 'your_script.py'], env=env)

2. 使用PyTorch的设备管理 (个人推荐)

        在 PyTorch 中,你可以直接通过 torch.cuda.set_device(device) 动态设置设备,而无需更改 CUDA_VISIBLE_DEVICES。这种方法在单个进程中动态设置不同的 GPU。示例如下:

import torchgpus = [0, 1, 2]for gpu in gpus:torch.cuda.set_device(gpu)print(torch.cuda.get_device_name(torch.cuda.current_device()))# 你的深度学习代码model = your_model.to(torch.device(f'cuda:{gpu}'))# 继续进行训练或推理

3. 使用多进程方法

        使用 multiprocessing 模块启动多个进程,每个进程设置不同的 GPU。这种方法启动多个独立进程,每个进程可以独立设置 CUDA_VISIBLE_DEVICES 并在其上运行代码。:

import os
from multiprocessing import Processdef run_on_gpu(gpu):os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu)# 你的深度学习代码# 如训练、推理等gpus = [0, 1, 2]
processes = []for gpu in gpus:p = Process(target=run_on_gpu, args=(gpu,))p.start()processes.append(p)for p in processes:p.join()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac安装多版本node

Mac下使用n模块去安装多个指定版本的Node.js,并使用命令随时切换。 node中的n模块是,node专门用来管理node版本的模块,可以进行node版本的切换,下载,安装。 1.安装n npm install -g n 2.查看版本 n --version 3.展…

动作捕捉与数字人实训室,引领动漫专业创新发展

如今,随着全身动作捕捉设备在动漫行业中的应用越来越重要,传统的教学模式与市场需求逐渐脱节,原有的教学方式和思路急需进行调整。高校通过搭建动作捕捉与数字人实训室,可以使得教学质量和效率大大提升,让学生能够接触…

如何采集拼多多的商品或店铺数据

怎么使用简数采集器批量采集拼多多的商品或店铺相关信息呢? 简数采集器暂时不支持采集拼多多的商品或店铺相关数据,只能采集页面公开显示的信息,谢谢。 简数采集器采集网站文章资讯等数据特别简单高效:只需输入网站网址&#xf…

全景vr交互微课视频开发让学习变得更加有趣、高效

在数字化教育的浪潮中,3D虚拟微课系统操作平台以其独特的魅力和创新的功能,成为吸引学生目光的焦点。这个平台不仅提供了引人入胜的画面和内容丰富的课件,更通过技术革新和制作方式的探索,将课程制作推向了一个全新的高度。 随着技…

HarmonyOS NEXT Developer Beta1配套相关说明

一、版本概述 2024华为开发者大会,HarmonyOS NEXT终于在万千开发者的期待下从幕后走向台前。 HarmonyOS NEXT采用全新升级的系统架构,贯穿HarmonyOS全场景体验的底层优化,系统更流畅,隐私安全能力更强大,将给您带来更高…

基于Cisco的校园网络拓扑搭建

特此说明:请先看评论区留言哦~ 一、基础配置 1.新建拓扑图 2.服务器配置 3.PC端配置 4.核心交换机配置 a.CORE-S1 Switch>enable Switch#configure terminal Switch(config)#hostname CORE-S1 CORE-S1(config)#vlan 10 CORE-S1(config-vlan)#vlan 20 CO…

【zabbix】zabbix 自动发现与自动注册、proxy代理

1、配置zabbix自动发现,要求发现的主机不低于2台 zabbix 自动发现(对于 agent2 是被动模式) zabbix server 主动的去发现所有的客户端,然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多,zabbi…

第1章,物联网模式简介

物联网模式简介 物联网(IoT)在最近几年获得了巨大的吸引力,该领域在未来几年将呈指数级增长。这一增长将跨越所有主要领域/垂直行业,包括消费者、家庭、制造业、健康、旅游和运输。这本书将为那些想了解基本物联网模式以及如何混…

俄罗斯Yandex广告(Yandex ads)怎么做?Yandex广告搭建与效果优化技巧设置终极指南

您可以在Yandex推广中使用移动应用广告来覆盖数百万搜索和Yandex广告网络受众,从而提高应用的盈利能力。为了获得最佳效果,请在设置广告系列时遵循我们的建议。 入门 在 Yandex Direct 中创建广告活动。转到营销活动向导 → 应用安装和应用内转化&…

三叉神经痛多发于哪些部位,手术治疗会引起颅内感染吗?

三叉神经痛,一种突发的阵发性疾病,主要影响面部、口腔及下颌的特定区域。在日常无发作时期,患者与常人无异,但一旦发作,其疼痛之剧烈,常令人难以忍受。这种疼痛常表现为突发性的剧烈、短暂、如闪电般的抽痛…

【C语言】--常见类型和概念

❤️个人主页: 起名字真南 &#x1f495;个人专栏:【数据结构初阶】 【C语言】 目录 第一个C语言程序main函数printf函数库函数关键字字符和ASCII码字符串和\0转义字符 第一个C语言程序 #include<stdio.h> int main() {printf("Hello World\n");return 0; }ma…

React useId Hook

React 中有一个 useId hook&#xff0c;可以生成一个唯一 ID&#xff0c;这个有什么用处呢&#xff0c;用个 UUID 是不是可以替代呢&#xff1f;如果我们只考虑客户端&#xff0c;那么生成唯一 Id 的方法比较简单&#xff0c;我们在 State 中保存一个计数器就好&#xff0c;但是…

windows 安装 Kubernetes(k8s)

windows 安装 docker 详情见&#xff1a; https://blog.csdn.net/sinat_32502451/article/details/133026301 minikube Minikube 是一种轻量级的Kubernetes 实现&#xff0c;可在本地计算机上创建VM 并部署仅包含一个节点的简单集群。 下载地址&#xff1a;https://github.…

Qt的学习之路

目录 一、信号槽机制 1.1 基本概念 1.2 特点 1.3 使用方法 1.4 信号槽连接类型 1.5 注意 二、元对象系统 2.1 基本概念 2.2 实现方式 2.3 主要特性 2.4 使用场景 三、国际化 3.1 标记可翻译的文本&#xff08;tr函数&#xff09; 3.2 生成翻译源文件&#xff08;…

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC&#xff0c;即客户之声&#xff0c;是一种通过收集和分析客户反馈、需求和期望&#xff0c;来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下&#xff0c;VOC不仅能够帮助企业了解客户的真实需求&#xff0c;还能为企业提供宝贵的竞争情报&#xff0c;助力企业…

构建家庭NAS之三:在TrueNAS SCALE上安装qBittorrent

本系列文章索引&#xff1a; 构建家庭NAS之一&#xff1a;用途和软硬件选型 构建家庭NAS之二&#xff1a;TrueNAS Scale规划、安装与配置 构建家庭NAS之三&#xff1a;在TrueNAS SCALE上安装qBittorrent 大部分家庭NAS用户应该都会装一个下载工具。本篇以qBittorrent为例&…

LabVIEW与PLC通讯方式及比较

LabVIEW与PLC之间的通讯方式多样&#xff0c;包括使用MODBUS协议、OPC&#xff08;OLE for Process Control&#xff09;、Ethernet/IP以及串口通讯等。这些通讯方式各有特点&#xff0c;选择合适的通讯方式可以提高系统的效率和稳定性。以下将详细介绍每种通讯方式的特点、优点…

Edge 浏览器退出后,后台占用问题

Edge 浏览器退出后&#xff0c;后台占用问题 环境 windows 11 Microsoft Edge版本 126.0.2592.68 (正式版本) (64 位)详情 在关闭Edge软件后&#xff0c;查看后台&#xff0c;还占用很多系统资源。实在不明白&#xff0c;关了浏览器还不能全关了&#xff0c;微软也学流氓了。…

C语言数据结构-分析期末选择题考点(一)

昔我往矣&#xff0c;杨柳依依 今我来思&#xff0c;雨雪霏霏 契子✨ 有道是&#xff1a;得选择题者得天下。临近考试&#xff0c;便总结一下数据结构选择题的常考题型吧&#xff0c;以及预测一下考点&#xff0c;一来是为了备考&#xff0c;二来可以水文。祝各位老铁 “挂柯南…

18.枚举

学习知识&#xff1a;枚举类型、相关的使用方法 Main.java&#xff1a; public class Main {public static void main(String[] args) {myenum[] colorlist myenum.values();//获取枚举中所有对象的引用数组for (myenum one : colorlist){System.out.println(one.toString(…