译者:cvley

torch.multiprocessing 是 Python 的 multiprocessing 的直接替代模块。它支持完全相同的操作,但进行了扩展,这样所有的张量就可以通过一个 multiprocessing.Queue 进行传递,将数据移动到共享内存并只将句柄传递到另一个进程。

注意

当一个 Tensor 传递到另一个进程时,Tensor 的数据是共享的。如果 torch.Tensor.grad 不是 None, 也会被共享。在一个没有 torch.Tensor.grad 域的 Tensor 被送到其他进程时,一个标准的进程专用的 .grad Tensor 会被创建,而它在所有的进程中不会自动被共享,与 Tensor 数据的共享方式不同。

这就允许实现各种训练方法,比如 Hogwild、A3C,或者其他那些需要异步操作的方法。

共享 CUDA 张量

进程间共享 CUDA 张量仅支持 Python 3,使用的是 spawn 或者 forkserver 启动方法。Python 2 中的 multiprocessing 仅使用 fork 来创建子进程,而 CUDA 运行时不支持该方法。

警告

CUDA API 需要分配给其他进程的显存在它们还在使用的情况下一直有效。你需要仔细确保共享的 CUDA 张量若非必须,不会超出使用范围。这对于共享模型参数不会是一个问题,但传递其他类型的数据时需要谨慎。注意该限制并不适用于共享 CPU 内存。

也可以参考:使用 nn.DataParallel 替代 multiprocessing

最佳实践和提示

避免和处理死锁

当创建一个新进程时,很多情况会发生,最常见的就是后台线程间的死锁。如果任何一个线程有锁的状态或者引入了一个模块,然后调用了fork,子进程很有可能处于中断状态,并以另外的方式死锁或者失败。注意即使你没这么做,Python 内建的库也有可能这么做——无需舍近求远,multiprocessing即是如此。multiprocessing.Queue 实际上是一个非常复杂的类,可以创建多个线程用于串行、发送和接收对象,它们也会出现前面提到的问题。如果你发现自己遇到了这种情况,尝试使用 multiprocessing.queues.SimpleQueue,它不会使用额外的线程。

我们在尽最大努力为你化繁为简,确保不会发生死锁的情况,但有时也会出现失控的情况。如果你遇到任何暂时无法解决的问题,可以在论坛上求助,我们将会研究是否可以修复。

阅读全文/改进本文

PyTorch 1.0 中文文档:多进程最佳实践相关推荐

  1. PyTorch 1.0 中文文档正式接受校对 | ApacheCN

    参与方式:https://github.com/apachecn/pytorch-doc-zh/blob/master/CONTRIBUTING.md 整体进度:https://github.com/ ...

  2. PyTorch 1.0 中文文档:多进程包 - torch.multiprocessing

    译者:hijkzzz torch.multiprocessing 是一个本地 multiprocessing 模块的包装. 它注册了自定义的reducers, 并使用共享内存为不同的进程在同一份数据上 ...

  3. PyTorch 1.0 中文文档:常见问题解答

    译者:冯宝宝 我的模型报告"cuda runtime error(2): out of memory" 正如错误消息所示,您的GPU显存已耗尽.由于经常在PyTorch中处理大量数 ...

  4. PyTorch 1.0 中文文档:torch.distributed

    译者:univeryinli 后端 torch.distributed 支持三个后端,每个后端具有不同的功能.下表显示哪些功能可用于CPU/CUDA张量.仅当用于构建PyTorch的实现支持时,MPI ...

  5. PyTorch 1.0 中文文档:torch.onnx

    译者:guobaoyo 示例:从Pytorch到Caffe2的端对端AlexNet模型 这里是一个简单的脚本程序,它将一个在 torchvision 中已经定义的预训练 AlexNet 模型导出到 O ...

  6. PyTorch 1.0 中文文档:torchvision.utils

    译者:BXuan694 torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scal ...

  7. PyTorch 1.0 中文文档:torch.hub

    译者:kunwuz torch.hub.load(github, model, force_reload=False, *args, **kwargs) 从github上加载一个带有预训练权重的模型. ...

  8. PyTorch 1.0 中文文档:torch.utils.bottleneck

    译者: belonHan torch.utils.bottleneck是 调试瓶颈bottleneck时首先用到的工具.它总结了python分析工具与PyTorch自动梯度分析工具在脚本运行中情况. ...

  9. PyTorch 1.0 中文文档:Torch 脚本

    译者:keyianpai 创建 Torch 脚本代码 将追踪和脚本化结合起来 Torch 脚本语言参考 类型 表达式 语句 变量解析 python值的使用 调试 内置函数 Torch脚本是一种从PyT ...

最新文章

  1. cocos2dx3.8 android打包脚本编写
  2. python tempfile cleanup_python tempfile 模块---生成临时文件和目录
  3. shell脚本传可选参数 getopts 和 getopt的方法
  4. python导出csv有引号_python – csv中的双引号元素不能用pandas读取
  5. 机器学习pdf_2020年新书-《机器学习算法入门》免费pdf分享
  6. Gym 100733G No Negations
  7. 3)Thymeleaf th:* 设置/修改属性值详解
  8. 用CSS hack技术解决浏览器兼容性问题
  9. 沉痛悼念游戏开发技术专家毛星云
  10. 如何打开计算机的Oracle服务,win10系统手动启动oracle服务的操作方法
  11. 颜色代码表(#号开头)
  12. 计算机网络和智能家居,智能家居与传统智能家居到底有什么区别
  13. < CSDN周赛解析:第 27 期 >
  14. 古剑奇谭2打砺罂10分钟过的方法!
  15. 《PPT思维》第一课:PPT基础思维
  16. android 生成kml,Android模拟GPS数据生成kml和nmea文件
  17. BIOS实战之读写逻辑设备(SIO)
  18. GCT备考-潜心复习
  19. CAD插件学习系列教程(六) 文字自动避让工具
  20. JupyterHub

热门文章

  1. (26)VHDL实现或(数据流描述)
  2. (07)VHDL实现闪灯
  3. centos7 网卡配置vlan_centos 7 下多网卡绑定+ vlan 网卡配置
  4. lwip netbuf_ref: invalid buf“
  5. 嵌入式串口打印信息重定向到当前终端界面
  6. 【蓝桥杯嵌入式】【STM32】12_2020_第十一届_蓝桥杯_嵌入式设计与开发项目_省赛
  7. S3C DMA使用方法,2410-2440 dma介绍
  8. 管道的应用(pipe)《深入分析Linux内核源码》
  9. 计算机程序制作的小作品,义乌市中小学生电脑作品制作比赛201203
  10. 多项式辗转相除法求最大公约数_多项式的一些性质