deepspeed多机多卡并行训练指南
文章目录
- 前言
- 离线配置训练环境
- 共享文件系统
- 多台服务器之间配置互相免密登录
- pdsh
- 多卡训练可能会碰到的问题
- 注意
- 总结
前言
我的配置:
7机14卡,每台服务器两张A800
问:为啥每台机只挂两张卡?
答:给我的就这样的,我倒希望单机8卡,不过这些服务器是云厂商提供的,据说都是PCIE连接,且单机最多只能挂四张卡。
服务器只允许内网访问,不能连接外网
因此,你需要先搞定如何离线配置训练环境
离线配置训练环境
具体可以参考:Anaconda 环境克隆、迁移
按照上面文章打包环境时,有可能碰到如下报错:

可通过增加参数--ignore-missing-files解决
如:conda pack -n 环境名 -o 新的环境名.tar.gz --ignore-missing-files
共享文件系统
正常来说,多机多卡训练,配置个共享文件系统是有很多好处的,比如数据集和模型你只需要存一份,更重要的是,在模型保存时,将模型保存到共享文件系统下,就不用保存多份模型,如果没有共享文件系统,你需要在每台服务器上都保存一份模型参数。
当你想要断点重训时,你需要手动合并每台机器上的优化器参数,非常麻烦。
如果真的没有共享文件系统,那怎么办?
解决办法:
方式1、在deepspeed里配置checkpoint参数的use_node_local_storage,如下:
"checkpoint": {"use_node_local_storage": true
}
怕大家不明白怎么加,这里给出一个deepspeed stage2的配置样例:
{"bfloat16": {"enabled": false},"fp16": {"enabled": "auto","loss_scale": 0,"loss_scale_window": 1000,"initial_scale_power": 16,"hysteresis": 2,"min_loss_scale": 1},"optimizer": {"type": "AdamW","params": {"lr": "auto","betas": "auto","eps": "auto","weight_decay": "auto"}},"zero_optimization": {"stage": 2,"allgather_partitions": true,"allgather_bucket_size": 2e8,"overlap_comm": true,"reduce_scatter": true,"reduce_bucket_size": "auto","contiguous_gradients": true},"gradient_accumulation_steps": "auto","gradient_clipping": "auto","steps_per_print": 1e5,"train_batch_size": "auto","train_micro_batch_size_per_gpu": "auto","wall_clock_breakdown": false,"checkpoint": {"use_node_local_storage": true}
}
参数解释

原始文档:https://www.deepspeed.ai/docs/config-json/
方式2、增加在TrainingArguments中配置参数--save_on_each_node即可
其实,huggingface中的deepspeed插件文档已经对没有共享文件系统的情况做了说明,确实比较难找,位置:https://huggingface.co/docs/transformers/main/en/main_classes/deepspeed#use-of-nonshared-filesystem

以上两种方式,都可以解决没有共享文件系统导致无法断点重训的问题。
假如你已经使用了上面的配置,还有可能会的出现一个问题就是,当你使用resume路径去恢复训练时,你有可能卡在下图的位置:

代码一直卡在这,GPU有占用,GPU利用率也有显示,此时,你应该检查你的device_map是否为auto,如果不是,那肯定会卡在这
如果device_map="auto",但代码还是卡在这,可能的解决办法:
这段图片参考自:deepspeed多机多卡训练踏过的坑
多台服务器之间配置互相免密登录
参考SSH远程登录:两台或多台服务器之间免密登录设置
这个是必须要做的,最好在一开始就做好,能节省很多时间。
pdsh
给每台服务器都安装pdsh,安装方法:
#下载解压
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/pdsh/pdsh-2.29.tar.bz2 && tar -xf pdsh-2.29.tar.bz2 -C /root/pdsh
#编译安装
cd pdsh-2.29 && ./configure --with-ssh --enable-static-modules --prefix=/usr/local && make && make install
#测试
pdsh -V
把路径换成你自己的就行,若是离线服务器,你就先在有网的服务器下载好pdsh,再复制到离线的服务器去安装
多卡训练可能会碰到的问题
问题1:ninja已经安装,deepspeed 多机多卡RuntimeError: Ninja is required to load C++ extensions
答案1:
在训练代码的开头加入:
/root/anaconda3/envs/baichuan/bin:是服务器的conda虚拟环境的bin目录
local_env = os.environ.copy()
local_env["PATH"]= "/root/anaconda3/envs/baichuan/bin:" + local_env["PATH"]
os.environ.update(local_env)
问题2:libcudart.so.12.2: cannot open shared object file: No such file or directory
答案2:
1、检查文件libcudart.so.12.2是否存在(正常来说都是存在的),不存在该文件的话,需要重装cuda
2、在命令行执行 sudo ldconfig /usr/local/cuda-12.2/lib64
注意
执行训练的代码,每台机器上要有完全一致的一份,且存储的路径都要一致(包括软件的安装路径等),以免出现奇奇怪怪的报错,真的让人头秃
总结
真正跑过多机多卡训练的同学,应该能明白,这篇文章是有多细节了!毫不夸张地说,干货满满!希望各位可以点赞+收藏。
相关文章:
deepspeed多机多卡并行训练指南
文章目录 前言离线配置训练环境共享文件系统多台服务器之间配置互相免密登录pdsh多卡训练可能会碰到的问题注意总结 前言 我的配置: 7机14卡,每台服务器两张A800 问:为啥每台机只挂两张卡? 答:给我的就这样的&#…...
9.Redis-zset
zset zset 有序集合 -> 升序常用命令zaddzcardzcountzrangezrevrange -> reverse 逆序zrangebyscorezpopmaxzpopminbzpopmax / bzpopminzrankzrevrankzscorezremzremrangebyrankzremrangebyscorezincrby集合间操作zinter -> 交集zunion -> 并集zdiff -> 差集zin…...
云计算的三个主要服务模型:IaaS、PaaS 和 SaaS
文章目录 介绍基础设施即服务(Infrastructure as a Service,IaaS)平台即服务(Platform as a Service,PaaS)软件即服务(Software as a Service,SaaS) 区别基础设施即服务&…...
spring ioc,DI,AOP概述
Spring是一个轻量级的Java开发框架。其中,IoC、DI和AOP是Spring框架的核心概念。 IoC(Inversion of Control,控制反转):IoC是一种设计模式,是指将对象的创建、管理和控制权交给IoC容器,由IoC容器…...
meethigher-Apache Poi 实现Excel多级联动下拉框
由于最近做的功能,需要将接口返回的数据列表,输出到excel中,以供后续导入,且网上现有的封装,使用起来都较为麻烦,故参考已有做法封装了工具类。 使用apache poi实现excel联动下拉框思路 创建隐藏单元格&a…...
基于食肉植物算法优化的BP神经网络(预测应用) - 附代码
基于食肉植物算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于食肉植物算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.食肉植物优化BP神经网络2.1 BP神经网络参数设置2.2 食肉植物算法应用 4.测试结果:5…...
FFDNet-pytorch版本代码训练教程
一、FFDNet-pytorch版本代码下载 (1)FFDNet-pytorch下载 https://download.csdn.net/download/qq_41104871/88233742 (2)FFDNet-pytorch版本代码运行环境配置 https://blog.csdn.net/qq_41104871/article/details/132497008 二、FFDNet-pytorch版本代码训练教程 (1)按…...
C语言练习7(巩固提升)
C语言练习7 编程题 前言 “芳林新叶催陈叶,流水前波让后波。”改革开放40年来,我们以敢闯敢干的勇气和自我革新的担当,闯出了一条新路、好路,实现了从“赶上时代”到“引领时代”的伟大跨越。今天,我们要不忘初心、牢记…...
golangORM框架Gorm
ORM框架Gorm gorm简介gorm声明模型gorm连接到数据库gorm创建记录gorm查询记录gorm高级查询gorm更新gorm删除SQL 构建器gorm Belongs To关系gorm Has One关系gorm Has Many关系gorm Many To Many关系gorm 实体关联gorm 会话gorm事务Gorm总结...
Python项目实战之《飞机大战游戏》
目录 一、Pygame库包简介 二、Pygame安装 三、项目开发思路 3.1前言 3.2飞机大战开发步骤 一、Pygame库包简介 Pygame是一个基于python的游戏开发库,它提供一系列的工具和接口,使开发人员能够轻松的创建各种类型的游戏,包括2D游戏和简单…...
Mysql数据库(2)—事务和锁
一、事务 数据库事务的特性? 数据库事务的四大特性是ACID。 原子性:就是所有操作要么全不做,要不全做。通过undo日志来实现。一致性:就是在并发情况下数据库由一个状态转移到另一个状态的数据要一致。通过事务的隔离级别来实现…...
Shell - 加固系统配置
文章目录 #! /bin/bash # Function:对账户的密码的一些加固 read -p "设置密码最多可多少天不修改:" A read -p "设置密码修改之间最小的天数:" B read -p "设置密码最短的长度:" C read -p "设置密码失效…...
【linux】记录archlinux软件包更新后lualatex无法编译的一种解决方案
1 环境参数 操作系统:archlinux Kernel: 6.4.11-arch2-1 包管理器:pacman 日期:2023.08.25 2 问题描述 今天一如往常地进行软件包更新: sudo pacman -Syu随后,在使用luelatex对我的论文(latex)…...
设计模式中的关系
文章目录 一、依赖概念 二,关联概念 三、聚合概念 四、组合概念 五、实现概念 六、继承概念 图总结整体总结 一、依赖 概念 依赖是一种临时使用关系,代码层体现为作为参数。 具体体现:依赖者调用被依赖者的局部变量、参数、静态方法&#…...
C语言之数组题
目录 1.使用函数实现数组操作 2.冒泡排序 3.三子棋 4.【一维数组】交换数组 5.扫雷 6.概念辨析tips 我又来了,今天是数组题,本人还在补军训真的热!🆗 1.使用函数实现数组操作 2.冒泡排序 3.三子棋 4.【一维数组】交换数组 …...
DbContext是Entity Framework中的一个核心类
Entity Framework(简称EF)是ADO.NET的一部分,是一个开源的、通用的对象关系映射(ORM)框架,它使得开发人员可以用面向对象的方式来操作关系数据库。 以下是Entity Framework的一些主要特性: 它…...
BTC价格预测:灰度突如其来的胜利是否会打破“九月魔咒”?
加密市场即将进入第三季度交易的最后阶段,由于9月份被视为是比特币的下跌时期,大多数投资者都预测加密货币之王将会进一步下跌。然而,事情却发生了逆转,灰度突如其来的胜利是否会打破“九月魔咒”? 受该事件影响&#…...
软件测试/测试开发丨Selenium 高级控件交互方法
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27045 一、使用场景 使用场景对应事件复制粘贴键盘事件拖动元素到某个位置鼠标事件鼠标悬停鼠标事件滚动到某个元素滚动事件使用触控笔点击触控笔事件&am…...
算法通关村-----二分查找在二叉搜索树中的应用
二叉搜索树中搜索特定值 问题描述 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。详见leetcode700 代码实现 public TreeNod…...
总结限流、降级与熔断的区别
限流、熔断与降级是流量过大时,通过一定的方式去保护系统的手段,是应对海量流量的三大“杀器”。 限流 限流是从系统的流量入口考虑,从进入的流量上进行限制,通过对并发访问进行限速,达到保护系统的作用。限制并发请求…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
