LLama Factory与Xtuner分布式微调大模型

大模型分布式训练的基本概念
1.1 为什么需要分布式训练?
1.2 分布式训练的核心技术
数据并行(Data Parallelism)
原理:将数据划分为多个批次,分发到不同设备,每个设备拥有完整的模型副本。
同步方式:通过All-Reduce操作同步梯度(如PyTorch的Distributed DataParallel)。
挑战:通信开销大,显存占用高(需存储完整模型参数和优化器状态)。
模型并行(Model Parallelism)
原理:将模型切分到不同设备(如按层或张量分片)。
类型:
横向并行(层拆分):将模型的层分配到不同设备。
纵向并行(张量拆分):如Megatron-LM将矩阵乘法分片。
挑战:设备间通信频繁,负载均衡需精细设计。
流水线并行(Pipeline Parallelism)
原理:将模型按层划分为多个阶段(stage),数据分块后按流水线执行。
优化:微批次(Micro-batching)减少流水线气泡(Bubble)。
挑战:需平衡阶段划分,避免资源闲置。
混合并行(3D 并行)
组合策略:结合数据并行、模型并行、流水线并行,典型应用如训练千亿级模型。
案例:微软Turing-NLG、Meta的LLaMA-2。
DeepSpeed框架介绍
2.1 DeepSpeed概述
2.2 核心技术
显存优化技术
梯度检查点(Activation Check pointing):用时间换空间,减少激活值显存占用。
CPU Offloading:将优化器状态和梯度卸载到CPU内存。
混合精度训练:FP16/BP16与动态损失缩放(Loss Scaling)。
其他特性
大规模推理支持:模型并行推理(如ZeRO-Inference)。
自适应通信优化:自动选择最佳通信策略(如All-Reduce vs. All-Gather)。
2.3 优势与特点
显存效率高:ZeRO-3可将显存占用降低至1/设备数。
易用性强:通过少量代码修改即可应用(如DeepSpeed配置JSON文件)。
扩展性优秀:支持千卡级集群训练。
开源社区支持:持续更新,与Hugging Face等生态深度集成。
2.4 使用场景
训练百亿/千亿参数模型(如GPT-3、Turing-NLG)。
资源受限环境:单机多卡训练时通过Offloading扩展模型规模。
快速实验:通过ZeRO-2加速中等规模模型训练。
需掌握:
xtuner微调大模型教程
1.构建虚拟环境
conda create --name xtuner-env python=3 .10 -y
conda activate xtuner-env
拉取XTuner,过程大约需要几分钟
git clone https://github.com/InternLM/xtuner.git
然后安装依赖的软件,这步需要的时间比较长。
cd xtuner
pip install -e '.[all]'
等以上所有步骤完成后,再进行下面的操作。
2.下载模型
from modelscope import snapshot_download
model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm2-chat-
1_8b ',cache_dir='/root/llm/internlm2-1 .8b-chat ')
3.微调
创建微调训练相关的配置文件在左侧的文件列表,xtuner 的文件夹里,打开 xtuner/xtuner/configs/internlm/internlm2_chat_1_8b/internlm2_chat_1_8b_qlora_alpaca_e3.py,复制一份至根目录。
打开这个文件,然后修改预训练模型地址,数据文件地址等。
PART 1 中
#预训练模型存放的位置
pretrained_model_name_or_path = '/root/llm/internlm2-1.8b-chat' #基座模型路径
#微调数据存放的位置
data_files = '/root/public/data/target_data.json'
# 训练中最大的文本长度
max_length = 512
# 每一批训练样本的大小
batch_size = 2
#最大训练轮数
max_epochs = 3
#验证数据
evaluation_inputs = [
'只剩一个心脏了还能活吗?', '爸爸再婚,我是不是就有了个新娘?',
'樟脑丸是我吃过最难吃的硬糖有奇怪的味道怎么还有人买','马上要上游泳课了,昨天洗的泳裤还没干,怎么办',
'我只出生了一次,为什么每年都要庆生'
]
PART 3 中
dataset=dict(type=load_dataset, path="json",data_files=data_files)
dataset_map_fn=None
4.微调训练
在当前目录下,输入以下命令启动微调脚本
#单卡微调
xtuner train internlm2_chat_1_8b_qlora_alpaca_e3.py
#多卡微调
NPROC_PER_NODE=2 xtuner train /home/cw/utils/xtuner -
main/qwen1_5_1_8b_chat_qlora_alpaca_e3.py --deepspeed deepspeed_zero2
#多卡指定显卡微调
CUDA_VISIBLE_DEVICES=0 ,2 NPROC_PER_NODE=2 xtuner train /home/cw/utils/xtuner
main/qwen1_5_1_8b_chat_qlora_alpaca_e3.py --deepspeed deepspeed_zero2
5.模型转换
模型训练后会自动保存成PTH 模型(例如iter_2000 .pth,如果使用了DeepSpeed,则将会是一个文件夹),我们需要利用xtuner convert pth_to_hf 将其转换为HuggingFace 模型,以便于后续使用。具体命令为:
xtuner convert pth_to_hf ${FINETUNE_CFG} ${PTH_PATH} ${SAVE_PATH}
# 例如:xtuner convert pth_to_hf internlm2_chat_7b_qlora_custom_sft_e1_copy.py
./iter_2000.pth ./iter_2000_
6.模型合并
如果使用了LoRA / QLoRA 微调,则模型转换后将得到adapter 参数,而并不包含原LLM 参数。如果您期望获得合并后的模型权重(例如用于后续评测),那么可以利用xtuner convert merge:
$ xtuner convert merge ${LLM} ${LLM_ADAPTER} ${SAVE_PATH}
附:xtuner中文文档https://xtuner.readthedocs.io/zh-cn/latest/index.html
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)