目录

  • 数据并行
    • 方法一:环境变量 + 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,环境变量)相关推荐

  1. 对比损失的PyTorch实现详解

    对比损失的PyTorch实现详解 本文以SiT代码中对比损失的实现为例作介绍. 论文:https://arxiv.org/abs/2104.03602 代码:https://github.com/Sa ...

  2. pytorch函数详解

    pytorch函数详解 在typora这里写之后复制到简书上 1. torchvision 1.1 transforms.Compose(transforms) 把几个转换组合 example: fr ...

  3. 详解JMeter函数和变量

    详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var ...

  4. YOLO V1~V7论文及Pytorch实现详解

    YOLO~V1论文及Pytorch实现详解 论文地址:https://paperswithcode.com/paper/you-only-look-once-unified-real-time-obj ...

  5. 将卷积引入transformer中VcT(Introducing Convolutions to Vision Transformers)的pytorch代码详解

    文章目录 1. Motivation: 2. Method 2.1 Convolutional Token Embedding 模块 2.2 Convolutional Projection For ...

  6. JDK软件安装+环境变量配置图文详解(Win10环境)

    一.官网下载安装包:https://www.oracle.com/java/technologies/downloads/  (需要登录Oracle账号才能开始下载的,没有账号可用邮箱新注册一个) 二 ...

  7. BilSTM 实体识别_NLP-入门实体命名识别(NER)+Bilstm-CRF模型原理Pytorch代码详解——最全攻略

    最近在系统地接触学习NER,但是发现这方面的小帖子还比较零散.所以我把学习的记录放出来给大家作参考,其中汇聚了很多其他博主的知识,在本文中也放出了他们的原链.希望能够以这篇文章为载体,帮助其他跟我一样 ...

  8. BilSTM 实体识别_NLP入门实体命名识别(NER)+BilstmCRF模型原理Pytorch代码详解——最全攻略...

    来自 | 知乎   作者 | seven链接 | https://zhuanlan.zhihu.com/p/79552594编辑 | 机器学习算法与自然语言处理公众号本文仅作学术分享,如有侵权,请联系 ...

  9. 超详干货!Linux 环境变量配置全攻略

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习实验室 Linux环境变量配置 在自定义安装软件 ...

最新文章

  1. 山石网科发布智能下一代防火墙新版本 应对未知威胁
  2. 学习笔记-4.1用户管理命令
  3. 条件注释判断浏览器版本!--[if lt IE 9]
  4. 丰富“WinForms” 的一个别样项目(学生管理)
  5. 前端学习(2480):接口文档使用2
  6. not support mysql_MYSQL出现quot; Client does not support authentication quot;的解决方法
  7. iText中输出 中文
  8. java chackbox,Java CheckBox.setText方法代码示例
  9. SQL Server 使用Detach和Attach 方式 移动数据库位置
  10. 极客大学架构师训练营 - 同城快递业务架构设计 - 大作业一
  11. 我用Python可视化了7次人口普查数据变化,你所在的省份还好吗?
  12. python编写脚本方法_python写dnf脚本录制自己点击
  13. TMOD TCON SCON
  14. 手机app的性能测试工具——GT、、Emmagee
  15. DEV中右键菜单如何只在非空单元格上显示?
  16. 怎样将视频mp4转换成flac无损音乐
  17. 百度网盘linux版本怎么安装
  18. CF连杀喊话_WeGame修改
  19. 高通字库芯片GT20L16S1Y驱动 0.96寸 OLED 任意显示中文
  20. 教你用UltraISO制作启动光盘

热门文章

  1. 二级计算机公共基础知识
  2. 设计模式 —— 简单工厂模式、工厂模式
  3. 微信小程序--开发者工具
  4. MyBatis动态SQL之<foreach>用法
  5. Object.keys()、Object.values()、Object.entries()的用法
  6. 高效能人士的习惯.提炼一种高效能思维
  7. AntV可视化图表G2-柱状图
  8. 虹软Linux离线激活,虹软linux错误
  9. post请求几种常见content-type类型
  10. VMware Workstation 安装 CentOS-7 (1804) 教程