使用hugging face开源库accelerate进行多GPU(单机多卡)训练卡死问题

news2024/10/6 16:26:00

目录

  • 问题描述及配置
  • 网上资料查找
    • 1.tqdm问题
    • 2.dataloader问题
    • 3.model(input)写法问题
    • 4.环境变量问题
  • 我的卡死问题解决方法

问题描述及配置

在使用hugging face开源库accelerate进行多GPU训练(单机多卡)的时候,经常出现如下报错

[E ProcessGroupNCCL.cpp:828] [Rank 1] Watchdog caught collective operation timeout: WorkNCCL(OpType=BROADCAST, Timeout(ms)=1800000) ran for 1808499 milliseconds before timing out.
[E ProcessGroupNCCL.cpp:587] [Rank 0] Watchdog caught collective operation timeout: WorkNCCL(OpType=ALLREDUCE, Timeout(ms)=1800000) ran for 1808493 milliseconds before timing out.

而且,程序能正常运行几十个epoch,然后在运行中间卡死。卡死的位置永远是出现在测试集进行eval结束之后,而不是出现在对训练集的训练过程中。

例如,我每40个epoch进行一次测试(eval),那么卡死经常会出现在第80个epoch,或者第120个epoch的位置,有时候还会出现在第400个epoch。

完整报错如下图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网上资料查找

我查阅网上资料,有很多种方法解决如下问题,虽然网上所查阅到的方法都没有解决我的问题,但是在这里都记录一下,或许对大家有用:

1.tqdm问题

有说在训练过程中,如果使用了tqdm打印进度条会出现卡死的问题,需要将所有tqdm代码都删除

2.dataloader问题

dataloader分为两种问题:

  1. 有的博客说使用pytorch中的dataloader对dataset进行封装的时候,在多GPU训练的情况下会卡死,所以需要去除dataloader的封装,直接使用dataset进行训练(但是我认为这种说法不可靠
  2. 有的博客说使用dataloader的时候,如果设置了drop_last=False,或者是设置了shuffle=True,会导致开始(我认为这种说法也不可靠

3.model(input)写法问题

在给予模型输入,进行正向传播的时候,我们通常写法是

output=model(input)

一些说法说这种写法在多GPU训练的时候,在模型进行eval的时候需要改一下:

output=model.module(input)

这样即可解决问题

4.环境变量问题

环境变量问题应该是最主要的一个解决方案,即更改环境变量。更改环境变量有很多方法,这里说一下在bash中临时更改环境变量的方法:

即在bash中输入

export NCCL_P2P_LEVEL=NVL

或者输入

export NCCL_P2P_DISABLE=1

然后再运行多GPU训练的代码

我的卡死问题解决方法

我经过长时间调试,发现我的问题出在这里:

我每次在eval的时候,都会判断这次测试集的loss是否和以往的相比是否是最小的,如果是最小的,那么获取这一个epoch的模型参数,问题就出现在获取模型参数这里(红框画出来的)
在这里插入图片描述
或者如果不加self.accelerator.wait_for_everyone()也是一样的,会出现同样的问题
在这里插入图片描述
卡死就在获取模型参数的部分,这里就是“有概率”出现卡死,因为运行一次可能没问题,但是如果我每40个epoch就运行一次eval,那么在第80个,第120个epoch就会卡死。

我猜测这是由于accelerate是通过多进程来控制多个GPU进行训练的,这里多个进程都去获取模型参数,所以才会出现卡死的情况。

因此,解决方法如下

在这里插入图片描述

在判断条件中要加上判断是否在主进程中,然后去掉self.accelerator.wait_for_everyone()

这样就解决了卡死的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1091048.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

key value存储到底有什么优势?

昨天被问到Key value存储到底有什么优势,当然脑子也没太转过来。正好昨天学习了B树和LSM树的差别,并了解到LSM树底层是可以用sstable来实现的。sstable包含一个数据块列表和一个索引块,数据块存储有序键镇对,索引块存储所有数据块…

navicate安装教程

Navicat是一款数据库管理工具,它支持多种数据库类型,包括MySQL、MariaDB、Oracle、SQL Server等。Navicat具有直观的图形用户界面和易于使用的功能,可以让用户轻松地管理和操作数据库。 首先,Navicat提供了一种简单的方法来连接到…

Linux gcc和make学习

文章目录 GCCgcc的安装gcc的工作流程 makefilemakefile的规则工作原理自动生成makefile的变量自定义变量预定义变量自动变量 模式匹配函数wildcard函数patsubst函数 伪声明 GCC gcc全程是(GNU compiler collection CNU编译器套件),是由GNU开发…

【汇编语言学习笔记】一、基础知识

引言 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。 1.1机器语言 机器语言是机器指令的集合。 机器指令展开来讲就是一台机器可以正确执行的命令。 1.2汇编语言 汇编语言的主体是汇编指令。 …

2023年中国特高压绝缘子市场规模及特高压投资完成额统计[图]

绝缘子指一般由固体绝缘材料制成,安装在不同点位的导体之间或导体与接地构件之间,是同时起到电气绝缘和机械支撑作用的器件,绝缘子可分为瓷绝缘子、玻璃绝缘子与复合绝缘子。特高压绝缘子指用于交流1,000kV、直流800kV及以上电压等级的绝缘子…

基于SSM框架的安全教育平台

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

QT CmakeLists配置python

这是exe目录,要放到这里,要放到这里,要放到这里。 find_package(PythonLibs 3.6 REQUIRED) include_directories(${PYTHON_INCLUDE_DIRS})set(PY python/libs/) set(PY_LIBS ${PY}_tkinter ${PY}python3 ${PY}python36 ${PY}python36_d) targ…

1805_emacs org-mode的归档处理

全部学习汇总:GreyZhang/g_org: my learning trip for org-mode (github.com) 我使用org-mode其实很多年了,但是使用的org-mode功能非常少而且技术自然也是很浮于表面。很多org-mode本身的功能我了解不多,更谈不上能够掌握。就比如说通过org维…

【DRAM存储器十五】DDR介绍-关键技术之DLL和prefetch

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《镁光DDR数据手册》 目录 DLL 预取 DDR SDRAM的几个新增时…

Centos下编译ffmpeg动态库

文章目录 一、下载ffmpeg安装包二、编译ffmpeg三、安装yasm 一、下载ffmpeg安装包 下载包 wget http://www.ffmpeg.org/releases/ffmpeg-4.4.tar.gz解压 tar -zxvf ffmpeg-4.4.tar.gz二、编译ffmpeg 进入解压的目录 cd ffmpeg-4.4编译动态库 ./configure --enable-shared…

MyBatisPlus之基本CRUD、常用注解

文章目录 前言一、MyBatisPlus简介1.简介2.特性 二、基本CRUD1.依赖2.搭建基本结构3.BaseMapper4.使用插入删除(1)通过id删除记录(2)通过id批量删除记录(3)通过map条件删除记录 修改查询(1&…

python 爬虫与协同过滤的新闻推荐系统 计算机竞赛

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python 爬虫与协同过滤的新闻推荐系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖&…

opencv跨平台arm交叉编译之ubuntu

目录 1. 安装交叉编译工具链2. 安装依赖3. 配置工具链3.1 新建build目录3.2 安装cmake-gui3.3 工具链配置界面进行配置3.3.1 终端输入以下命令3.3.2 点击Configure,弹出编译方式选择对话框:3.3.3 点击Next3.3.4 点击Finish3.3.5 点击Configure。3.3.6 Ge…

SAP PP cs62 提示 输入更改号 - BOM 有历史需求

以上是业务操作人员的 账户 但是IT aLL 这边是warning 不是error 遂去查OSS suim 找 C_STUE_NOH权限对象 赋予权限后 解决了

交通物流模型 | T-GCN:用于交通流预测的时序图卷积网络

交通物流模型 | T-GCN:用于交通流预测的时序图卷积网络 为了同时捕获空间和时间依赖性,本文提出了一种新的基于神经网络的交通流预测方法——时间图卷积网络(T-GCN)模型,该模型将图卷积网络(GCN)和门控循环单元(GRU)相结合。具体来说,GCN用于学习复杂拓扑结构以获取空间相关…

SystemVerilog Assertions应用指南 第一章(1.22章节 and运算符)

1.22“and”构造 进制运算符“and”可以用来逻辑地组合两个序列。当两个序列都成功时整个属性才成功。两个序列必须具有相同的起始点,但是可以有不同的结束点。检验的起始点是第一个序列的成功时的起始点,而检验的结束点是使得属性最终成功的另一个序列成功时的点。 序…

接口自动化测试_L2

目录: 接口请求体-文件 文件上传接口场景使用 requests 如何上传接口请求体-form表单 ​​​​​​​什么是 FORM 请求如何使用?接口请求体-xml​​​​​​​xml响应断言 ​​​​​​​​​​​​​​什么是 XMLXML 断言XPath 断言XML 解析cookie处理…

网络安全渗透测试工具AWVS14.6.2的安装与使用(激活)

AWVS介绍 Acunetix Web Vulnerability Scanner(AWVS)是一款用于检测网站和Web应用程序中安全漏洞的自动化工具。它的主要功能包括: 漏洞扫描:AWVS能够自动扫描目标网站和Web应用程序,以发现各种安全漏洞,如…

水质在线监测解决方案:数据采集终端的应用

​ 随着社会的发展,河流、湖泊等水环境的保护日益受到关注。但是传统的人工采样检测水质的方法低效且监测数据不连续,无法实时全面掌握水质动态。采用水质在线监测系统,可以实时监测水质参数,并将数据通过无线网络实时传输,以便水务部门监控水质变化,并快速采取应对措施,保护水…

网工配置命令基础总结(2)----VRRP配置

目录 1.配置VRRP主备备份 2.配置VRRP负载分担 3.配置VRRP域BFD联动实现快速切换 VRRP 虚拟路由冗余协议 VRRP(Virtual Router Redundancy Protocol)通过把几台路由设备联合组成一台虚拟的路由设备,将虚拟网关设备的 IP 地址作为用户的默认…