一 几大库
1.1 HUGGINFACE PEFT库:
实现LORA, prefix-tuning. prompttuning, AdaLoRA, LLaMA-Adapter训练的库
1.2 HUGGINFACE accelerator库:
是一个将pytorch模型迁移到CPU/GPU/Multi-GPUs/TPU/Fp16/bf16模式下训练的一个标准库
集成了FSDP, DeepSpeed 和 Megatron-LM
#!/bin/bash
date=20250320
export CUDA_HOME=/usr/local/cuda/
export NCCL_P2P_DISABLE=1
export OMP_NUM_THREADS=32
export NCCL_DEBUG=INFO
NNODES=$1
NGPU_PER_NODE=$2
NUM_GPUS=`expr $NNODES \* $NGPU_PER_NODE`
sed -i "s#\(num_machines:\).*#\1 ${NNODES}#g" "accelerate.yaml"
sed -i "s#\(num_processes:\).*#\1 ${NUM_GPUS}#g" "accelerate.yaml"
# 多机多卡
accelerate launch --multi_gpu --config_file recipes/accelerate_configs/zero2.yaml \
--main_process_ip ${MASTER_ADDR} \
--main_process_port ${MASTER_PORT} \
--rdzv_backend c10d \
src/open_r1/grpo.py \
--config recipes/DeepSeek-R1-Distill-Qwen-1.5B/grpo/config_demo.yaml \
| tee /open-r1_train_$date.log
recipes/accelerate_configs/zero2.yaml
compute_environment: LOCAL_MACHINE
debug: false
deepspeed_config:
deepspeed_multinode_launcher: standard
offload_optimizer_device: none
offload_param_device: none
zero3_init_flag: false
zero_stage: 2
distributed_type: DEEPSPEED
downcast_bf16: 'no'
machine_rank: 0
main_process_ip: 127.0.0.1 #主机ip
main_process_port: 0 #端口
main_training_function: main
mixed_precision: bf16
num_machines: 2
num_processes: 16
rdzv_backend: c10d
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu: false
1.3 DeepSpeed
Pytorch的分布式并行计算框架(Distributed Data Parallel,简称DDP),它也仅仅是能将数据并行,放到各个GPU的模型上进行训练。
DeepSpeed,它就能实现这个拆散功能,它通过将模型参数拆散分布到各个GPU上,以实现大型模型的计算,弥补了DDP的缺点,非常方便,这也就意味着我们能用更少的GPU训练更大的模型,而且不受限于显存。
1.4 Zero
zero 1 2 3
ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
发表在SC 20,DeepSpeed项目最初就是论文中ZeRO方法的官方实现。
ZeRO-Offload: Democratizing Billion-Scale Model Training发表在ATC 21
ZeRO-Infinity: Breaking the GPU Memory Wall for Extreme Scale Deep Learning 发表在SC 21,同样是进行offload,ZeRO-Offload更侧重单卡场景,而ZeRO-Infinity则是典型的工业界风格,奔着极大规模训练去了。
参考资料:https://zhuanlan.zhihu.com/p/428117575
deepspeed就是主要使用了这种方式
2.1 NVIDIA Megatron
优化的分布式框架NVIDIA Megatron和优化的分布式集群架构NVIDIA DGX SuperPOD
NVIDIA Megatron 是一个基于 PyTorch 的框架,用于训练基于 Transformer 架构的巨型语言模型
资料链接:
NVIDIA Megatron:超大Transformer语言模型的分布式训练框架 (一)
NVIDIA Megatron:超大Transformer语言模型的分布式训练框架 (二)
Megatron repro: https://github.com/nvidia/megatron-lm
GPT3-175B training scripts: https://link.zhihu.com/?target=https%3A//github.com/NVIDIA/Megatron-LM/blob/main/examples/pretrain_gpt3_175B.sh
2.2 DeepSpeed
Pytorch的分布式并行计算框架(Distributed Data Parallel,简称DDP),它也仅仅是能将数据并行,放到各个GPU的模型上进行训练。
DeepSpeed,它就能实现这个拆散功能,它通过将模型参数拆散分布到各个GPU上,以实现大型模型的计算,弥补了DDP的缺点,非常方便,这也就意味着我们能用更少的GPU训练更大的模型,而且不受限于显存。
介绍:大规模深度学习框架 DeepSpeed 使用指南
DeepSpeed 是一个深度学习优化库,它使分布式训练变得容易、高效和有效。
DeepSpeed为所有人提供了极端规模的模型训练,从在大型超级计算机上进行训练到在低端群集甚至在单个GPU上进行训练的人员:
极端规模:将当前的GPU群集与数百种设备结合使用,实现3D并行 DeepSpeed 可以有效地训练具有数万亿参数的深度学习模型。
极高的内存效率:DeepSpeed 的ZeRO-Offload 仅需一个 GPU,即可训练超过10B参数的模型,比现有技术大10倍,使数十亿参数的模型训练民主化,从而使许多深度学习科学家可以探索更大更好的模型。
pip install deepspeed
Github 链接 https://github.com/microsoft/DeepSpeed
2.3 Elephas
Elephas 是 Keras 的扩展,它可以使用 Spark 大规模运行分布式深度学习模型。 Elephas 保持了 Keras 的简单性和高可用性,从而允许对分布式模型进行快速原型制作,该模型可以在海量数据集上运行。 Elephas 当前支持许多应用程序,包括:深度学习模型的数据并行训练分布式超参数优化集成模型的分布式训练。
安装 pip install elephas
Github 链接https://github.com/maxpumperla/elephas
2.4 FairScale
FairScale 是 PyTorch 扩展库,用于在一台或多台机器/节点上进行高性能和大规模培训。该库扩展了基本的PyTorch功能,同时添加了新的实验功能。
FairScale支持:并行、分片训练、大规模优化、GPU内存优化、GPU速度优化
安装pip install fairscale
Github 链接https://github.com/facebookresearch/fairscale
2.5 TensorFlowOnSpark
通过将TensorFlow深度学习框架中的突出功能与Apache Spark和Apache Hadoop相结合,TensorFlowOnSpark可以在GPU和CPU服务器集群上实现分布式深度学习。
它支持在Spark集群上进行分布式TensorFlow训练和推理,其目标是最大程度地减少在共享网格上运行现有TensorFlow程序所需的代码更改量。
TensorFlowOnSpark由Yahoo开发,用于在Yahoo私有云中的Hadoop集群上进行大规模分布式深度学习。
安装【 for tensorflow>=2.0.0】 pip install tensorflowonspark
【 for tensorflow<2.0.0】 pip install tensorflowonspark==1.4.4
Github 链接 https://github.com/yahoo/TensorFlowOnSpark
2.6 Horovod
Horovod 是一个针对TensorFlow,Keras,PyTorch和Apache MXNet的分布式深度学习训练框架。
参考资料:分布式训练框架Horovod(一):基本概念和核心卖点
深度学习分布式训练框架 horovod – 弹性训练总体架构
2.7 veGiantModel
火山引擎:基于 Megatron和DeepSpeed
github:https://github.com/volcengine/veGiantModel