PyTorch 1.0 中文文档:多进程最佳实践
译者: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 中文文档:多进程最佳实践相关推荐
- PyTorch 1.0 中文文档正式接受校对 | ApacheCN
参与方式:https://github.com/apachecn/pytorch-doc-zh/blob/master/CONTRIBUTING.md 整体进度:https://github.com/ ...
- PyTorch 1.0 中文文档:多进程包 - torch.multiprocessing
译者:hijkzzz torch.multiprocessing 是一个本地 multiprocessing 模块的包装. 它注册了自定义的reducers, 并使用共享内存为不同的进程在同一份数据上 ...
- PyTorch 1.0 中文文档:常见问题解答
译者:冯宝宝 我的模型报告"cuda runtime error(2): out of memory" 正如错误消息所示,您的GPU显存已耗尽.由于经常在PyTorch中处理大量数 ...
- PyTorch 1.0 中文文档:torch.distributed
译者:univeryinli 后端 torch.distributed 支持三个后端,每个后端具有不同的功能.下表显示哪些功能可用于CPU/CUDA张量.仅当用于构建PyTorch的实现支持时,MPI ...
- PyTorch 1.0 中文文档:torch.onnx
译者:guobaoyo 示例:从Pytorch到Caffe2的端对端AlexNet模型 这里是一个简单的脚本程序,它将一个在 torchvision 中已经定义的预训练 AlexNet 模型导出到 O ...
- PyTorch 1.0 中文文档:torchvision.utils
译者:BXuan694 torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scal ...
- PyTorch 1.0 中文文档:torch.hub
译者:kunwuz torch.hub.load(github, model, force_reload=False, *args, **kwargs) 从github上加载一个带有预训练权重的模型. ...
- PyTorch 1.0 中文文档:torch.utils.bottleneck
译者: belonHan torch.utils.bottleneck是 调试瓶颈bottleneck时首先用到的工具.它总结了python分析工具与PyTorch自动梯度分析工具在脚本运行中情况. ...
- PyTorch 1.0 中文文档:Torch 脚本
译者:keyianpai 创建 Torch 脚本代码 将追踪和脚本化结合起来 Torch 脚本语言参考 类型 表达式 语句 变量解析 python值的使用 调试 内置函数 Torch脚本是一种从PyT ...
最新文章
- cocos2dx3.8 android打包脚本编写
- python tempfile cleanup_python tempfile 模块---生成临时文件和目录
- shell脚本传可选参数 getopts 和 getopt的方法
- python导出csv有引号_python – csv中的双引号元素不能用pandas读取
- 机器学习pdf_2020年新书-《机器学习算法入门》免费pdf分享
- Gym 100733G 	No Negations
- 3)Thymeleaf th:* 设置/修改属性值详解
- 用CSS hack技术解决浏览器兼容性问题
- 沉痛悼念游戏开发技术专家毛星云
- 如何打开计算机的Oracle服务,win10系统手动启动oracle服务的操作方法
- 颜色代码表(#号开头)
- 计算机网络和智能家居,智能家居与传统智能家居到底有什么区别
- < CSDN周赛解析:第 27 期 >
- 古剑奇谭2打砺罂10分钟过的方法!
- 《PPT思维》第一课:PPT基础思维
- android 生成kml,Android模拟GPS数据生成kml和nmea文件
- BIOS实战之读写逻辑设备(SIO)
- GCT备考-潜心复习
- CAD插件学习系列教程(六) 文字自动避让工具
- JupyterHub
热门文章
- (26)VHDL实现或(数据流描述)
- (07)VHDL实现闪灯
- centos7 网卡配置vlan_centos 7 下多网卡绑定+ vlan 网卡配置
- lwip netbuf_ref: invalid buf“
- 嵌入式串口打印信息重定向到当前终端界面
- 【蓝桥杯嵌入式】【STM32】12_2020_第十一届_蓝桥杯_嵌入式设计与开发项目_省赛
- S3C DMA使用方法,2410-2440 dma介绍
- 管道的应用(pipe)《深入分析Linux内核源码》
- 计算机程序制作的小作品,义乌市中小学生电脑作品制作比赛201203
- 多项式辗转相除法求最大公约数_多项式的一些性质