type
status
date
slug
summary
tags
category
icon
password
之前跑多卡并行一直用的
DaraParallel
,存在负载不均衡的问题。从师兄那里了解到 Accelerate
库,折腾了一阵子,解决了多卡并行负载均衡和混合精度训练的问题。在此将配置的详情和踩过的坑作以记录。Accelerate
是一个 PyTorch 的分布式训练库,可以实现多卡并行和混合精度训练。它的优点是简单易用,只需要在原有代码的基础上添加几行代码即可实现多卡并行和混合精度训练。其实现原理是通过 torch.distributed
库实现的,但是 Accelerate
库对 torch.distributed
库进行了封装,使得使用起来更加方便。(本段由 Copilot 生成)一、安装
或者
二、配置
安装完成后,首先需要运行
accelerate config
,通过 CLI 交互完成配置,之后会在 ~/.cache/huggingface/accelerate
目录下生成 default_config.json
文件。配置的详细过程如下:三、使用
官方宣传的是,只要在原有 Pytorch 代码基础上添加四行代码就行了。主要的改动就是定义好
model
等之后交给 accelerator
实例进行打包,在反向传播时使用 accelerator.backward
代替 loss.backward
。不过在实际使用中,难免要遇到一些问题:
- 半精度训练
在半精度训练时,遇到了
Half
和 float
类型不匹配的报错。这就需要把 loss
的计算用 accelerator.autocast
包裹起来,类似于 torch.cuda.amp.autocast
的用法。- 梯度累积
如果要使用梯度累计,需要在初始化
accelerator
时传入需要累积的步数,然后把每个 batch 的计算包裹在 accelerator.accumulate
中。- 训练中输出中间变量
如果需要在训练过程中保存一些图片,一定要指定在主进程中进行,否则会出现非标准的行为。
类似的,更新
tqdm
进度条也需要在主进程中进行:假如只是需要打印一些 log,可以简单的改用
accelerator.print
。- 作者:VariantConst
- 链接:https://blog.variantconst.com/article/accelerate-config
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。