Files
wehub-resource-sync 2aaeece67c
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
Pipelines-Test / Pipelines-Test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00
..

自动并行使用说明

本 README 详细介绍了如何使用自动并行进行大模型的预训练、SFT(监督微调)、LoRA(低秩适应)、DPO(直接偏好优化)以及推理。

目录

当前支持模型

Model Pretrain SFT LoRA DPO
GPT-3 🚧 🚧 🚧
Llama
Qwen 🚧 🚧 🚧
DeepSeek-V3 🚧 🚧 🚧
  • : Supported
  • 🚧: In Progress

注:当前提供的 DeepSeek-v3模型配置脚本为一个规模较小的示例 demo(调小了网络层数),以支持在单机8卡的环境下运行,如果你想运行完整671B 规模的 DeepSeek-v3,需要将层数配置为61层,并对应地调整并行策略。当前自动并行提供的 deepseek-v3版本中,暂未集成 FP8、DeepEP 等优化策略。

环境准备

1.安装 PaddlePaddle 最新版本

首先,您需要安装最新的Paddle 推荐使用Nightly版本。访问 Paddle 官网 获取安装指导。

2.Paddle 安装验证

import paddle
print(paddle.utils.run_check())

3.安装 PaddleNLP 及自定义算子

请访问PaddleNLP 安装教程获取安装指导。

预训练

数据准备

项目提供了预先处理好的数据方便用户测试模型,下载到 data 目录下:

mkdir -p data && cd data
wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.{bin,idx}

启动预训练

GPU 启动预训练

  • 动态图模式
# Llama pretrain example
# assume that cur dir is auto_parallel
# cd ${PaddleNLP_Path}/llm/auto_parallel/
python -u  -m paddle.distributed.launch \
    --gpus "0,1,2,3,4,5,6,7"            \
    --log_dir "llama_auto_3d"           \
    ./llama/run_pretrain_auto.py ./llama/pretrain_argument.json

该配置下运行facebook/llama-7b预训练任务,并行策略为 MP2-PP2-DP2,分片策略为 Stage1。 更多可配置参数,请参考ModelArguments, DataArguments, PreTrainingArguments

  • 动转静模式
    追加 to_static参数

XPU 启动预训练

除了 GPU,XPU 也支持自动并行,目前支持 llama 模型 7b 和 13b,更多模型支持正在开发中。

用户可以使用 PaddleNLP/llm/auto_parallel/llama 目录下的 run_llama2_7b_xpu.shrun_llama2_13b_xpu.sh 脚本启动 XPU 上的预训练任务。

# cd ${PaddleNLP_Path}/llm/auto_parallel/llama
bash run_llama2_7b_xpu.sh
# or
bash run_llama2_13b_xpu.sh

Llama 7b 并行策略为 DP8,分片策略为 Stage1。Llama 13b 并行策略为 DP2-PP4,分片策略为 Stage1。

监督微调(SFT)

数据准备

项目提供预处理好的精调数据方便用户测试模型,下载并解压到data目录下:

wget -O AdvertiseGen.tar.gz https://bj.bcebos.com/paddlenlp/datasets/examples/AdvertiseGen.tar.gz
tar -xvf AdvertiseGen.tar.gz

启动微调

  • 动态图模式
# Llama finetune example
# assume that cur dir is auto_parallel
# cd ${PaddleNLP_Path}/llm/auto_parallel/
python -u -m paddle.distributed.launch \
  --gpus "0,1,2,3,4,5,6,7" \
  ./run_finetune_auto.py ./llama/finetune_argument.json

该配置下运行Meta-Llama-3.1-8B-Instruct任务,并行策略为 MP2-PP2-DP2,分片策略为 Stage2。 更多可配置参数,请参考GenerateArgument, ModelAutoConfig, ReftArgument, DataConfig, SFTAutoConfig

  • 动转静模式
    追加to_static参数

低秩适应(LoRA

在 SFT 基础上启用,开启lora, lora_rank参数。 更多的参数,可以参考model_config.py

DPO

数据准备

为了方便测试,我们将 ultrafeedback_binarized 的数据集处理成对应的数据集格式,可以在 PaddleNLP/llm 目录下运行:

wget https://bj.bcebos.com/paddlenlp/datasets/examples/ultrafeedback_binarized.tar.gz
tar -zxvf ultrafeedback_binarized.tar.gz

启动 DPO 训练

可以在 PaddleNLP/llm/auto_parallel/llama 目录下运行:

bash llama_dpo_with_api.sh

同样,可以通过配置to_static开关控制是否使用动转静模式。

推理

推理流程包括:动态图推理,动转静导出模型 -> 静态图推理。

动态图推理

当前自动并行任务保存的模型参数已支持用于动态图推理。以动态图自动并行训练(DP2-MP2-PP2)为例:

  • 分布式 ckpt 合并为单卡模型参数
import paddle
import paddle.distributed as dist

ckpt_path='/path/for/dist_ckpt'
# offload=1, 参数 offload 到 CPU,减少显存占用
# prefix="model" 参数可用于过滤掉非模型参数,例如 optimizer 状态等
merged_state_dict = dist.checkpoint.load_state_dict.load_merged_state_dict(ckpt_path, offload=1, prefix="model")
paddle.save(merged_state_dict, 'model_state.pdparams')

# 上述合并的模型参数格式为Paddle原生格式,如需转换为unified checkpoint格式(safetensors),或需获取模型参数的index文件,继续执行如下代码:
python PaddleNLP/llm/auto_parallel/utils/convert_to_safetensors.py --input_path input_path  [--output_path output_path] [--split_num split_num] [--offload] [--as_safetensors]

# 参数介绍
--input_path: 输入的单卡模型参数路径
--output_path: 可选输出模型参数路径默认为'./temp'
--split_num: 可选输出的模型参数分片数默认为 1
--offload: 可选选项用于控制是否将参数 offload  CPU
--as_safetensors: 可选选项用于控制是否将模型参数转换为 safetensors 格式

静态图推理

动转静导出模型、静态图推理步骤请参考 LLaMA 系列大模型运行文档

FAQ

Q1: 出现 OOM 如何调整?

  • 减少 batch_size
  • 开启 fuse_attention_ffn, fuse_flash_qkv