Pytorch基础:torch.cuda.set_device函数

相关阅读

Pytorch基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12457644.html?spm=1001.2014.3001.5482


        torch.cuda.set_device函数用于设置当前使用的cuda设备,在当拥有多个可用的GPU且能被pytorch识别的cuda设备情况下(环境变量CUDA_VISIBLE_DEVICES可以影响GPU设备到cuda设备的映射)。

        由于有些情况下,可以不显式写出cuda设备的编号,此时指的是当前使用的cuda设备,默认为cuda0设备,如下所示。

import torch
print("当前cuda设备是", torch.cuda.current_device()) # 获取当前cuda设备

a=torch.tensor([1, 2, 3, 4, 5], device='cuda') # 在当前cuda设备上创建一个张量
print(a)

device=torch.device('cuda')                    # 创建一个当前cuda设备

b=torch.tensor([1, 2, 3, 4, 5], device=device) # 在当前cuda设备上创建一个张量
print(b)

c=torch.tensor([1, 2, 3, 4, 5]).to(device)     # 将张量移动到当前cuda设备
print(c)

d=torch.tensor([1, 2, 3, 4, 5]).to('cuda')     # 将张量移动到当前cuda设备
print(d)

e=torch.tensor([1, 2, 3, 4, 5]).cuda()         # 将张量移动到当前cuda设备
print(e)

f=torch.tensor([1, 2, 3, 4, 5]).cuda(device)   # 将张量移动到当前cuda设备
print(f)

输出:
当前cuda设备是 0
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:0')

        可以看到上面几个例子的在创建和转移张量时,指定了没有编号的当前cuda字符串,创建和使用的设备也是没有编号的当前cuda设备,在使用.cuda()方法时也没有指定编号或者使用了当前cuda设备。

        使用torch.cuda.set_device函数可以设置任意一个可用的cuda设备为当前cuda设备,这会影响有关当前cuda设备的命令,如下所示。

import torch

torch.cuda.set_device(1)                            # 设置当前cuda设备编号为1
print("当前cuda设备是", torch.cuda.current_device()) # 获取当前cuda设备
a=torch.tensor([1, 2, 3, 4, 5], device='cuda') # 在当前cuda设备上创建一个张量
print(a)

device=torch.device('cuda')                    # 创建一个当前cuda设备

torch.cuda.set_device(2)                       # 设置当前cuda设备编号为2
print("当前cuda设备是", torch.cuda.current_device()) # 获取当前cuda设备
b=torch.tensor([1, 2, 3, 4, 5], device=device) # 在当前cuda设备上创建一个张量
print(b)

torch.cuda.set_device(0)                       # 设置当前cuda设备编号为0
print("当前cuda设备是", torch.cuda.current_device()) # 获取当前cuda设备
c=torch.tensor([1, 2, 3, 4, 5]).to(device)     # 将张量移动到当前cuda设备
print(c)

torch.cuda.set_device(1)                       # 设置当前cuda设备编号为1
print("当前cuda设备是", torch.cuda.current_device()) # 获取当前cuda设备
d=torch.tensor([1, 2, 3, 4, 5]).to('cuda')     # 将张量移动到当前cuda设备
print(d)

torch.cuda.set_device(2)                       # 设置当前cuda设备编号为2
print("当前cuda设备是", torch.cuda.current_device()) # 获取当前cuda设备
e=torch.tensor([1, 2, 3, 4, 5]).cuda()         # 将张量移动到当前cuda设备
print(e)

torch.cuda.set_device(0)                       # 设置当前cuda设备编号为0
print("当前cuda设备是", torch.cuda.current_device()) # 获取当前cuda设备
f=torch.tensor([1, 2, 3, 4, 5]).cuda(device)   # 将张量移动到当前cuda设备
print(f)

输出:
当前cuda设备是 1
tensor([1, 2, 3, 4, 5], device='cuda:1')
当前cuda设备是 2
tensor([1, 2, 3, 4, 5], device='cuda:2')
当前cuda设备是 0
tensor([1, 2, 3, 4, 5], device='cuda:0')
当前cuda设备是 1
tensor([1, 2, 3, 4, 5], device='cuda:1')
当前cuda设备是 2
tensor([1, 2, 3, 4, 5], device='cuda:2')
当前cuda设备是 0
tensor([1, 2, 3, 4, 5], device='cuda:0')

        从上面的例子中,可以看出torch.cuda.set_device函数可以接受一个正整数参数作为编号,改变当前cuda设备。它还可以接受一个device对象作为参数,前提是这个device对象是有编号(即不能是当前cuda设备)。

device =torch.device('cuda:1')
torch.cuda.set_device(device) # 这是可行的
device =torch.device('cuda')
torch.cuda.set_device(device) # 这是错误的,因为device是一个没有编号的当前cuda设备对象

输出:
ValueError: Expected a torch.device with a specified index or an integer, but got:cuda

        pytorch官方不建议使用这个函数,而是直接显式指明有关cuda设备的编号,而不是依赖当前设备,如下所示。

import torch

a=torch.tensor([1, 2, 3, 4, 5], device='cuda:1') # 在cuda1设备上创建一个张量
print(a)

device=torch.device('cuda:2')                  # 创建一个cuda2设备

b=torch.tensor([1, 2, 3, 4, 5], device=device) # 在cuda2设备上创建一个张量
print(b)

c=torch.tensor([1, 2, 3, 4, 5]).to(device)     # 将张量移动到cuda2设备
print(c)

d=torch.tensor([1, 2, 3, 4, 5]).to('cuda:0')   # 将张量移动到cuda0设备
print(d)

e=torch.tensor([1, 2, 3, 4, 5]).cuda(1)        # 将张量移动到cuda1设备
print(e)

f=torch.tensor([1, 2, 3, 4, 5]).cuda(device)   # 将张量移动到cuda2设备
print(f)

输出:
tensor([1, 2, 3, 4, 5], device='cuda:1')
tensor([1, 2, 3, 4, 5], device='cuda:2')
tensor([1, 2, 3, 4, 5], device='cuda:2')
tensor([1, 2, 3, 4, 5], device='cuda:0')
tensor([1, 2, 3, 4, 5], device='cuda:1')
tensor([1, 2, 3, 4, 5], device='cuda:2')

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

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

相关文章

全域运营是割韭菜吗?看完再下结论!

随着流量时代的到来,各大公私域平台中的流量争夺战日益激烈,商家和品牌实现流量变现的难度值也不断提高,运营人员的压力也逐渐增大。在此背景下,全域运营的兴起或许是一个契机,能够将所有人从内卷的状态中解救出来。而…

深度解析循环购模式:让消费更有价值

大家好,我是吴军,今天我非常高兴能和大家分享一个充满活力和创新的商业模式——循环购模式。可能大家都听过消费达到一定金额就有现金返还的活动,但这种返还通常都伴随着各种条件和限制。而循环购模式,它不仅仅是一个简单的返利机…

三丰云免费虚拟主机与免费云服务器评测

三丰云是一家知名的云计算服务提供商,提供免费虚拟主机和免费云服务器的服务。今天我们就来为大家介绍一下三丰云的免费虚拟主机和免费云服务器的使用体验。首先,让我们来看看三丰云的免费虚拟主机服务。三丰云的免费虚拟主机提供了稳定可靠的空间和带宽…

电子学会C/C++编程等级考试2024年03月(八级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:道路 N个以 1 … N 标号的城市通过单向的道路相连:。每条道路包含两个参数:道路的长度和需要为该路付的通行费(以金币的数目来表示) Bob and Alice 过去住在城市 1.在注意到Alice在他们过去喜欢玩的纸牌游戏中作弊后,Bob和她分手…

美股开户,你需要知道这些!

想投资美股,却不知道开户需要多少钱? 别担心,这篇专栏将告诉你美股开户的资金要求以及相关注意事项。 1. 美股开户需要多少钱? 答案是:有的,但门槛并不高。不同平台对开户资金的要求有所不同,一…

Java JVM 浅析

为什么要有JVMJVM是什么?JVM的工作流程和组成部分JVM规范和JVM实现JVM原理详解 带着以上问题,我将尝试对JVM作出一些简单的介绍。 一、JVM 简介 在90年代初,软件开发面临一个大问题,即不同的操作系统和硬件架构要求开发不同的版本…

etcd集群恢复、单节点恢复操作手册

一、集群备份 备份方式:Jenkins触发每小时的定时任务,通过调取ansible的playbook进行etcd集群的数据备份和上传,默认只备份集群中的非leader成员,避免leader成员压力过大。将备份数据上传到对应的公有云对象存储,分别…

Flink 算子

Flink 算子 用户通过算子能将一个或多个 DataStream 转换成新的 DataStream,在应用程序中可以将多个数据转换算子合并成一个复杂的数据流拓扑。 这部分内容将描述 Flink DataStream API 中基本的数据转换 API,数据转换后各种数据分区方式,以…

Excel 两层分类后的行转列

例题描述 Excel 文件中有下图所示的数据,同 Name 的物品可能有多种颜色。 现在想要把数据列出下图的形式,每种Type一行,其后依次列出每种Name及其Color。 实现方法 使用 Excel 插件 SPL XLL 在空白单元格写入公式: spl("…

阿里云短信提示被攻击怎么解决!!

你是否收到过这样的短信,【阿里云】尊敬的用户:您的IP: 实例名称: 受到攻击流量已超过云盾DDoS基础防护的带宽峰值,服务器的所有访问已被屏蔽,如果35分钟后攻击停止将自动解除否则会延期解除。详情请登录云盾控制台DDo…

5.12学习总结

一.JAVA聊天室项目 文件发送 使用 Java Socket 实现聊天内容或文件的传输的原理如下: 服务器端启动:聊天室的服务器端在指定的端口上监听客户端的连接。它创建一个 ServerSocket 对象,并通过调用 accept() 方法等待客户端的连接请求。客户…

LSTM计算指示图

掌握网络结构组件构成 输入门、遗忘门、输出门候选记忆细胞记忆细胞隐藏状态ref:6.8. 长短期记忆(LSTM) — 《动手学深度学习》 文档 (gluon.ai)

《深入浅出LLM基础篇》(四):主流大模型介绍

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、…

冯喜运:5.13黄金晚间还会跌吗?原油还会涨吗?

【黄金消息面分析】:自5月初以来,黄金和白银一直在享受需求的回归,买家在过去几天加大了力度,一度推动金价重返2370美元上方,白银重返28.5美元上方。不过,经过几天的盘整后,黄金白银价格双双下跌…

限流算法(令牌桶漏桶计数器)

📝个人主页:五敷有你 🔥系列专栏:Spring⛺️稳中求进,晒太阳 业务重的三种情况:突发流量、恶意流量、业务本身需要 限流: 是为了保护自身系统和下游系统不被高并发流量冲垮,导致系统雪崩…

AI智剪轻松学:一键操作技巧,批量视频剪辑不求人

随着科技的飞速发展,人工智能已经渗透到我们生活的方方面面,其中AI在视频剪辑领域的应用更是为众多创作者带来了福音。AI智剪技术,以其高效、便捷的特点,正在逐步改变着传统视频剪辑的方式。今天,我们就来探讨一下如何…

新火种AI|清华开发首个AI医院小镇!开启智能医疗新纪元。

作者:小岩 编辑:彩云 AI技术飞速发展,它的影响力正在逐渐渗透到各行各业,医疗领域也不例外。 人生无非是生老病死,医疗领域与其中的“病”息息相关。所以,每每医疗领域产生什么重大进展,都会…

ranger配置ha高可用方案

变更影响面 变更完需要重启所有组件 配置lb(需要客户侧配置并提供LB地址) 转发方式选择ip hash(哈希) 监听端口为6080 协议为tcp 配置后端监听

考研数学|24像张宇那样的题?李林880和李永乐660不够用了?

以前的卷子就不说了,就说说最近的24年的考研数学题 24年考研数学真题评价: 首先数学二在计算量上超过了数学三,尤其是在高等数学的选择题部分,这使得数学二的难度可能略高于数学三,尽管两者之间并没有本质的差异。与…

测试二(测试点)

能掌握80% 一、能对穷举场景设计测试点 能对穷举场景设计测试点——>等价类划分法 1.1、等价类划分法 1.1.1. 说明 | 分类 | 步骤 说明:在所有测试数据中,具有某种共同特征的数据集合进行划分。 分类:有效等价类:满足…