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 torchtorch.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 torcha=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')

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

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

相关文章

processing完整教程

概述:processing在我眼里就是libgdx的高度封装,如果各位会libgdx,学processing应该可以说是无师自通,当然processing是java语言那边的。 processing是什么? 官网是这样解释的:Processing 是一本灵活的软件…

Linux-- 重定向缓冲区

目录 0.接上篇文章 1.粗略的见一下这两个问题 2.理解重定向 3.理解缓冲区 0.接上篇文章 Linux--基础IO(文件描述符fd)-CSDN博客 1.粗略的见一下这两个问题 先来了解几个函数: stat()函数用于获取指定文件或符号链接的元数据。如果文件是…

中学数学研究杂志中学数学研究杂志社中学数学研究编辑部2024年第4期目录

教学纵横 高中数学选择性必修课程函数主线分析 柳双;吴立宝; 1-4 贯彻新课程理念 促学习能力提升——以“三角函数诱导公式”教学为例 陆雨轩; 4-6《中学数学研究》投稿:cn7kantougao163.com 对高中数学新课标教材新增知识点的价值分析 钱伟风;刘瑞美; …

【主题广泛|稳定检索】2024年社会科学、公共服务与人文艺术国际会议(SPSHA 2024)

2024年社会科学、公共服务与人文艺术国际会议(SPSHA 2024) 2024 International Conference on Social Sciences, Public Services, and Humanities and Arts 【会议简介】 本次会议定于2024年在中国的繁华都市——广州召开,汇聚了全球在该领…

【数据结构】堆(Heap)

文章目录 一、堆的概念及结构二、堆的实现1.向上调整算法2.向下调整算法3.堆的创建4.堆的插入5.堆的删除6.堆的其他操作 三、堆的应用1.堆排序2.Top-K问题 一、堆的概念及结构 堆(Heap)是一种特殊的非线性结构。堆中的元素是按完全二叉树的顺序存储方式存储在数组 中。满足任意…

【stm32HAL库】ADC多通道DMA采集

一、介绍一下HAL库函数 1.ADC 2.DMA 二、实验思路 1.根据数据手册直到PC1,PA2,PA3分别为ADC123的通道11,2,3,我们就用这三个通道来采集,每一个通道采集 50 次,即一共需要DMA传输150个数据 2.由…

Django项目规范化(虚拟环境、目录结构、数据库权限、建表、Media、日志)

Django项目规范化(虚拟环境、目录结构、数据库权限、建表、Media、日志) 目录 Django项目规范化(虚拟环境、目录结构、数据库权限、建表、Media、日志)前言虚拟环境pycharm创建虚拟环境 创建Django项目调整目录结构数据库规范创建…

纯血鸿蒙APP第三方库——MpChart运动健康场景实践案例

介绍 MpChart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI,MpChart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图…

C++青少年简明教程:C++程序结构

C青少年简明教程&#xff1a;C程序结构 一个简单的C程序源码如下&#xff1a; #include <iostream> using namespace std;int main() {cout << "Hello World" << endl;return 0; }下面解析一下。 1. #include <iostream> 这是一条预处理…

html中用frameset对窗口进行划分

html中&#xff0c;一般有<head><body>等部分&#xff0c;在用<frameset>对窗口进行区域划分时&#xff0c;<body>标签对就不再需要了。直接删除就可以了。 请看下面的示例&#xff1a; 由于使用frameset进行窗口划分时&#xff0c;对于电脑屏幕的划分…

HarmonyOS开发案例:【UIAbility内和UIAbility间页面的跳转】

UIAbility内和UIAbility间页面的跳转&#xff08;ArkTS&#xff09; 介绍 基于Stage模型下的UIAbility开发&#xff0c;实现UIAbility内和UIAbility间页面的跳转。包含如下功能&#xff1a; UIAbility内页面的跳转。跳转到指定UIAbility的首页。跳转到指定UIAbility的指定页…

[猫头虎分享21天微信小程序基础入门教程]第6天:与服务器进行数据交互

[猫头虎分享21天微信小程序基础入门教程]第6天&#xff1a;与服务器进行数据交互 第6天&#xff1a;与服务器进行数据交互 &#x1f310; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们将继续微信小程序的学习&#xff0c;重点了解如何与服…