pytorch并行处理详解(多GPU,环境变量)
目录
- 数据并行
- 方法一:环境变量 + device + to(device)
- 第一步,指定*备选*的GPU
- 直接终端中设定:
- python代码中设定:
- 第二步,创建设备(device)
- 第三步,将data和model放置到device上
- 注意事项
- 方法二 函数 set_device + 函数.cuda()
- 第一步,函数set_device设置device
- 第二部,函数.cuda()使用GPU
- 单机多卡
- 分布式 torch.distributed.launch 命令的用法(非常直观地讲解---单机多卡与多级多卡)
数据并行
PyTorch默认使用从0开始的GPU,且默认只使用0号GPU。如果要使用其他编号的GPU或者使用多块GPU,则要设置。
pytorch并行后,假设batchsize设置为64,表示每张并行使用的GPU都使用batchsize=64来计算(单张卡使用时,使用batchsize=64比较合适时,多张卡并行时,batchsize仍为64比较合适,而不是64*并行卡数)。
DataParallel 会自动拆分数据,并将作业订单发送到多个GPU上的多个模型。 在每个模型完成它们的工作之后,DataParallel 在将结果返回给你之前收集和合并结果。
有两种方法:
方法一:环境变量 + device + to(device)
第一步,指定备选的GPU
有如下两种方法来指定需要备选的GPU。
这些GPU 将在程序中可见(但不一定会使用,真正投入使用需要通过device()函数来再次选择和指定)
使用环境变量CUDA_VISIBLE_DEVICES的方式,类似于tensorflow指定GPU的方式(http://www.cnblogs.com/darkknightzh/p/6591923.html)。
直接终端中设定:
CUDA_VISIBLE_DEVICES=1
python代码中设定:
1、使用单卡
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
2、使用多块卡的方法。
例如,使用0号和1号GPU’
import os
os.environ["CUDA_VISIBLE_DEVICES"] = '0,1'
第二步,创建设备(device)
作用:将备选GPU进一步选择和指定,真正投入使用中。
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 注意如果 device = torch.device("cuda"),则环境变量CUDA_VISIBLE_DEVICES中指定的全部GPU都会被拿来使用。
# 也可以通过 "cuda:0" 、"cuda:1"等指定环境变量CUDA_VISIBLE_DEVICES中指定的多块GPU中的某一块。
注意对应关系。例如:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "2, 3, 4, 5" # 将2, 3, 4, 5号GPU作为备选GPU# 这样cuda:0表示使用 2 号GPU
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
第三步,将data和model放置到device上
# 如果他们已经在目标设备上则不会执行复制操作
input = data.to(device)
model = MyModule(...).to(device)
注意:如果有多个GPU,则model还需要多做一个操作(模型并行化)
第三步骤的多GPU版本如下:
input = data.to(device)
model = MyModule(...)
#模型并行化
if torch.cuda.device_count() > 1:print("Let's use", torch.cuda.device_count(), "GPUs!")model = nn.DataParallel(model)
model = model.to(device)
注意事项
GPU环境变量只在第一次设置起作用,此后再设置不会有任何改变了
运行下面代码,可以观察其作用机制
import os
import torch.backends.cudnn as cudnnprint("The are ", torch.cuda.device_count(), "GPUs in all!")
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
if not torch.cuda.is_available():device = torch.device('cpu')
else:cudnn.benchmark = Truecudnn.enabled = Truedevice = torch.device("cuda:1,0")print("The environ has", torch.cuda.device_count(), "GPUs!")
print(device)if torch.cuda.device_count() > 1:print("Let's use", torch.cuda.device_count(), "GPUs!")
方法二 函数 set_device + 函数.cuda()
不过官方建议使用CUDA_VISIBLE_DEVICES,不建议使用 set_device 函数。
第一步,函数set_device设置device
import torch
gpu_id = [0, 1, 2]
torch.cuda.set_device(gpu_id)
第二部,函数.cuda()使用GPU
data.cuda()
model.cuda()
单机多卡
当代研究生应当掌握的并行训练方法(单机多卡)
分布式 torch.distributed.launch 命令的用法(非常直观地讲解—单机多卡与多级多卡)
【pytorch记录】pytorch的分布式 torch.distributed.launch 命令在做什么呢
pytorch并行处理详解(多GPU,环境变量)相关推荐
- 对比损失的PyTorch实现详解
对比损失的PyTorch实现详解 本文以SiT代码中对比损失的实现为例作介绍. 论文:https://arxiv.org/abs/2104.03602 代码:https://github.com/Sa ...
- pytorch函数详解
pytorch函数详解 在typora这里写之后复制到简书上 1. torchvision 1.1 transforms.Compose(transforms) 把几个转换组合 example: fr ...
- 详解JMeter函数和变量
详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var ...
- YOLO V1~V7论文及Pytorch实现详解
YOLO~V1论文及Pytorch实现详解 论文地址:https://paperswithcode.com/paper/you-only-look-once-unified-real-time-obj ...
- 将卷积引入transformer中VcT(Introducing Convolutions to Vision Transformers)的pytorch代码详解
文章目录 1. Motivation: 2. Method 2.1 Convolutional Token Embedding 模块 2.2 Convolutional Projection For ...
- JDK软件安装+环境变量配置图文详解(Win10环境)
一.官网下载安装包:https://www.oracle.com/java/technologies/downloads/ (需要登录Oracle账号才能开始下载的,没有账号可用邮箱新注册一个) 二 ...
- BilSTM 实体识别_NLP-入门实体命名识别(NER)+Bilstm-CRF模型原理Pytorch代码详解——最全攻略
最近在系统地接触学习NER,但是发现这方面的小帖子还比较零散.所以我把学习的记录放出来给大家作参考,其中汇聚了很多其他博主的知识,在本文中也放出了他们的原链.希望能够以这篇文章为载体,帮助其他跟我一样 ...
- BilSTM 实体识别_NLP入门实体命名识别(NER)+BilstmCRF模型原理Pytorch代码详解——最全攻略...
来自 | 知乎 作者 | seven链接 | https://zhuanlan.zhihu.com/p/79552594编辑 | 机器学习算法与自然语言处理公众号本文仅作学术分享,如有侵权,请联系 ...
- 超详干货!Linux 环境变量配置全攻略
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习实验室 Linux环境变量配置 在自定义安装软件 ...
最新文章
- 山石网科发布智能下一代防火墙新版本 应对未知威胁
- 学习笔记-4.1用户管理命令
- 条件注释判断浏览器版本!--[if lt IE 9]
- 丰富“WinForms” 的一个别样项目(学生管理)
- 前端学习(2480):接口文档使用2
- not support mysql_MYSQL出现quot; Client does not support authentication quot;的解决方法
- iText中输出 中文
- java chackbox,Java CheckBox.setText方法代码示例
- SQL Server 使用Detach和Attach 方式 移动数据库位置
- 极客大学架构师训练营 - 同城快递业务架构设计 - 大作业一
- 我用Python可视化了7次人口普查数据变化,你所在的省份还好吗?
- python编写脚本方法_python写dnf脚本录制自己点击
- TMOD TCON SCON
- 手机app的性能测试工具——GT、、Emmagee
- DEV中右键菜单如何只在非空单元格上显示?
- 怎样将视频mp4转换成flac无损音乐
- 百度网盘linux版本怎么安装
- CF连杀喊话_WeGame修改
- 高通字库芯片GT20L16S1Y驱动 0.96寸 OLED 任意显示中文
- 教你用UltraISO制作启动光盘
热门文章
- 二级计算机公共基础知识
- 设计模式 —— 简单工厂模式、工厂模式
- 微信小程序--开发者工具
- MyBatis动态SQL之<foreach>用法
- Object.keys()、Object.values()、Object.entries()的用法
- 高效能人士的习惯.提炼一种高效能思维
- AntV可视化图表G2-柱状图
- 虹软Linux离线激活,虹软linux错误
- post请求几种常见content-type类型
- VMware Workstation 安装 CentOS-7 (1804) 教程