如何并行运行程序

参考了官方文档, torch.nn.parallel.DataParallel
以及https://zhuanlan.zhihu.com/p/102697821

在运行此DataParallel模块之前,并行化模块必须在device_ids [0]上具有其参数和缓冲区。在执行DataParallel之前,会首先把其模型的参数放在device_ids[0]上,一看好像也没有什么毛病,其实有个小坑。我举个例子,服务器是八卡的服务器,刚好前面序号是0的卡被别人占用着,于是你只能用其他的卡来,比如你用2和3号卡,如果你直接指定device_ids=[2, 3]的话会出现模型初始化错误,类似于module没有复制到在device_ids[0]上去。

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "2, 3"

当你添加这两行代码后,那么device_ids[0]默认的就是第2号卡,你的模型也会初始化在第2号卡上了,而不会占用第0号卡了。这里简单说一下设置上面两行代码后,那么对这个程序而言可见的只有2和3号卡,和其他的卡没有关系,这是物理上的号卡,逻辑上来说其实是对应0和1号卡,即device_ids[0]对应的就是第2号卡,device_ids[1]对应的就是第3号卡。(当然你要保证上面这两行代码需要定义在

device_ids = [0, 1]
net = torch.nn.DataParallel(net, device_ids=device_ids)

而且不要以为添加了to(device)或者.cuda() 就运行在卡0上了,其实不然! 这只是将模型暂时放到了卡0上,第二步系统会复制模型和参数的!

而且并行和to、cuda是缺一不可的!

代码测试:

import torch
import torch.nn as nn
import torch.nn.functional as F
import osos.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"  #指定程序可见的devices! 也就是其它设备都不可见
os.environ["CUDA_VISIBLE_DEVICE"] = "0, 1"    #设置当前使用的GPU设备为1,0号两个设备,名称依次为'/gpu:0'、'/gpu:1'。表示优先使用1号设备,然后使用0号设备## 看起来没事,但是有坑的! 如果我们和别人一块使用的话,别人在用卡0,因为程序会默认将模型参数和缓存放到卡0,那么你不改上面的话就会出现问题device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")class Model(nn.Module):def __init__(self):super(Model, self).__init__()self.conv1 = nn.Conv2d(1, 20, 5)self.conv2 = nn.Conv2d(20, 20, 5)def forward(self, x):x = F.relu(self.conv1(x))return F.relu(self.conv2(x))input = torch.randn(128, 1, 256, 128)
net = Model()
if torch.cuda.device_count() > 1:# model.to(device)device_ids = [0, 1, 2]net = torch.nn.parallel.DataParallel(net, device_ids=device_ids)net.cuda()# net.to(device)    //两种方法都可以! 只不是这种方法考虑了不能用的情况!for param in next(net.parameters()):print(param, param.device)print(next(net.parameters()).device)
net = net(input)
print(net)

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

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

相关文章

matlab打开笔记本摄像头_matlab窗口调用摄像头

更改”.m“文件:function varargout untitled1(varargin)% UNTITLED1 MATLAB code for untitled1.fig% UNTITLED1, by itself, creates a new UNTITLED1 or raises the existing% singleton*.%% H UNTITLED1 returns the handle to a new UNTITLED…

session过期后登陆页面跳出iframe页面问题

登陆页面增加javascript:function window.onload(){if(window.parent.length>0)window.parent.locationlocation;}转载于:https://www.cnblogs.com/shenyunjun420/archive/2009/09/29/1576400.html

LeetCode 1143. 最长公共子序列(动态规划)

1. 题目 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新…

【DKN】(四)train.py

内容 try: #不用多言, 获得该模块下的model_name函数Model getattr(importlib.import_module(f"model.{model_name}"), model_name)config getattr(importlib.import_module(config), f"{model_name}Config") except AttributeError:print(…

用promise封装ajax_ES6-promise封装AJAX请求

【摘要】ES6-promise封装AJAX请求考必过小编为大家整理了关于ES6-promise封装AJAX请求的信息,希望可以帮助到大家!ES6-promise封装AJAX请求标签:const状态码setreject对象响应状态ISErequest// 接口地址:https://api.apiopen.top/getJoke// 1…

REST和SOAP Web Service的比较(写得非常清晰易懂,转载于此)

本文转载自他人的博客,ArcGIS Server 推出了 对 SOAP 和 REST两种接口(用接口类型也许并不准确)类型的支持,本文非常清晰的比较了SOAP和Rest的区别联系!REST似乎在一夜间兴起了,这可能引起一些争议,反对者可…

LeetCode 1249. 移除无效的括号(栈+set / deque)

1. 题目 给你一个由 (、) 和小写字母组成的字符串 s。 你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。 请返回任意一个合法字符串。 有效「括号字符串」应当符合以下 任意一条 要求&…

【DKN】(七)dataset.py【未完】

内容 里面有的函数在这里https://blog.csdn.net/qq_35222729/article/details/119882362 try:config getattr(importlib.import_module(config), f"{model_name}Config") except AttributeError:print(f"{model_name} not included!")exit()class BaseDa…

php raabitmq中间件_rabbitMQ消息中间件环境配置及原理了解

视频教程一、Docker 入门Docker是什么?Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任 何流行的 Linux 机器上。为什么要使用 Docke…

CSS 中的定位:relative,absolute

今天碰到一个定位问题,问题解决不好,于是花了大量的时间,调试了好久,得出了一些结果:1、如果有两个不交叉的盒子位于一个大盒子里面,位于上边的盒子的定位为relative,而下边的那个盒子的定位则是…

【DKN】(六)KCNN.py

内容 import torch import torch.nn as nn import torch.nn.functional as F from src.model.general.attention.additive import AdditiveAttentiondevice torch.device("cuda:0" if torch.cuda.is_available() else "cpu")class KCNN(torch.nn.Module):…

北京精雕现状_6秒精密加工,日本走下神坛,北京精雕也做了一个!

各位社友还记得吗,机械社区之前分享过——日本6秒的精密加工火遍制造业圈子~▲点击上图 查看日本怎么用6s让世界惊奇在一阵惊呼赞叹中,一部分人也表示不服!比如,国内一位牛人也展示了他的产品。一起看看视频介绍吧——而近日&…

LeetCode 859. 亲密字符串

1. 题目 给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。 示例 1: 输入: A "ab", B "ba" 输出&#xff1a…

ASP.Net快速开发新闻系统 在线播放

http://www.so138.com/sov/d19a5913-88cf-4abf-a487-69293bb0c403.html转载于:https://www.cnblogs.com/freedom831215/archive/2009/10/03/1577631.html

【DKN】(五)attention.py

感觉还是挺简单,这里只是方便之后回来瞅瞅 import torch import torch.nn as nn import torch.nn.functional as Fclass Attention(torch.nn.Module):"""Attention Net.Input embedding vectors (produced by KCNN) of a candidate news and all of…

小米扫地机器人充电座指示灯不亮_小米扫地机器人常见问题处理 充电后无法取电怎么办?...

与其他科技领域一样,人工智能领域也得到蓬勃发展。如今人工智能已经无处不在。专家把人工智能比作电力,因为它是一种可能改变各行各业的资源。诚然,每个领域都有一些特别重要的技术,例如随着生活的水平的提高,扫地机器…

Enterprise Library 4.1 快速上手(图)

简介: 关于Enterprise Library 的概念,网上可以很容易的找到,在这里要做的是如何快速的打通Enterprise Library 4.1的使用, 让咱们可以用最短的时间使用起来,并且在需要的时候在此基础上再花时间延伸,这是学…

知识图谱源码详解【八】__init__.py

import torch from src.model.DKN.KCNN import KCNN from src.model.DKN.attention import Attention from src.model.general.click_predictor.DNN import DNNClickPredictor# 就是把整个模型框架梳理到一块了! class DKN(torch.nn.Module):"""Deep…

python complex函数def_【Python3】Python函数

1. 函数对象函数是第一类对象,即函数可以当做数据传递可以被引用可以当做参数传递返回值可以是函数可以当做容器类型的元素def foo():print(from foo)def index():print(from index)dic {foo:foo,index:index,}while True:choice input(">>>>>…

追MM与设计模式的有趣见解

Posted on 2007-01-18 12:53 东人EP 阅读(383) 评论(0) 编辑 收藏 引用 所属分类: Design Pattern 追MM与设计模式的有趣见解 创建型模式 1、FACTORY —追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,…