| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python指定Gpu -> 正文阅读 |
|
[Python知识库]python指定Gpu |
PyTorch默认使用从0开始的GPU,如果GPU0正在运行程序,需要指定其他GPU。 有如下两种方法来指定需要使用的GPU。 1. 类似tensorflow指定GPU的方式,使用CUDA_VISIBLE_DEVICES。 1.1 直接终端中设定: CUDA_VISIBLE_DEVICES=1 python my_script.py 1.2 python代码中设定: import os os.environ["CUDA_VISIBLE_DEVICES"] = "2" 见网址:(原)tensorflow中使用指定的GPU及GPU显存 - darkknightzh - 博客园 2. 使用函数 set_device import torch torch.cuda.set_device(id) 该函数见 pytorch-master\torch\cuda\__init__.py。 不过官方建议使用CUDA_VISIBLE_DEVICES,不建议使用 set_device 函数。 注:官方解释 如果服务器具有多个GPU,
设置 3.指定cuda的函数:使用 # 如果未指定使用哪块GPU,默认使用GPU 0 x = t.cuda.FloatTensor(2, 3) # x.get_device() == 0 y = t.FloatTensor(2, 3).cuda() # y.get_device() == 0 # 指定默认使用GPU 1 with t.cuda.device(1): # 在GPU 1上构建tensor a = t.cuda.FloatTensor(2, 3) # 将tensor转移至GPU 1 b = t.FloatTensor(2, 3).cuda() print(a.get_device() == b.get_device() == 1 ) c = a + b print(c.get_device() == 1) z = x + y print(z.get_device() == 0) # 手动指定使用GPU 0 d = t.randn(2, 3).cuda(0) print(d.get_device() == 2) t.set_default_tensor_type('torch.cuda.FloatTensor') # 指定默认tensor的类型为GPU上的FloatTensor a = t.ones(2, 3) a.is_cuda 4. tensor.cuda和variable.cuda,都会返回一个新对象,这个新对象的数据已转移至GPU,而之前的tensor/variable的数据还在原来的设备上(CPU)。但是nn.MOdule下的cuda()方法,会将所有数据都迁移至GPU,并返回自己。所以module = module.cuda()和module.cuda()效果相同。通过is_cuda()判断tensor对象是否在cuda上。 tensor = t.Tensor(3, 4) # 返回一个新的tensor,保存在第1块GPU上,但原来的tensor并没有改变 tensor.cuda(0) tensor.is_cuda # False # 不指定所使用的GPU设备,将默认使用第1块GPU tensor = tensor.cuda() tensor.is_cuda # True module = nn.Linear(3, 4) module.cuda(device = 1) module.weight.is_cuda # True 5.判断支持cuda,自动决定是在GPU还是CPU上运行。 # 在不支持CUDA的机器下,下一步还是在CPU上运行 device = t.device("cuda:0" if t.cuda.is_available() else "cpu") x = x.to(device) y = y.to(x.device) z = x+y 此外,还可以使用上面的 6.指定cuda的函数其他方式 >>> torch.zeros([2, 4], dtype=torch.int32) tensor([[ 0, 0, 0, 0], [ 0, 0, 0, 0]], dtype=torch.int32) >>> cuda0 = torch.device('cuda:0') >>> torch.ones([2, 4], dtype=torch.float64, device=cuda0) tensor([[ 1.0000, 1.0000, 1.0000, 1.0000], [ 1.0000, 1.0000, 1.0000, 1.0000]], dtype=torch.float64, device='cuda:0') 7.把数据从CPU迁移到GPU时,可以用.cuda()方法,也可以用.to(device)方法。示例如下。 .cuda()方法
.to(device)方法 (推荐)
.cuda()方法和.to(device)方法耗时基本差不多。但是.to(device)代码风格更容易后期修改。 8.另外,值得注意到的是,张量在GPU和CPU之间的迁移不是in-place操作(返回新对象),而模型在GPU和CPU之间的迁移是in-place操作(返回原来的对象)。示例如下。
运行结果: ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 20:56:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |