yolov8模型训练 执行训练命令报"OSError: [WinError 1455] 页面文件太小,无法完成操作"的问题解决
问题描述:
在进行yolov8模型训练时,在命令框中执行:yolo detect train data=E:\yolo_train_new\save\my.yaml model=E:\yolo_train_new\save\yolov8n.yaml batch=-1 epochs=3000 imgsz=800 workers=16 device=0 patience=50
命令执行后运行一段时间,报如下错误:
AMP: running Automatic Mixed Precision (AMP) checks with YOLOv8n... E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\nn\tasks.py:634: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature. return torch.load(file, map_location="cpu"), file # load E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\utils\checks.py:638: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead. with torch.cuda.amp.autocast(True): AMP: checks passed E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\engine\trainer.py:271: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead. self.scaler = torch.cuda.amp.GradScaler(enabled=self.amp) E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\utils\autobatch.py:26: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead. with torch.cuda.amp.autocast(amp): AutoBatch: Computing optimal batch size for imgsz=800 AutoBatch: CUDA:0 (NVIDIA GeForce RTX 4090 Laptop GPU) 15.99G total, 0.19G reserved, 0.06G allocated, 15.74G free Params GFLOPs GPU_mem (GB) forward (ms) backward (ms) input output 2983336 19.77 0.369 32.9 110.9 (1, 3, 800, 800) list 2983336 39.54 0.659 23.3 26 (2, 3, 800, 800) list 2983336 79.07 1.242 19.33 27.01 (4, 3, 800, 800) list 2983336 158.1 2.403 28.61 33.79 (8, 3, 800, 800) list 2983336 316.3 4.903 51.42 53.69 (16, 3, 800, 800) list AutoBatch: Using batch-size 31 for CUDA:0 9.66G/15.99G (60%) train: Scanning E:\yolo_train_new\save\labels... 792 images, 0 backgrounds, 0 corrupt: 100%|██████████| 792/792 [00:00< train: New cache created: E:\yolo_train_new\save\labels.cache val: Scanning E:\yolo_train_new\save\labels.cache... 792 images, 0 backgrounds, 0 corrupt: 100%|██████████| 792/792 [00 Traceback (most recent call last): File "<string>", line 1, in <module> File "E:\yolov8study\anaconda\envs\yolov8\Lib\multiprocessing\spawn.py", line 120, in spawn_main exitcode = _main(fd, parent_sentinel) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\yolov8study\anaconda\envs\yolov8\Lib\multiprocessing\spawn.py", line 130, in _main self = reduction.pickle.load(from_parent) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\torch\__init__.py", line 262, in <module> _load_dll_libraries() File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\torch\__init__.py", line 245, in _load_dll_libraries raise err OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\torch\lib\cublas64_12.dll" or one of its dependencies.
尝试的解决思路:
(1)根据反馈的错误结果,直接指向的是页面内存文件大小不足,则手动修改电脑的页面文件大小。
修改过程:
第一步:查看你的 RAM 大小
- 查看 RAM 大小:
- 点击 Windows 左下角的“开始”按钮,搜索并打开“系统信息”或在“设置”中找到“系统”。
- 在“系统”页面中,查找“关于”或“设备规格”,你会看到“已安装 RAM”一项,记下这个值(通常会以“GB”表示,例如 8 GB、16 GB 等)。
第二步:增加页面文件大小
进入页面文件设置
- 右键点击“此电脑”(或“我的电脑”),选择“属性”。
- 左侧点击“高级系统设置”。
- 在系统属性窗口中切换到“高级”选项卡。
- 在“性能”部分,点击“设置”按钮。
设置页面文件大小
在“性能选项”窗口切换到“高级”选项卡。
在“虚拟内存”部分,点击“更改”按钮。
取消勾选“自动管理所有驱动器的分页文件大小”。
选择你的系统盘(通常是 C: 盘),然后选择“自定义大小”,输入以下值:
初始大小:建议设置为你电脑 RAM 大小的 1 倍。例如,如果你有 8 GB RAM,可以设置为 8192 MB(1 GB = 1024 MB)。
最大大小:建议设置为你电脑 RAM 大小的 2 倍。例如,如果你有 8 GB RAM,可以设置为 16384 MB。
例如:
- 如果你有 8 GB RAM:
- 初始大小: 8192 MB
- 最大大小: 16384 MB
- 如果你有 16 GB RAM:
- 初始大小: 16384 MB
- 最大大小: 32768 MB
点击“设置”按钮,然后点击“确定”。
关闭所有窗口,可能会要求你重启电脑以使设置生效。
第三步:重启计算机
一定要重启计算机,以确保新的页面文件设置生效。
(2)修改原有训练命令参数
将命令yolo detect train data=E:\yolo_train_new\save\my.yaml model=E:\yolo_train_new\save\yolov8n.yaml batch=-1 epochs=3000 imgsz=800 workers=16 device=0 patience=50中的batch=-1 (自动选择批次)修改:
您当前的批量大小为31,可能会占用较多的显存。您可以尝试减少批量大小,例如设置为16或更小。(其实后面来看,这一步可以不做,就由系统自动根据GPU的显存自动确定一个batch的数值也没问题,一般都会自动设置为60%左右!)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
修订完以上的过程后,重新执行命令,又出现了新的问题:
AMP: checks passed E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\engine\trainer.py:271: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead. self.scaler = torch.cuda.amp.GradScaler(enabled=self.amp) train: Scanning E:\yolo_train_new\save\labels... 792 images, 0 backgrounds, 0 corrupt: 100%|██████ train: New cache created: E:\yolo_train_new\save\labels.cache val: Scanning E:\yolo_train_new\save\labels.cache... 792 images, 0 backgrounds, 0 corrupt: 100%|██ Plotting labels to runs\detect\train\labels.jpg... optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically... optimizer: SGD(lr=0.01, momentum=0.9) with parameter groups 70 weight(decay=0.0), 79 weight(decay=0.0005), 78 bias(decay=0.0) 3000 epochs... Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 1/3000 5.49G 3.83 8.042 4.294 32 800: 64%|██████▍ | 32 Traceback (most recent call last): File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\torch\utils\data\dataloader.py", line 1243, in _try_get_data data = self._data_queue.get(timeout=timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\yolov8study\anaconda\envs\yolov8\Lib\queue.py", line 179, in get raise Empty _queue.Empty The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "E:\yolov8study\anaconda\envs\yolov8\Scripts\yolo.exe\__main__.py", line 7, in <module> File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\cfg\__init__.py", line 567, in entrypoint getattr(model, mode)(**overrides) # default args from model ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\engine\model.py", line 390, in train self.trainer.train() File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\engine\trainer.py", line 208, in train self._do_train(world_size) File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\engine\trainer.py", line 361, in _do_train for i, batch in pbar: File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\tqdm\std.py", line 1181, in __iter__ for obj in iterable: File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\ultralytics\data\build.py", line 50, in __iter__ yield next(self.iterator) ^^^^^^^^^^^^^^^^^^^ File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\torch\utils\data\dataloader.py", line 701, in __next__ data = self._next_data() ^^^^^^^^^^^^^^^^^ File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\torch\utils\data\dataloader.py", line 1448, in _next_data idx, data = self._get_data() ^^^^^^^^^^^^^^^^ File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\torch\utils\data\dataloader.py", line 1402, in _get_data success, data = self._try_get_data() ^^^^^^^^^^^^^^^^^^^^ File "E:\yolov8study\anaconda\envs\yolov8\Lib\site-packages\torch\utils\data\dataloader.py", line 1256, in _try_get_data raise RuntimeError( RuntimeError: DataLoader worker (pid(s) 8232) exited unexpectedly
这时反馈说:RuntimeError: DataLoader worker (pid(s) 8232) exited unexpectedly 数据加载问题!
可能的原因及解决方案
内存不足:
- 尽管已经增加了页面文件的大小,但在数据加载过程中可能仍然会遇到内存不足的问题。可以尝试减少
workers参数的值,例如将其设置为8或更低
- 尽管已经增加了页面文件的大小,但在数据加载过程中可能仍然会遇到内存不足的问题。可以尝试减少
即原有的命令:yolo detect train data=E:\yolo_train_new\save\my.yaml model=E:\yolo_train_new\save\yolov8n.yaml batch=-1 epochs=3000 imgsz=800 workers=16 device=0 patience=50
修改为:yolo detect train data=E:\yolo_train_new\save\my.yaml model=E:\yolo_train_new\save\yolov8n.yaml batch=-1 epochs=3000 imgsz=800 workers=8 device=0 patience=50
综上:如果遇到执行训练命令出错的问题,解决方法主要有两处:
(1)增加页面文件大小
这个是直接手动修改本地电脑的页面文件大小(一系列页面操作,以手动设置替换操作系统的取消自动分配)
(2)修改训练命令
(1)训练命令的workers数值如果设置的过大,会导致内存不够用,直接导致训练中断报错,无法执行下去!而设置太小会导致训练时间过长(我的是32线程,设置16都报内存不够用,设置8不报错可正确执行)
(2)训练命令的的batch建议还是设置为-1,由系统根据GPU显卡的显存自动设置批次值(一般会按照显存的60%左右进行计算)。当然设小点肯定也行,但是执行训练的时间会变长!
最终命令:yolo detect train data=E:\yolo_train_new\save\my.yaml model=E:\yolo_train_new\save\yolov8n.yaml batch=-1 epochs=3000 imgsz=800 workers=8 device=0 patience=50
注意:imgsz一般建议设置800,640,320方形图片尺寸为好!
yolov8模型训练 执行训练命令报"OSError: [WinError 1455] 页面文件太小,无法完成操作"的问题解决的更多相关文章
- Python3安装Celery模块后执行Celery命令报错
1 Python3安装Celery模块后执行Celery命令报错 pip3 install celery # 安装正常,但是执行celery 命令的时候提示没有_ssl模块什么的 手动在Python解 ...
- 执行openstack命令报错【You must provide a username via either -...】
openstack环境搭建好后,openstack的服务都启动了,当执行openstack命令时如nova service list报如下错误 You must provide a username ...
- 安装atlas后执行hive命令报错
在集群中安装atlas,在安装atlas的节点上执行hive -e "show databases;" 正常,但是在集群中其他节点上执行hive -e "show dat ...
- Jenkins中执行docker命令报错
Cannot connect to the Docker daemon. Is the docker daemon running on this host? 在配置Jenkins从Gitlab自 ...
- hbase shell中执行list命令报错:ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
问题描述: 今天在测试环境中,搭建hbase环境,执行list命令之后,报错: hbase(main):001:0> list TABLE ERROR: org.apache.hadoop.hb ...
- CentOS执行ping命令报错 name or service not know
在虚拟机上安装的CentOS,但是当执行ping命令的时候,提示name or service not known 解决方法如下: 1. 添加DNS服务器 vi /etc/resolv.conf 1 ...
- 执行Docker命令报错解决办法
shim error: docker-runc not installed on system 服务器重启以后,执行docker命令报以上错误,解决办法如下: cd /usr/libexec/do ...
- 再见Xshell、Xftp!Python执行Linux命令、上传下载远程文件
相信大家应该都接触过Linux操作系统(Ubuntu.Centos等),那么在使用的Linux操作系统需要使用一些远程ssh工具,尤其是公网服务器. 常用的ssh工具主要有:Xshell.MobaXt ...
- Jenkins-在节点上执行copy命令,将节点机上的文件拷贝到映射的网络驱动盘中报错,访问被拒绝 找不到指定驱动器
问题如标题,根据网友提供的解决方法,完美解决: 在jenkins中执行这个命令时报错 说无法访问. 重新映射一次可解决这个问题,添加一条 net use 命令
- 关于ubuntu上执行错误命令报错
Sorry, command-not-found has crashed! 新安装了一台ubuntu server 安装时用中文安装的,之后命令行下各种乱码,最后也不知道是修改哪里造成的 每次执行一次 ...
随机推荐
- 「Log」2023.8.15 小记
序幕 七点多到校,整理博客,开始调昨天没整完的题. 手算哈希,把所有部分都先改成暴力. 好消息,暴力没问题,准备改成正解. 学长开始讲课,AC 自动机,秒了. 接着调题,过了.开心. \(\color ...
- 理解 .NET 结构体字段的内存布局
目录 前言 基本概念 结构体的默认字段布局 对齐 64 位系统与 32 位系统的对齐要求差异 默认字段布局中 对齐要求 与 偏移量 的关系 填充 包含引用类型字段的结构体的默认字段布局 用 Struc ...
- TemplatesImpl结合cc6在Shiro中的利用
TemplatesImpl结合cc6在Shiro中的利用 这个文章也是参考p牛的文章;但其中许多细节,就比如为什么普通的Transformer[]数组链不能再shiro中使用; 但其中大致原理还是说一 ...
- 函数使用十四:BAPI_PO_CREATE1
*&---------------------------------------------------------------------* *& Report ZBAPI_PO_ ...
- WEB DYNPRO程序找文本
ABAP里代码扫描就是用的SOURCE SCAN. WEB DYNPRO里有个单独的 事务代码SE24进入,执行类CL_WDY_WB_NAMING_SERVICE的方法GET_CLASSNAME_FO ...
- MyBatis 动态 SQL 与缓存机制深度解析
在Java持久层技术体系中,MyBatis凭借其灵活的SQL映射和强大的动态SQL能力,成为企业级应用开发的首选框架.本文从动态SQL核心语法.缓存实现原理.性能优化及面试高频问题四个维度,结合源码与 ...
- SQL Server 配置管理器打不开提示错误
---------------------------SQL Server 配置管理器--------------------------- 无法连接到 WMI 提供程序.您没有权限或者该服务器无法访 ...
- 简单dp 二维
转载问题 http://www.cnblogs.com/moqitianliang/p/4798882.html 简要 概括动态规划 就是求原子问题,把一个问题分解成一个原子问题. 二维数组的简单 ...
- qt 居中
简介 RT code QHBoxLayout* hb = new QHBoxLayout; QWidget* qw = new QWidget(); hb->addWidget(nPbTurn) ...
- vscode linux c++ 配置
简介 最官方的配置方案 https://code.visualstudio.com/docs/cpp/config-linux 有三个文件会生成 tasks.json (编译器构建设置) launch ...