目录
前言
windows下用pytorch训练的时候,比如用yolov5丶yolov8等等,只要是涉及到多进程,如dataloader的num_workers设的比较大),就有可能会遇到“OSError: [WinError 1455] 页面文件太小,无法完成操作”的错误。
一、问题原因
简述一下,就是pytorch里面有一些cuda相关的dll文件非常大,并且只要你导入了pytorch相关的包,就会去加载这些文件,而且在开启多进程的时候,每个进程都会去加载这些文件,实际上可能并没有用到,所以在windows下用的是虚拟内存。但如果你的虚拟内存不够大的话,那就会报页面文件太小的错了。
其实,电脑在默认情况下没有给C盘以外的磁盘分配虚拟内存,所以如果将Anaconda装在C盘以外的话,由于没有分配虚拟内存,在跑程序时,内存不够,自然就遇到了上面的问题。
二丶解决办法
1.调大虚拟内存
很明显,一个简单粗暴的办法就是,调大虚拟内存呗,到于调多大,我的内存是16g,直接给了100000M,也就是14g左右,可以看到下图已提交25.5g,这就是我需要的大小,所以你可以按照自己的需要和自己硬盘的大小情况,先试着给大点。
具体步骤:
1.右键此电脑选择属性,进入如下界面,点击“高级系统设置”
2.选择 ”高级“
3.在性能这一栏,选择 ”设置“
4.选择 “高级”,选择 “更改”
按照下面的12345来,先把1的勾选取消掉,我的Anaconda装在E盘,所以这里改E盘的虚拟内存,所以选中E盘,开始自定义大小,先搞个大的,点击 ”设置“,确定之后重启电脑就好了。
提几点:
(1)如果Anaconda所在盘空间不够没关系,虚拟内存可以分配到其它分区,而且还能配置到多个分区上。
(2)最好用固态硬盘啦,机械硬盘会慢一些。
(3)这个办法简单粗暴,所以当然会有他的缺点。就是分配给虚拟内存的空间会导致你硬盘空间变少,有点可惜,而且如果每次它都是实打实地给你把硬盘上的内容写一遍,还是蛮伤硬盘的,尤其是固态硬盘。
2.升级pytorch版本
为什么要升级pytorch版本呢,是因为导致这个问题的原因,可能跟pytorch有关,也可能跟英伟达有关,反正你们那个dll太大啦,或者别让我每次都得加载这些dll也行。
之前报错的环境是在conda里面,pytorch版本安装的是 pytorch==1.9.1 torchvision==0.10.1 torchaudio==0.9.1 cudatoolkit=10.2
现在来尝试一下1.13.1+cu117(cuda自然也要更新一下啦,没有尝试最新的pytorch2.0是因为yolov5貌似还不支持pytorch2.0)
这次不报错了,虽然仍然用了一些虚拟内存,但是跟之前相比,已经小很多了!
升级pytorch版本的方法步骤就不赘述了,可以参考其他帖子,直接换更高级版本的pytorch即可。
总结
1.调大虚拟内存
2.升级pytorch版本