单机多卡-多GPU并行训练

参考李沐深度学习视频

例如一台机器有4张显卡。

在训练和预测时,可以将一个小批量切分到这4个显卡上来达到加速的目的。

切分方案有:数据并行、模型并行、通道并行(数据+模型并行)

数据并行

比如说在训练和预测时,批量大小设置的为128,那么这个批量被切分成4块,每块的大小为32

每个GPU拿到完整的模型参数后,这4块小批量分别给这4个GPU进行梯度的计算

将梯度计算完后,4个GPU计算的梯度进行加和,然后传给key-value store

然后在key-value store中更新模型的梯度。如图

 李沐视频中提到,数据并行会很大的提高模型收敛和性能,为什么?就比如说,在一张单卡GPU上进行训练,我理解的,batch_size=1与batch_size=64是不一样的,当batch_size=1时,每次计算梯度时,因为样本数量很小,所以训练这个w时会更加贴合这个样本,模型收敛的会很快,当然这样也会导致训练很慢。当batch_size=64时,因为样本数量变大了,里面各种各样的数据变多了,也就是增加了数据的多样性,训练时这个w贴合的就是这些样本而不是batch_size=1时的单个样本,训练时,模型的收敛速度变慢,但同时我理解的是模型的泛化能力也增强了。

模型并行

模型并行就是将模型进行切分,这种情况通常适合模型太大,一个GPU放不下,然后切分一下,把一个模型切成块分别放到不同的GPU上(我就是一个学生,我肯定没有用到过这么大的模型)。

就如李沐提到的,一个100层的ResNet,切成4块,每块25层,然后分别放到4个GPU上。

我听完李沐的课理解的是,他的数据是串行的,但整个训练过程在一定程度上可以做到并行。比如,第一块的25层计算完之后,将结果传给第二块,只有第二块有了第一块的结果作为输入,第二块才能进行计算,以此类推,直到第四块,第四块完了后在进行反向传播计算梯度。那为什么训练过程在一定程度上可以做到并行呢,就想视频中弹幕提到的流水线,第一块计算完之后将结果传给第二块,然后第二块进行计算,但这里,第二块进行计算时不代表第一块他就歇了,他可以继续接受数据进行计算,但这里我有一个问题,如果说按流水线,4块卡里都有了数据,那么第四块卡计算完成后进行反向传播更新梯度时,第三块卡还在进行第二批数据的前向传播,此时更新的话,这里有影响吗?会产生什么样的影响?

以上就是我理解的,以及我的疑惑的地方。希望有大佬能够纠正我理解有误的地方,也希望有大佬能够为我解惑。

### 单机环境下运行 LLaMA-Factory 实现并行计算 #### 配置环境变量 在单机环境中,为了指定使用的GPU设备数量以及具体哪些GPU参与运算,需要设置`CUDA_VISIBLE_DEVICES`环境变量。例如,在拥有四张显卡的情况下,如果希望使用前两张显卡,则可以通过如下命令配置: ```bash export CUDA_VISIBLE_DEVICES=0,1 ``` 这一步骤确保后续启动的服务只会看到被选中的这两块GPU[^3]。 #### 修改 WebUI 启动脚本 对于通过WebUI操作的情况,默认情况下可能仅会利用一块GPU执行任务。要启用GPU的支持,可以在启动参数中加入相应的选项。假设已经处于激活的conda环境中,并位于LLaMA-Factory项目的根目录下,那么可以尝试以下方式启动服务: ```bash python src/webui.py --multi_gpu ``` 这里的`--multi_gpu`标志告知程序应当尽可能地占用可用的GPU资源来进行加速处理。 #### 调整模型加载逻辑 为了让微调过程中能够充分利用GPU的优势,还需要确认所使用的框架版本及其对应的分布式训练接口是否正确配置。通常来说,PyTorch提供了诸如`DataParallel`或更推荐的新一代API `DistributedDataParallel (DDP)`用于简化这一过程。当采用后者时,部分关键代码片段可能会看起来像这样: ```python import torch.distributed as dist from torch.nn.parallel import DistributedDataParallel as DDP def setup(rank, world_size): # 初始化进程组 dist.init_process_group("nccl", rank=rank, world_size=world_size) model = ... # 加载未经封装的基础模型实例 ddp_model = DDP(model) ``` 这段伪代码展示了如何初始化一个分布式的训练环境,并将原始模型对象包裹进`DDP`类之中以便于跨节点间的同步更新权重等操作。 #### 更新依赖项至最新稳定版 考虑到不同库之间的兼容性问题,建议定期检查官方文档获取最新的安装指南,特别是针对特定硬件平台优化过的二进制包。有时升级某些核心组件到较新的版本可以帮助解决潜在性能瓶颈或是获得更好的GPU调度能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值