当前位置: 首页 > 工具软件 > Caffe2 > 使用案例 >

pyorch问题(1):锁页内存问题:Leaking Caffe2 thread-pool after fork. (function pthreadpool

云浩然
2023-12-01
[W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)
[W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)
[W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)
[W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)
[W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)
[W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)
[W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)

pytorch运行过程中遇到Leaking Caffe2 thread-pool after fork. (function pthreadpool)
这是因为DataLoader中的pin_memory设置为True;
主机中的内存,有两种存在方式,一是锁页,二是不锁页,锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换(注:虚拟内存就是硬盘),而不锁页内存在主机内存不足时,数据会存放在虚拟内存中。
pin_memory就是锁页内存,创建DataLoader时,设置pin_memory=True,则意味着生成的Tensor数据最开始是属于内存中的锁页内存,这样将内存的Tensor转义到GPU的显存就会更快一些;在设备比较告诉高端,内存充足的情况下,可以将pin_memory设置为True,因为这样设置的话,则意味着生成的Tensor数据最开始是属于内存中的锁页内存==(显存都是虚拟内存)==,这样将内存的Tensor转义到GPU的显存就会更快一些。但是如果主机内存不足的话,设置pin_memory为false,回到导致这种错误;
解决办法:将pin_memory设置为false;这样在锁存不足的时候,就会把数据存在虚拟内存(硬盘内);只不过这种方法,在给GPU喂数据的时候会比较慢;

关于锁页内存的介绍链接

 类似资料: