ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PaddleNLP 在海光 DCU 上运行 Llama2-13B:环境搭建、微调、预训练与高性能推理实战指南

2026/9/25 5:41:18 拓冰建站 浏览量
PaddleNLP 在海光 DCU 上运行 Llama2-13B:环境搭建、微调、预训练与高性能推理实战指南 人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文档完整讲解如何使用 PaddleNLP 在海光 DCUK100_AI平台上从零搭建运行环境并通过「LoRA 微调 / SFT 全参微调 → 8 卡 PP8 预训练 → 高性能推理」的完整流程运行 Llama2-13B 大模型。读完本文你将掌握 DCU 专属 Docker 环境配置、飞桨 DCU 版安装、llm 运行目录下的配置文件组织方式以及动态/静态图下开启 BlockAttention 与 cachekv_int8 的推理参数用法可直接在 8 卡 DCU 机器上复现整套训练与推理方案。背景与 DCU 平台能力Paddle 框架与 PaddleNLP 套件在海光 DCU 产品上进行了深度适配和优化实现了大模型在训练和推理上与 GPU 的高度统一。按照官方说明在精度和性能上拥有先进水平并为 DCU 产品上的训推组合提供以下核心能力完全支持 4D 混合并行分布式训练可灵活适配张量并行TP、流水线并行PP、Sharding 数据并行、序列并行等多种训练策略本文的预训练示例即以「TP 1 PP 8」的组合展开。各类高性能融合算子针对 Transformer 训推链路提供融合实现用于提升训练与推理性能。优化的通讯库通过底层通信优化掩盖分布式训练与推理的延迟。其中DCU 预训练示例中所用的use_fused_rms_norm、use_fused_rope、use_flash_attention等融合开关以及高性能推理所用的自定义算子均可从 llm/devices/dcu/llama/pretrain_pp8.json 与 llm/predict/predictor.py 等源码中得到印证。环境准备硬件平台要求本示例针对下表所示的海光 DCU 硬件平台设计示例环境为8 卡 DCU 机器并通过「微调训练 推理」的完整流程演示运行方法芯片类型DTK 版本K100_AI24.04.1进入运行环境后可以使用hy-smi命令查看 DCU 状态输出示例如下含温度、功耗、显存占用率、利用率等关键指标$ hy-smi System Management Interface DCU Temp AvgPwr Perf PwrCap VRAM% DCU% Mode 0 49.0C 118.0W auto 800.0W 0% 0% Normal 1 48.0C 120.0W auto 800.0W 0% 0% Normal 2 53.0C 116.0W auto 800.0W 0% 0% Normal 3 49.0C 138.0W auto 800.0W 0% 0% Normal End of SMI Log hy-smi类似 GPU 平台上的nvidia-smi可用来确认 DCU 卡是否被正确识别、显存与算力状态是否正常是后续分布式训练前必备的排查手段。Docker 环境搭建官方推荐使用 Docker 方式运行。关于本项目所需的新版本 DTK 等可以从「光合」开发者社区下载安装Docker 镜像中默认使用 dtk-24.04.1。(1) 拉取镜像# 注意此镜像仅为开发环境镜像中不包含预编译的飞桨安装包 docker pull registry.baidubce.com/device/paddle-dcu:dtk24.04.1-kylinv10-gcc82(2) 启动容器参考以下命令启动容器其中挂载了/opt/hyhal海光加速库运行时并把当前目录挂载到容器内/workspacedocker run -it \ --networkhost \ --namepaddle_llama \ --privileged \ --device/dev/kfd \ --device/dev/dri \ --ipchost \ --shm-size128G \ --group-add video \ --cap-addSYS_PTRACE \ --security-opt seccompunconfined \ -u root \ --ulimit stack-1:-1 \ --ulimit memlock-1:-1 \ -v $(pwd):/workspace \ -v /opt/hyhal:/opt/hyhal \ registry.baidubce.com/device/paddle-dcu:dtk24.04.1-kylinv10-gcc82 \ /bin/bash几个关键参数说明--device/dev/kfd、--device/dev/dri将 DCU 计算设备暴露给容器是容器内使用 DCU 的必要条件--networkhost、--ipchost共享宿主机网络与进程间通信命名空间便于分布式训练的多进程通信与数据加载--shm-size128G放大共享内存避免大 batch 数据加载时共享内存不足--ulimit memlock-1:-1解除内存锁限制配合--ulimit stack-1:-1规避训练栈空间不足-v /opt/hyhal:/opt/hyhal挂载海光 HAL 驱动栈确保 DCU 运行时环境可用。(3) 安装飞桨 DCU 版# paddlepaddle『飞桨』深度学习框架提供运算基础能力 python -m pip install paddlepaddle-dcu3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/dcu/(4) 克隆 PaddleNLP 并安装依赖# 使用 paddlenlp develop 分支 git clone https://github.com/PaddlePaddle/PaddleNLP.git cd PaddleNLP/llm # 到达运行目录 pip install -r ../requirements.txt(5) 安装 paddlenlp_ops 专用算子# PaddleNLP 仓库内置了 rms 相关的专用算子 cd slm/model_zoo/gpt-3/external_ops python setup.py install从当前仓库看该目录结构在 slm/model_zoo/gpt-3 下内置与 RMSNorm 等相关的专用算子源码安装后即可在训练脚本中通过use_fused_rms_norm等开关启用。微调LoRA 与 SFT注以下微调操作均在llm目录下执行。数据集准备PaddleNLP 提供了调试用的示例数据集可以直接下载并解压wget https://bj.bcebos.com/paddlenlp/datasets/examples/alpaca_demo.gz tar -xvf alpaca_demo.gzPaddleNLP 支持的精调数据格式是每行包含一个字典的 JSON 文件每个字典包含以下字段srcstr, List(str)指模型的输入指令instruction、提示prompt即模型应该执行的任务tgtstr, List(str)指模型的输出。样例数据如下{src: 类型#裙*颜色#蓝色*风格#清新*图案#蝴蝶结, tgt: 裙身处采用立体蝴蝶结装饰辅以蓝色条带点缀令衣身造型饱满富有层次的同时为其注入一丝甜美气息。将女孩清新娇俏的一面衬托而出。} ... # 您可以根据此格式自行制作精调数据。解压后的数据目录如./data即作为后续run_finetune.py中dataset_name_or_path参数的取值。LoRA 微调在 llm/devices/dcu/llama/lora_argument.json 配置文件中已给出完整的 LoRA 微调超参可参考以下命令启动训练PYTHONPATH.. python run_finetune.py dcu/llama/lora_argument.json该配置的核心参数如下供调整训练策略时参考配置项取值含义说明model_name_or_pathmeta-llama/Llama-2-13b预训练模型权重来源dataset_name_or_path./data上文解压的精调数据集路径output_dir./checkpoints/llama_lora_ckpts模型与日志输出目录per_device_train_batch_size1单卡训练 batch sizegradient_accumulation_steps32梯度累积步数等效扩大 batchlearning_rate3e-04LoRA 通常采用较高的学习率num_train_epochs1训练轮数src_length/max_length1024 / 2048输入最大长度 / 输出最大长度fp16/fp16_opt_leveltrue / O2混合精度训练O2 级别tensor_parallel_degree/pipeline_parallel_degree1 / 1微调阶段默认不做张量/流水线并行loratrue开启 LoRAPEFT训练use_flash_attentionfalse微调示例默认关闭 FlashAttentionSFT 全参微调SFT 微调使用 llm/devices/dcu/llama/sft_argument.json 配置文件命令如下PYTHONPATH.. python run_finetune.py dcu/llama/sft_argument.json与 LoRA 配置相比SFT 配置的主要差异在于lora字段不再开启配置中缺省即全参数微调learning_rate降低为3e-05全参微调通常使用更小的学习率增加了intokens: false字段即未使用 InTokens 数据流式拼接策略其余如fp16/fp16_opt_level、src_length/max_length、zero_padding: false、use_flash_attention: false等与 LoRA 配置保持一致。两个 JSON 配置文件均位于仓库 llm/devices/dcu/llama 目录下与本文文档同级可以直接复用如需修改超参直接编辑 JSON 即可。预训练TP1 PP8预训练数据准备数据详细制作流程可参考 llm/tools/preprocess/README.md例如 OpenWebText2 预训练数据制作流程。为了方便用户测试本项目提供了处理好的100k 条 doc 训练样本cd PaddleNLP/llm/ mkdir data cd data wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.bin wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.idx cd .. tree data data ├── llama_openwebtext_100k.bin └── llama_openwebtext_100k.idx注预训练数据目录请与微调数据集区分路径避免混用。运行预训练脚本该训练脚本支持单节点或多节点运行每节点使用8 张 DCU-K100AI-64G。并行配置采用TP 1、PP 8使用fp16 精度预训练。参考启动命令如下python -m paddle.distributed.launch \ --gpus 0,1,2,3,4,5,6,7 \ run_pretrain.py dcu/llama/pretrain_pp8.json其中 llm/devices/dcu/llama/pretrain_pp8.json 为预训练配置关键参数如下配置项取值含义说明model_name_or_path/tokenizer_name_or_pathmeta-llama/Llama-2-13b模型与分词器来源input_dir./data预训练 .bin/.idx 数据目录tensor_parallel_degree1张量并行度pipeline_parallel_degree8流水线并行度8 卡各负责一个 PP stagepipeline_parallel_configdisable_partial_send_recv流水线通信优化选项sharding_parallel_degree-1关闭 Sharding由 PP 承担并行切分shardingstage1保留 stage1 配置字段virtual_pp_degree1虚拟流水线深度max_seq_length4096训练序列长度learning_rate/min_learning_rate1e-04 / 1e-05学习率与最小学习率warmup_steps2000预热步数max_steps200000总训练步数use_flash_attentiontrue开启 FlashAttentionuse_fused_rms_norm/use_fused_ropetrue / true启用融合 RMSNorm 与融合 RoPE 算子fp16/fp16_opt_leveltrue / O2混合精度预训练weight_decay/max_grad_norm0.1 / 1.0权重衰减与梯度裁剪amp_master_grad1AMP 主梯度recompute/recompute_granularityfalse / full本示例关闭重计算save_total_limit10最多保留的 checkpoint 数可见该示例通过pipeline_parallel_degree: 8与 8 张 DCU 一一对应同时开启融合算子与 FlashAttention 来发挥 DCU 的训练性能这些配置项在 llm/run_pretrain.py 中解析并生效。高性能推理推理特性概述高性能推理内置动态插入dynamic insert和全环节算子融合策略隐藏了底层实现细节实现了开箱即用的高性能并行推理能力。在保持高性能推理和动态插入的基础上还可以动态地为 CacheKV 分配存储空间极大节省显存从而在同一时刻处理更多的 query提升整体吞吐。环境准备安装自定义算子PaddleNLP 针对 Transformer 系列编写了高性能自定义算子用于提升模型在推理和解码过程中的性能。使用之前需要预先安装自定义算子库DCU 设备使用以下命令基于 HIP 编译# DCU 设备安装自定义算子 cd PaddleNLP/csrc python3 setup_hip.py install从仓库结构看csrc 目录下包含 GPU/HIP 自定义算子源码如write_cache_kv.cu、rebuild_padding.cu、set_value_by_flags.cu等csrc/setup_hip.py 即 DCUHIP 生态场景的算子编译入口。推理命令说明下面分别给出关闭 BlockAttention与打开 BlockAttention两种高性能推理方案且各自涵盖动态图与静态图两种模式。关于参数取值--block_attn表示开启 BlockAttention块式缓存注意力需配合--inference_model--cachekv_int8在文档命令中用于开启 CacheKV 的 int8 量化以节省显存。从 llm/predict/predictor.py 的参数定义看block_attn默认为Falsecachekv_int8_type支持dynamic动态 int8 量化与static静态 int8 量化两种取值block_size默认 64。开启block_attn时预测器会自动强制inference_model True。若需精度相关配置可参考 llm/config/llama/ptq_argument.json输出目录即checkpoints/llama_ptq_ckpts与下方 a8w8 命令中的路径对应。a. 关闭 BlockAttention 的高性能推理动态图fp16 与 a8w8 量化权重# fp16 python3 ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-13b-chat --inference_model --dtype float16 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark # a8w8 python3 ./predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --dtype float16 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark静态图先导出再推理# step1: 静态图导出 # fp16 python3 ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-13b-chat --inference_model --output_path ./inference --dtype float16 # a8w8 python3 ./predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --output_path ./inference --dtype float16 # step2: 静态图推理 python3 ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype float16 --mode static 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark说明--model_name_or_path meta-llama/Llama-2-13b-chat表示直接加载 HuggingFace 格式的原始权重做推理--model_name_or_path checkpoints/llama_ptq_ckpts表示加载经过 PTQPost-Training Quantization后训练量化产出的 a8w8 量化模型量化配置可参考 llm/config/llama/ptq_argument.jsondo_ptq/smooth等字段--inference_model启用推理模型模式动态插入与算子融合--dtype float16指定推理精度测性能时追加--batch_size 1 --src_length 3072 --max_length 1024 --benchmark其中--benchmark会强制解码到max_length便于计算吞吐该行为定义见 llm/predict/predictor.py静态图路径需先用 llm/predict/export_model.py 导出再通过--mode static加载./inference目录进行推理。b. 打开 BlockAttention 的高性能推理动态图# fp16 python3 ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-13b-chat --inference_model --dtype float16 --block_attn 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark # a8w8 python3 ./predict/predictor.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --dtype float16 --block_attn 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark # cachekv python3 ./predict/predictor.py --model_name_or_path meta-llama/Llama-2-13b-chat --inference_model --dtype float16 --block_attn --cachekv_int8 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark静态图# step1: 静态图导出 # fp16 python3 ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-13b-chat --inference_model --output_path ./inference --dtype float16 --block_attn # a8w8 python3 ./predict/export_model.py --model_name_or_path checkpoints/llama_ptq_ckpts --inference_model --output_path ./inference --dtype float16 --block_attn # cachekv python3 ./predict/export_model.py --model_name_or_path meta-llama/Llama-2-13b-chat --inference_model --output_path ./inference --dtype float16 --block_attn --cachekv_int8 # step2: 静态图推理 # fp16 python3 ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype float16 --mode static --block_attn 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark # a8w8 python3 ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype float16 --mode static --block_attn 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark # cachekv python3 ./predict/predictor.py --model_name_or_path ./inference --inference_model --dtype float16 --mode static --cachekv_int8 --block_attn 测性能可选--batch_size 1 --src_length 3072 --max_length 1024 --benchmark使用要点BlockAttention 将 KV Cache 按固定block_size默认 64分块管理配合动态插入可为 CacheKV 动态分配存储空间按需扩容而非一次性预留最大长度空间从而显著降低显存占用、支持更大并发 query 数静态图模式导出与推理两侧都必须带上--block_attn保持配置一致静态图场景下如需在 XPU 等其他设备上导出预测器中也有对应提示要求导出与推理均带--block_attnDCU 场景同理建议保持两侧参数一致。应用场景算法类别自然语言处理NLP。热点应用行业医疗、教育、科研、金融。这些场景的共性是需要本地/私有化部署 LLM通过 LoRA 或 SFT 微调注入领域知识再以高性能推理对外提供生成服务本指南的完整流程8 卡 DCU 微调 → 预训练 → 高性能推理即为这类落地需求提供了可直接复现的工程路径。源码与问题反馈本文档配套的全部配置文件位于 llm/devices/dcu/llamalora_argument.json、sft_argument.json、pretrain_pp8.json推理入口为 llm/predict/predictor.py 与 llm/predict/export_model.py自定义算子编译入口为 csrc/setup_hip.py预训练数据制作说明见 llm/tools/preprocess/README.md若在使用过程中遇到问题可在 PaddleNLP 仓库提交 Issue 反馈。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐使用 PaddleNLP 在海光 DCU 上运行 llama2-13b从环境搭建、微调到高性能推理的完整实战指南使用 PaddleNLP 在海光 DCU 上运行 llama2 13b从环境搭建、微调到高性能推理的完整实战指南 本文以 PaddleNLP 官方在 llm/人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP基于 PaddleNLP 在 Hygon DCU 上训练与推理 Llama-2-13B环境搭建、LoRA/SFT 微调、预训练与高性能推理实战指南基于 PaddleNLP 在 Hygon DCU 上训练与推理 Llama 2 13B环境搭建、LoRA/SFT 微调、预训练与高性能推理实战指南 导读 本文人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP使用 PaddleNLP 在海光 DCUK100_AI上运行 Llama 系列模型环境搭建与高性能推理实战指南使用 PaddleNLP 在海光 DCUK100_AI上运行 Llama 系列模型环境搭建与高性能推理实战指南 PaddleNLP 在海光 DCU K10人工智能大模型预训练微调LoRARLHF强化学习分布式训练模型推理服务推理引擎模型量化模型压缩本地部署NLP上一篇CocoaLumberjack多平台支持iOS、macOS、tvOS、watchOS全攻略下一篇3步构建你的AI金融分析师TradingAgents-CN完全实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考