指定训练使用的GPU个数,没有指定定gpu id,训练在其中两个gpu上执行,但是线程id分布在所有4个gpu上,为什么?如何解决?

目录

问题背景

1 线程id分布在所有gpu(包括未启用的gpu)上原因:

2 在解决这个问题时,可以采取以下步骤: 

3 修正深度学习框架默认使用所有可见 GPU 的问题

1 TensorFlow:

2 PyTorch:

3 Keras:


问题背景

       多GUP训练深度学习模型时指定训练使用的GPU个数,没有指定gpu id,训练在其中两个gpu上执行,但是线程id分布在所有4个gpu上,如下图

1 线程id分布在所有gpu(包括未启用的gpu)上原因:

  1. 深度学习框架默认使用所有可见GPU: 一些深度学习框架在初始化时默认会使用所有可见的GPU。即使你在代码中明确指定了两个GPU,框架仍可能会在所有四个GPU上启动线程。这是一种默认行为,你需要通过框架的配置来明确指定使用的GPU。

  2. 并行计算框架的默认设置: 如果你使用了并行计算框架(例如MPI),它们可能会默认使用所有可见的GPU。在这种情况下,需要查看并行框架的配置,确保只在指定的GPU上进行计算。

  3. 未正确设置GPU环境变量: 确保你在代码执行之前正确设置了GPU环境变量。例如,在使用CUDA的情况下,使用 CUDA_VISIBLE_DEVICES 环境变量可以指定可见的GPU。

  4. 查看代码中的设置: 检查你在代码中指定GPU的设置是否正确。有时候,代码中的设置可能被其他部分的配置或默认设置覆盖。

  5. 检查框架版本和文档: 确保你使用的深度学习框架的版本是最新的,并查看框架的文档,以了解正确的GPU设置方式。

2 在解决这个问题时,可以采取以下步骤: 

  • 在代码中正确设置 GPU 个数: 使用框架提供的设置来确保代码在指定数量的 GPU 上运行。有些框架提供了类似 torch.cuda.set_devicetf.config.experimental.set_visible_devices 的函数,允许你指定 GPU 的数量而不是具体的 GPU ID。

  • 检查并行计算设置: 如果使用了并行计算框架,查看框架的文档,了解它是如何分配线程和任务的。

  • 检查环境变量和配置文件: 查看环境变量和框架的配置文件,确保没有默认设置导致在所有 GPU 上启动线程。

  • 查看代码中的其他设置: 检查代码中的其他设置,确保没有其他部分的配置或默认设置覆盖了你的 GPU 设置。

确保在调试和解决问题时,仔细查看相关的文档和配置信息,以确保代码按照你的预期方式运行。

 

3 修正深度学习框架默认使用所有可见 GPU 的问题

你需要在代码中明确指定使用的 GPU。具体的方法可能取决于你使用的深度学习框架。以下是一些常见框架的修正方法:

1 TensorFlow:

在 TensorFlow 中,可以使用 tf.config.experimental.set_visible_devices 来设置可见的 GPU 设备。同时,你可以使用 tf.config.experimental.set_memory_growth 来设置 GPU 内存的增长。以下是一个例子:

import tensorflow as tf

# 选择你要使用的 GPU
gpu_ids = [0, 1]  # 选择两个 GPU
tf.config.experimental.set_visible_devices(gpu_ids, 'GPU')

# 设置 GPU 内存增长
for gpu_id in gpu_ids:
    tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[gpu_id], True)

 这将确保 TensorFlow 只在指定的 GPU 上启动线程。

2 PyTorch:

在 PyTorch 中,可以使用 torch.cuda.set_device 来设置当前设备。以下是一个例子:

import torch

# 选择你要使用的 GPU
gpu_ids = [0, 1]  # 选择两个 GPU
torch.cuda.set_device(gpu_ids[0])  # 设置当前设备

# 在这之后,PyTorch 的操作将在指定的 GPU 上执行

这将确保 PyTorch 只在指定的 GPU 上启动线程。

3 Keras:

如果你使用 Keras,可以结合使用 TensorFlow 的配置来控制 GPU 的使用。以下是一个例子:

import tensorflow as tf
from keras import backend as K

# 选择你要使用的 GPU
gpu_ids = [0, 1]  # 选择两个 GPU
tf.config.experimental.set_visible_devices(gpu_ids, 'GPU')

# 设置 GPU 内存增长
for gpu_id in gpu_ids:
    tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[gpu_id], True)

# 设置 Keras 使用的后端为 TensorFlow
K.set_session(tf.compat.v1.Session())

 确保在设置 GPU 之前初始化框架的配置。这样,你就可以明确指定使用的 GPU,而不会默认使用所有可见的 GPU。

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

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

相关文章

FreeRTOS深入教程(中断管理)

文章目录 前言一、为什么要为中断设计一套API二、两套函数区别对比三、两类中断四、FreeRTOS中SYSTICK和PendSV中断的作用总结 前言 本篇文章来分析FreeRTOS中的中断,中断在FreeRTOS中也是非常重要的,那么这篇文章将带大家来学习一下FreeRTOS中的中断处…

go对rabbitmq基本操作

一、安装rabbitmq 1、直接使用docker拉取镜像 docker pull rabbitmq:3.82、启动容器 docker run \-e RABBITMQ_DEFAULT_USERadmin \-e RABBITMQ_DEFAULT_PASS123456 \-v mq-plugins:/plugins \--name rabbit01 \--hostname rabbit01 --restartalways \-p 15672:15672 \-p 5672:…

数据结构 / 计算机内存分配

1. Linux 32位系统内存分配 栈(stack): 先进后出, 栈区变量先定义的后分配内存, 栈区地址从高到低分配堆(heap): 先进先出, 栈区变量先定义的先分配内存, 堆区地址从低到高分配堆栈溢出: 表示的是栈区内存耗尽, 称为溢出. 例如: 每次调用递归都需要在栈区申请内存, 如果递归太深…

【LLM_04】自然语言处理基础_2

一、神经网络1、循环神经网络(RNN)2、门控循环单元(GRU)3、长短期记忆网络(LSTM)4、双向RNN5、卷积神经网络(CNN) 二、注意力机制1、注意力机制原理介绍2、注意力机制的各种变式3、注…

车载通信架构 —— 传统车内通信网络FlexRay(较高速度高容错、较灵活拓扑结构)

车载通信架构 —— 传统车内通信网络FlexRay(较高速度高容错、较灵活拓扑结构) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,…

leetCode 1080.根到叶路径上的不足节点 + 递归 + 图解

给你二叉树的根节点 root 和一个整数 limit ,请你同时删除树中所有 不足节点 ,并返回最终二叉树的根节点。假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 limit,则该节点被称之为 不足节点 ,需要被删除…

目录树自动生成器 golang+fyne

go tree 代码实现请看 gitee 仓库链接 有很多生成目录树的工具,比如windows自带的tree命令,nodejs的treer,tree-cli等等。这些工具都很成熟、很好用,有较完善的功能。 但是,这些工具全部是命令式的,如果…

vs2019中出现Debug Error的原因

一般出现这种错误表示你的某个变量没有正确赋值&#xff0c;或者说本身在你的C程序中加了assert断言&#xff0c;assert的作用是先计算表达式expression,如果其值为假&#xff0c;那么它会打印一条错误信息 #include<assert.h> void assert(int expression); 例子&…

01、copilot+pycharm

之——free for student 目录 之——free for student 杂谈 正文 1.for student 2.pycharm 3.使用 杂谈 copilot是github推出的AI程序员&#xff0c;将chatgpt搬到了私人终端且无token限制&#xff0c;下面是使用方法。 GitHub Copilot 是由 GitHub 与 OpenAI 合作开发的…

网络篇---第一篇

系列文章目录 文章目录 系列文章目录前言一、HTTP 响应码有哪些?分别代表什么含义?二、Forward 和 Redirect 的区别?三、Get 和 Post 请求有哪些区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男…

【ArcGIS Pro微课1000例】0037:ArcGIS Pro中模型构建器的使用---以shp批量转kml/kmz为例

文章目录 一、ArcGIS Pro模型构建器介绍二、shp批量转kml/kmz1. 打开模型构建器2. 添加工作空间4. 添加【创建要素图层】工具5. 添加【图层转kml】工具6. 输出文件命名7. 运行模型三、模型另存为1.py文件2. 保存为工具一、ArcGIS Pro模型构建器介绍 模型构建器是一种可视化编程…

项目去除git版本控制

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 ✈️已经旅游的地点 | 新疆-乌鲁木齐、新疆-吐鲁番、广东-广州…

C++连接MySQL失败解决

通过localhost连接&#xff0c;错误 遂改用127.0.0.1&#xff0c;协议不匹配&#xff0c;错误 在my.conf添加skip–sslon&#xff0c;重启mysql&#xff0c;连接成功 ref: https://www.cnblogs.com/walkersss/p/17037086.html

从前序与中序遍历序列构造二叉树(C++实现)

从前序与中序遍历序列构造二叉树 题目思路分析代码代码讲解 题目 思路分析 我们可以通过递归实现的二叉树构建函数。它根据给定的先序遍历序列和中序遍历序列构建一棵二叉树&#xff0c;并返回根节点。可以创建一个_build 函数&#xff0c;该函数负责构建二叉树的节点&#xff…

【深入剖析K8s】容器技术基础(三):深入理解容器镜像 文件角度

容器里的进程‘看到’’的文件系统 可能你立刻就能想到,这应该是&#xff3f;个关于MountNamespace的问题:容器里的应用进程理应‘看到”一套完全独立的文件系统这样它就可以在自己的容器目录&#xff08;比如&#xff0f;tmp&#xff09;下进行操作’而完全不会受宿主机以及其…

DataGrip 2023.2.3(IDE数据库开发)

DataGrip是一款数据库集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于数据库管理和开发。 DataGrip提供了许多强大的功能&#xff0c;如SQL语句编辑、数据库连接管理、数据导入和导出、数据库比较和同步等等。它支持多种数据库&#xff0c;如MySQL、PostgreSQL、Ora…

CSDN动态发了但是主页面看不见已发的动态

问题描述&#xff1a; 今天在写csdn动态的时候&#xff0c;发了五个动态&#xff0c;但是主页面的“最近”看不到我发的动态&#xff0c;我还以为是csdn动态每天的发送量有数量限制。去这个地方点我的发现 右上角全是“审核中”的字样 按理说是不可能审核这么久的&#xff08…

Arduino驱动温湿度气压光照传感器模块

目录 一、简介二、原理图三、使用方法四、实验现象 一、简介 点击图片购买 HTU21D特性&#xff1a;HTU21D基于法国Humirel公司高性能的湿度感应元件制成&#xff0c;传感器输出标准IIC格式。同时具有很高的温度精度和湿度精度。HTU21专为低功耗小体积应用设计&#xff0c;具有很…

【挑战业余一周拿证】CSDN官方课程目录

一、亚马逊云科技简介 二、在云中计算 三、全球基础设施和可靠性 四、联网 五、存储和数据库 六、安全性 七、监控和分析 八、定价和支持 九、迁移和创新 十、云之旅 关注订阅号 CSDN 官方中文视频&#xff08;免费&#xff09;&#xff1a;点击进入 一、亚马逊云科…

90. 打家劫舍II (房子围成一圈)

题目 题解 class Solution:def rob(self, nums: List[int]) -> int:def dp(nums: List[int]) -> int:N len(nums)# 定义状态&#xff1a;dp[i]表示从第i个房屋开始偷窃&#xff0c;能够偷到的最高金额dp [0 for i in range(N)]for i in range(N-1, -1, -1):if i N-1:…