基于Acclerate的transformers模型分布式训练解决方案
数据并行、流水并行、张量(权重)并行:安装必要的库:transformers==4.36.2 accelerate==0.26.1 evaluate datasets - 阿里源。
个人学习记录笔记,本篇博文比较零散,不建议跟着学习。
数据并行、流水并行、张量(权重)并行:
安装必要的库:transformers==4.36.2 accelerate==0.26.1 evaluate datasets - 阿里源
数据并行(data parallel)
实现:每个 GPU保存完整的模型,只训练部分的数据。
单进程多线程只适合单机多卡,不支持多机多卡
2.1全部步骤:
(1)导入相关包
(2)加载数据
(3)创建dataset
(4)划分数据集
(5)创建dataloader
(6)创建模型及优化器
(7)训练与验证
训练得时候记下时间和batch_size
2.2实现并行时需要修改的代码,在创建模型的语句后加上这个语句:
各卡将梯度集中到master节点,master节点对搜集来的参数进行平均后更新参数,再将参数统一发送到其他卡上。
2.3 hugging face中trainer为什么可以自动dp,可以自查看其源码:
2.4 DataParallel 并行推理验证
2.5
分布式数据并行
局部rank通常用于标识单个节点内部的计算单元(如GPU),而全局rank则用于标识整个分布式训练系统中的进程或节点。
重点在第 5、6步,计算完之后各进程需要进行通信然后保持梯度同步
换成ddp
1.初始化一个分布式训练环境
import torch.distributed as dist#导入 PyTorch 的分布式训练模块
dist.init_process_group(backend="nccl")#初始化一个分布式训练的进程组,指定通信后端为 nccl
2.实现不同的进程取不同的数据
3.对模型进行包装 DDP
4.确定调用哪个gpu:用local rank拿到当前节点内的gpu序号
需要在环境变量里边取 import os
将所有的.cuda都换成to(int(os.environ["LOCAL_RANK"]))
5. 多进程启动任务:torchrun --nproc_per_node=2 ddp.py
6.之前在每个进程都是不一样的数据,所以损失值不一样,而且但是在评估的函数里除的是测试集样本总数,所以也不对,进行修改。
(1)对loss进行通信,现在loss打印的是各自计算的结果,需要同步。
限制只打印一次,只在global rank0里打印。
(2)评估值 也需要进行通信
7.保证每个进程内划分的数据一致
8. 每次都打乱顺序。
9.batch_size是原来的2倍
10. 如果数据不能均匀切开,distributed会填充使得一致。
11.transformer trainer实现ddp 不用怎么改代码都。
结果虚高的话,还是设置一下数据加载的随机种子
Accelerate
1.数据加载上不再需要DistributedSampler
2.模型不再需要手动的放到设备上:model.to(int(os.environ["LOCAL_RANK"]))
3.不再需要初始化进程组;dist.init_process_group(backend="nccl")
4.train时调用了accelerator.reduce和print代替之前指定rank打印和dist的通信方法。
5.train时不再需要 trainloader.sampler.set_epoch(ep)(确保每个epoch开始时不同的节点有不同的数据,同时打乱顺序)
6.evaluate时调用了accelerator.gather_for_metrics代替 dist.all_reduce计算最终的结果。
使用 accelerator
对象的 gather_for_metrics
方法对预测值 pred
和标签 batch["labels"]
进行聚合,以便在分布式训练或多 GPU 训练中收集所有进程的数据。
调accelerator
的reduce方法
调用accelerator.print实现打印一次
acclerate的启动命令:accelerate lanch 文件名
accelerate config可以打开参数设置界面。
Accelerate 进阶
混合精度训练
三种启动方式:
accelerator = Accelertor(mixed_precision="bf16")
accelerate config --选择bf16--accelerate launch 文件名
accelerate launch --mixed_precision bf16 文件名
梯度累积
实验记录
启动tensorboard
ctrl+shift+p:输入tensorboard,选择调动哪个目录。
模型保存
Deepspeed
在将配置文件放到目录下后运行指定配置文件:accelerate launch --config_file default_config.yaml 文件名
参考说明
【手把手带你实战HuggingFace Transformers-分布式训练篇】分布式训练与环境配置_哔哩哔哩_bilibili
更多推荐
所有评论(0)