查看、指定使用的 GPU 数量和编号

在使用 PyTorch 框架时,可以通过以下步骤查看可用的 GPU 数量,指定使用的 GPU 编号,并在代码中体现这一点。下面以2个GPU为例:

目录

  • 一、脚本代码块实现
    • 1. 查看可用的 GPU
    • 2. 指定使用 GPU 的数量和编号
      • 使用 `CUDA_VISIBLE_DEVICES` 环境变量
      • 将模型和数据移动到指定的 GPU
      • 使用 `DataParallel` 进行多 GPU 并行计算
    • 3. 示例完整代码
  • 二、命令行实现
    • 1. 使用 `CUDA_VISIBLE_DEVICES` 环境变量
      • 只使用 GPU 0
      • 使用 GPU 0 和 GPU 1
    • 2. 在 Python 代码中自动检测可用 GPU
    • 3. 结合 `CUDA_VISIBLE_DEVICES` 和 PyTorch 代码

一、脚本代码块实现

1. 查看可用的 GPU

import torchif torch.cuda.is_available():num_gpus = torch.cuda.device_count()print(f"Available GPUs: {num_gpus}")for i in range(num_gpus):print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
else:print("No GPUs available")

2. 指定使用 GPU 的数量和编号

在 PyTorch 中,可以通过以下几种方法来指定使用的 GPU。

使用 CUDA_VISIBLE_DEVICES 环境变量

可以在代码中设置环境变量来指定使用的 GPU:

import os# 只使用 GPU 0 和 GPU 1
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"import torch# 检查可用的 GPU
if torch.cuda.is_available():num_gpus = torch.cuda.device_count()print(f"Available GPUs: {num_gpus}")for i in range(num_gpus):print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
else:print("No GPUs available")

将模型和数据移动到指定的 GPU

可以将模型和数据移动到指定的 GPU。例如:

import torch# 检查是否有 GPU 可用
if torch.cuda.is_available():# 将模型移动到 GPU 0device0 = torch.device('cuda:0')model = MyModel().to(device0)# 将数据移动到 GPU 1device1 = torch.device('cuda:1')data = data.to(device1)
else:device = torch.device('cpu')model = MyModel().to(device)data = data.to(device)

使用 DataParallel 进行多 GPU 并行计算

可以使用 torch.nn.DataParallel 来让模型在多个 GPU 上并行运行:

import torch
import torch.nn as nn# 假设模型已经定义好
model = MyModel()if torch.cuda.is_available():# 使用 DataParallel 并行运行在多个 GPU 上model = nn.DataParallel(model, device_ids=[0, 1])model = model.cuda()
else:device = torch.device('cpu')model = model.to(device)

3. 示例完整代码

以下是一个完整的示例,演示了如何在 PyTorch 中查看 GPU 数量、指定使用 GPU,并在代码中体现:

import os
import torch
import torch.nn as nn# 设置使用的 GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"# 查看可用的 GPU
if torch.cuda.is_available():num_gpus = torch.cuda.device_count()print(f"Available GPUs: {num_gpus}")for i in range(num_gpus):print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
else:print("No GPUs available")# 定义模型
class MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.layer = nn.Linear(10, 10)def forward(self, x):return self.layer(x)model = MyModel()# 将模型移动到 GPU
if torch.cuda.is_available():model = nn.DataParallel(model, device_ids=[0, 1])model = model.cuda()# 示例数据
data = torch.randn(5, 10).cuda()# 前向传播
output = model(data)
print(output)

在命令行中,可以使用环境变量 CUDA_VISIBLE_DEVICES 来指定使用的 GPU 数量和编号。这种方法对 PyTorch 非常有效。以下是详细步骤:

二、命令行实现

1. 使用 CUDA_VISIBLE_DEVICES 环境变量

在运行 Python 脚本时,通过设置 CUDA_VISIBLE_DEVICES 环境变量来指定哪些 GPU 可见。例如:

只使用 GPU 0

CUDA_VISIBLE_DEVICES=0 python main.py

使用 GPU 0 和 GPU 1

CUDA_VISIBLE_DEVICES=0,1 python main.py

2. 在 Python 代码中自动检测可用 GPU

在 Python 代码中,可以自动检测可用的 GPU,并根据需要配置模型和数据。以下是示例代码:

import torchdef print_available_gpus():if torch.cuda.is_available():num_gpus = torch.cuda.device_count()print(f"Available GPUs: {num_gpus}")for i in range(num_gpus):print(f"GPU {i}: {torch.cuda.get_device_name(i)}")else:print("No GPUs available")def main():# 打印可用的 GPUprint_available_gpus()# 使用第一个可用的 GPUdevice = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')print(f"Using device: {device}")# 示例模型和数据model = MyModel().to(device)data = torch.randn(10, 3, 224, 224).to(device)  # 示例数据# 示例训练循环for epoch in range(10):# 假设 dataloader 是你的数据加载器for batch in dataloader:inputs, labels = batchinputs, labels = inputs.to(device), labels.to(device)outputs = model(inputs)# 其余训练步骤...if __name__ == "__main__":main()

3. 结合 CUDA_VISIBLE_DEVICES 和 PyTorch 代码

通过在命令行中设置 CUDA_VISIBLE_DEVICES 环境变量,并在代码中使用 torch.cuda 相关的方法,可以确保你的脚本只使用指定的 GPU。

例如,在命令行中设置环境变量后运行脚本:

CUDA_VISIBLE_DEVICES=0,1 python main.py

然后在 Python 脚本中:

import torchdef main():# 检查可用的 GPUif torch.cuda.is_available():num_gpus = torch.cuda.device_count()print(f"Using {num_gpus} GPUs")for i in range(num_gpus):print(f"GPU {i}: {torch.cuda.get_device_name(i)}")else:print("No GPUs available, using CPU")# 使用第一个可用的 GPUdevice = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')print(f"Using device: {device}")# 示例模型和数据model = MyModel().to(device)data = torch.randn(10, 3, 224, 224).to(device)  # 示例数据# 示例训练循环for epoch in range(10):# 假设 dataloader 是你的数据加载器for batch in dataloader:inputs, labels = batchinputs, labels = inputs.to(device), labels.to(device)outputs = model(inputs)# 其余训练步骤...if __name__ == "__main__":main()

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

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

相关文章

中文之美,美在辞藻富丽,也美在情感含蓄内敛。

文章目录 引言句句不提幸福,句句都是幸福句句不提释怀,句句都是释怀句句不提爱意,句句都是爱意句句不提安慰,句句都是安慰句句不提遗憾,句句都是遗憾句句不提思念,句句都是思念引言 许多句子没有将主题直抒胸臆,却通过字词间的呼应、碰撞,让人感受到“言未表而意无穷”…

第12章 Express的RESTful API开发(二)

3. 路由与中间件 在Express中,路由用于定义应用的各个端点(URI)及其处理程序。中间件是一个可以访问请求对象(req)、响应对象(res)和下一个中间件函数的函数。中间件用于处理请求之前执行一些操…

java高级——Exception异常类基本解读

java高级——Exception异常类基本解读 前情提要文章介绍继承结构异常详解1. 异常的定义2. 异常的分类3.3 异常的处理机制3.3.1 try catch finally语句3.3.2 throw关键字3.3.3 throws关键字 4. 浅谈如何有效的避免异常的发生5. 自定义异常6. 常见的RuntimeException 总结 前情提…

JDBC(Java访问数据库)

Java Database Connectivity:Java访问数据库的解决方案 JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些接口。 JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与数…

HDU1056——HangOver,HDU1057——A New Growth Industry,HDU1058——Humble Numbers

目录 HDU1056——HangOver 题目描述 运行代码 代码思路 HDU1057——A New Growth Industry 题目描述 运行代码 代码思路 HDU1058——Humble Numbers 题目描述 运行代码 代码思路 HDU1056——HangOver 题目描述 Problem - 1056 运行代码 #include <iostream&…

Elasticsearch面试三道题

针对Elasticsearch的面试题&#xff0c;从简单到困难&#xff0c;我可以给出以下三道题目&#xff1a; 1. Elasticsearch的基本概念与优势 问题&#xff1a;请简要介绍Elasticsearch是什么&#xff0c;并说明它相比传统数据库的优势有哪些&#xff1f; 答案&#xff1a; El…

数学建模--整数规划和非线性规划

目录 整数规划 非线性规划 总结 整数规划中分支定界法的具体步骤和实现细节是什么&#xff1f; 初始化&#xff1a; 分支&#xff1a; 定界&#xff1a; 剪枝&#xff1a; 终止条件&#xff1a; 非线性规划中的梯度法、牛顿法和拟牛顿法的比较分析有哪些&#xff1f;…

php判断某个目录下是否存在文件

/*** 判断字符串是否以什么结尾* param String $haystack 字符串* param String $needle 结尾* return Boolean*/ function endWith($haystack, $needle) {$length strlen($needle);if ($length 0) {return true;}return (substr($haystack, -$length) $needle); } /***…

Prometheus 监控 RabbitMQ

1. 安装 RabbitMQ Exporter RabbitMQ Exporter 是连接 RabbitMQ 和 Prometheus 的桥梁,它从 RabbitMQ 收集指标并以 Prometheus 可以理解的格式暴露这些指标。 1.1 下载 RabbitMQ Exporter wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v0.20.0/ra…

前端面试题每日一学_1

今日一问&#xff1a; 下面的JS代码中&#xff0c;执行结果为object的选项是 () A、typeof []; B、typeof {}; C、typeof null; D、typeof undefined;​ 答案和解析可在文章底部查看。 今日面试题&#xff1a; 1、前端SEO优化的方法有哪些&#xff1f; ① 设置合理准确的t…

拉提查合创5步玩转git工具协作代码开发

1 工具使用场景 开发团队使用git版本管理工具&#xff0c;进行协作代码开发过程中&#xff0c;最常用的场景为&#xff1a; &#xff08;1&#xff09;拉取代码 将git远端仓库最新代码拉取到本地。 &#xff08;2&#xff09;提交代码 将本地新增修改的代码提交至git远端仓库中…

【SpringBoot】2 项目搭建

创建项目 1&#xff09;确实本地 jdk 版本 打开命令行窗口&#xff1a;快捷键 Windows R&#xff0c;输入 CMD&#xff0c;敲回车 执行命令&#xff1a;java -version 2&#xff09;在项目 clone 的位置创建 Spring Boot 项目&#xff0c;使用 Maven 进行依赖管理&#xff…

大模型学习(1)

初学者&#xff0c;仅做自己学习记录&#xff0c;如果对你有什么帮助&#xff0c;那更好了。 下面是论文《Attention Is All You Need》的经典transformer架构&#xff0c;在学习的过程中&#xff0c;有很多疑惑。 embedding层在做什么 Transformer的embedding层在做的是将输…

35.【C语言】详解函数递归

目录&#xff1a; 定义 作用 例子1~3 拓展学习 趣味练习 1.定义&#xff1a;函数自己调用自己&#xff08;递推回归&#xff09; int main() {main()return 0; } 这样容易死循环&#xff0c;导致爆栈(Stack Overflow) 所以需要设立限制条件&#xff0c;使执行时越来越接近条…

02 Golang面向对象编程_20240727 课程笔记

视频课程 最近发现越来越多的公司在用Golang了&#xff0c;所以精心整理了一套视频教程给大家&#xff0c;这个是其中的第二部&#xff0c;后续还会有很多。 视频已经录制完成&#xff0c;完整目录截图如下&#xff1a; 课程目录 01 结构体的声明.mp402 使用var根据结构体…

iOS基础---多线程:GCD、NSThread、NSOperation

系列文章目录 iOS基础—多线程&#xff1a;GCD、NSThread、NSOperation 文章目录 系列文章目录一、GCD1.GCD的任务、函数、队列a.任务b.函数c.队列 2.GCD的使用a.同步函数并发队列b.异步函数并发队列c.同步函数串行队列d.异步函数串行队列e.同步函数主队列f.异步函数主队列 3.…

JavaScript 运算符优先级值表格

JavaScript 运算符优先级值 值 运算符 描述 实例 20 ( ) 表达式分组 (3 4) 19 . 成员 person.name 19 [] 成员 person["name"] 19 () 函数调用 myFunction() 19 new 创建 new Date() 17 后缀递增 i 17 -- 后缀递减 …

FastAPI(七十五)实战开发《在线课程学习系统》接口开发-- 创建课程

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 上次我们分享了&#xff0c;FastAPI&#xff08;七十四&#xff09;实战开发《在线课程学习系统》接口开发-- 删除留言 从本篇文章开始&#xff0c;…

如何学习Doris:糙快猛的大数据之路(从入门到专家)

引言:大数据世界的新玩家 还记得我第一次听说"Doris"这个名字时的情景吗?那是在一个炎热的夏日午后,我正在办公室里为接下来的大数据项目发愁。作为一个刚刚跨行到大数据领域的新手,我感觉自己就像是被丢进了深海的小鱼—周围全是陌生的概念和技术。 就在这时,我的…

使用Springcloud Gateway和Spring AI遇到的问题

使用Springcloud Gateway和Spring AI遇到的问题 1. 启动微服务时出现以下问题 Web application could not be started as there was no org.springframework.boot.web.reactive.server.ReactiveWebServerFactory bean defined in the context.解决方法 <dependency>&l…