
人工智能大模型分布式训练预训练微调模型推理服务强化学习Ascend【免费下载链接】MindSpeed-LLM昇腾LLM分布式训练框架项目地址https://gitcode.com/Ascend/MindSpeed-LLM点击查看免费下载本文围绕 examples/mcore/qwen3 目录下 Qwen3 8B 的 McoreMegatron-Core示例脚本链路展开覆盖预训练数据处理、指令数据处理、HF/mcore 双向权重转换、预训练、全参微调、LoRA 微调、推理与评估八个阶段。读完本文你将掌握每类脚本的定位、核心参数含义、脚本命名规律以及从昇腾 NPU 环境准备到跑通完整 Qwen3 训练链路的实操方法并能据此快速改造出适配其他模型规模或集群拓扑的脚本。一、示例脚本任务链路总览Qwen3 Mcore 示例链路按任务阶段组织脚本用户可按阶段直接查找对应脚本。完整链路如下表所示阶段典型脚本说明预训练数据处理data_convert_qwen3_pretrain.sh将预训练语料处理为训练入口可读取的数据格式。指令数据处理data_convert_qwen3_instruction.sh处理指令微调SFT场景的数据。HF 到 mcore 权重转换ckpt_convert_qwen3_hf2mcore.sh将 Hugging Face 权重转换为 mcore 训练、推理或评估可用格式。mcore 到 HF 权重转换ckpt_convert_qwen3_mcore2hf.sh将 mcore 权重转换回 Hugging Face 格式。LoRA 权重转换ckpt_convert_qwen3_mcore2hf_lora.sh将 LoRA 相关权重转换为 Hugging Face 格式。预训练pretrain_qwen3_8b_4K_ptd.shQwen3 8B mcore 预训练示例8 卡 / TP1·PP2。预训练A3 变体pretrain_qwen3_8b_4K_ptd_A3.shQwen3 8B 面向特定硬件或集群配置的预训练示例16 卡 / TP2·PP1。全参微调tune_qwen3_8b_4K_full_ptd.shQwen3 8B 全参微调示例。LoRA 微调tune_qwen3_8b_4K_lora_ptd.shQwen3 8B LoRA 微调示例。推理generate_qwen3_8b_ptd.sh使用训练或转换后的权重进行文本生成。评估evaluate_qwen3_8b_ptd.sh使用评估入口运行 benchmark 任务如 MMLU。脚本入口与仓库源码的对应关系预训练、微调、推理、评估分别由仓库根目录的 pretrain_gpt.py、posttrain_gpt.py、inference.py、evaluation.py 承接权重转换统一走 convert_ckpt_v2.py数据处理走 preprocess_data.py。二、相关文档与前置环境运行任何脚本前建议先按以下文档完成环境准备与概念铺垫MindSpeed-LLM 软件安装安装 MindSpeed-LLM、MindSpeed、Megatron-LM 及其依赖并配置昇腾 CANN 环境。mcore 预训练预训练任务的整体流程与参数说明。mcore 指令微调指令微调任务的流程、数据组织与训练入口说明。模型推理推理入口 inference.py 的使用方式。模型评估评估入口 evaluation.py 与各 benchmark 数据集的用法。预训练数据处理preprocess_data.py的通用用法。权重转换说明可参考文档导航中的工具链部分如 checkpoint_convert_hf_mcore_large_params.md。需要特别说明的是训练与微调脚本本身支持--enable-hf2mg-convert --model-type-hf qwen3参数可直接加载 Hugging Face 格式权重并在启动时自动完成 HF → mcore 转换独立的权重转换脚本则用于需要显式预转换例如按目标 TP/PP 切分保存或需要转回 HF 格式发布/部署的场景。两套路径可互为替代与补充。三、脚本命名规范速查Qwen3 示例脚本通常按任务类型、模型规模和上下文长度命名理解命名规律后可快速定位所需脚本pretrain_qwen3_*预训练或续训脚本。tune_qwen3_*_full_*全参微调脚本。tune_qwen3_*_lora_*LoRA 微调脚本。generate_qwen3_*推理脚本。evaluate_qwen3_*评估脚本。ckpt_convert_qwen3_*权重转换脚本。data_convert_qwen3_*数据处理脚本。文件名中的0point6b、1point7b、4b、8b、14b、32b表示模型规模4K、32K、256K表示常见序列长度配置A3表示面向特定硬件或集群配置场景的示例脚本。以当前 8B 目录为例pretrain_qwen3_8b_4K_ptd.sh表示 Qwen3 8B、4K 序列长度的预训练脚本ptd指采用 PyTorch 分布式torchrun启动方式带A3后缀的变体从脚本内容看使用 16 卡、TP2、PP1 的配置而标准版使用 8 卡、TP1、PP2。具体含义以脚本内容和相关文档为准。四、阶段一数据准备4.1 预训练数据处理data_convert_qwen3_pretrain.sh 将原始预训练语料示例输入为 parquet 格式切词并落盘为训练入口可读取的索引化数据# 修改 ascend-toolkit 路径 source /usr/local/Ascend/ascend-toolkit/set_env.sh mkdir ./dataset python ./preprocess_data.py \ --input ./dataset/train-00000-of-00042-d964455e17e96d5a.parquet \ --tokenizer-name-or-path ./model_from_hf/qwen3_hf/ \ --tokenizer-type PretrainedFromHF \ --handler-name GeneralPretrainHandler \ --output-prefix ./dataset/enwiki \ --json-keys text \ --workers 4 \ --log-interval 1000关键参数说明--handler-name GeneralPretrainHandler指定预训练数据处理逻辑与训练脚本中的--handler-name GeneralPretrainHandler保持一致保证数据格式可被训练入口直接读取。--tokenizer-type PretrainedFromHF与--tokenizer-name-or-path从 Hugging Face 格式的 tokenizer 目录加载分词器。--json-keys text抽取语料 JSON 中的文本字段。--output-prefix ./dataset/enwiki输出文件前缀训练时--data-path即指向此前缀。--workers 4并行处理进程数--log-interval 1000每处理 1000 条样本打印一次进度。4.2 指令微调数据处理data_convert_qwen3_instruction.sh 处理指令微调数据与全参/LoRA 微调脚本中的AlpacaStyleInstructionHandler一一对应# 请按照您的真实环境修改 set_env.sh 路径 source /usr/local/Ascend/ascend-toolkit/set_env.sh mkdir ./finetune_dataset python ./preprocess_data.py \ --input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \ --tokenizer-name-or-path ./model_from_hf/qwen3_hf/ \ --output-prefix ./finetune_dataset/alpaca \ --handler-name AlpacaStyleInstructionHandler \ --tokenizer-type PretrainedFromHF \ --workers 4 \ --log-interval 1000 \ --enable-thinking true \ --prompt-type qwen3与预训练数据处理相比指令数据链路额外引入了两个 Qwen3 专属参数--enable-thinking true保留并正确处理 Qwen3 的思考thinking过程字段与微调脚本--enable-thinking true配套使用。--prompt-type qwen3采用 Qwen3 的对话模板拼接 prompt 与 response微调脚本中的--prompt-type qwen3与此保持一致。更通用的数据格式如 ShareGPT 风格可参考 data_process_sft_sharegpt_style.md 与 data_process_sft_alpaca_style.md。五、阶段二权重格式转换权重转换统一使用仓库根目录的 convert_ckpt_v2.py。从该入口源码convert_ckpt_v2.py可见转换方向由--load-model-type/--save-model-type组合决定hf→mg走Hf2MgConvertmg→hf走Mg2HfConvert--model-type-hf支持qwen3、qwen3-moe、deepseek3、llama2、glm5等十余种模型类型默认即为qwen3。5.1 HF 权重转 mcoreckpt_convert_qwen3_hf2mcore.sh 将 Hugging Face 权重转换为 mcore 训练、推理或评估可用格式并可指定目标并行切分# 修改 ascend-toolkit 路径 export CUDA_DEVICE_MAX_CONNECTIONS1 source /usr/local/Ascend/ascend-toolkit/set_env.sh python convert_ckpt_v2.py \ --load-model-type hf \ --save-model-type mg \ --target-tensor-parallel-size 1 \ --target-pipeline-parallel-size 8 \ --load-dir ./model_from_hf/qwen3_hf/ \ --save-dir ./model_weights/qwen3_mcore/ \ --model-type-hf qwen3--target-tensor-parallel-size/--target-pipeline-parallel-size指定转换后权重按多大的 TP、PP 切分保存对应训练时的--tensor-model-parallel-size/--pipeline-model-parallel-size。示例中 TP1、PP8 的切分需与后续训练脚本的并行配置严格一致。--model-type-hf qwen3声明源模型为 Qwen3 结构转换器据此完成层名与张量布局映射。5.2 mcore 权重转 HFckpt_convert_qwen3_mcore2hf.sh 将训练得到的 mcore 权重转回 Hugging Face 格式用于模型发布或接入 HF 生态工具# 修改 ascend-toolkit 路径 source /usr/local/Ascend/ascend-toolkit/set_env.sh export CUDA_DEVICE_MAX_CONNECTIONS1 python convert_ckpt_v2.py \ --load-model-type mg \ --save-model-type hf \ --load-dir ./model_weights/qwen3_mcore/ \ --save-dir ./hf_weights/qwen3_hf/ \ --hf-cfg-dir ./origin_hf_cfg \ --model-type-hf qwen3--hf-cfg-dir指向原始 Hugging Face 权重目录用于读取config.json等元信息保证转换出的 HF 模型结构与原模型一致。5.3 LoRA 权重合并转 HFckpt_convert_qwen3_mcore2hf_lora.sh 将 mcore 基座权重与 LoRA 增量权重合并后输出 HF 格式# 修改 ascend-toolkit 路径 source /usr/local/Ascend/ascend-toolkit/set_env.sh export CUDA_DEVICE_MAX_CONNECTIONS1 python convert_ckpt_v2.py \ --load-model-type mg \ --save-model-type hf \ --lora-r 8 \ --lora-alpha 16 \ --lora-target-modules linear_qkv linear_proj linear_fc1 linear_fc2 \ --load-dir ./model_weights/qwen3_mcore/ \ --lora-load ./ckpt/qwen3_lora \ --save-dir ./model_from_hf/qwen3_hf/ \ --hf-cfg-dir ./model_from_hf/qwen3_hf/ \ --model-type-hf qwen3LoRA 参数--lora-r、--lora-alpha、--lora-target-modules须与 LoRA 微调时的配置一致其中--lora-target-modules覆盖linear_qkv、linear_proj、linear_fc1、linear_fc2四个线性层与微调脚本中的目标模块完全对应。六、阶段三预训练6.1 标准 8 卡示例TP1, PP2pretrain_qwen3_8b_4K_ptd.sh 是 Qwen3 8B 在 4K 序列长度下的 mcore 预训练主示例先设定昇腾环境变量与分布式参数export HCCL_CONNECT_TIMEOUT3600 export HCCL_EXEC_TIMEOUT3600 export CUDA_DEVICE_MAX_CONNECTIONS1 export PYTORCH_NPU_ALLOC_CONFexpandable_segments:True export NPU_ASD_ENABLE0 export TASK_QUEUE_ENABLE2 NPUS_PER_NODE8 MASTER_ADDRlocalhost MASTER_PORT6000 NNODES1 NODE_RANK0 WORLD_SIZE$(($NPUS_PER_NODE*$NNODES))其中HCCL_CONNECT_TIMEOUT/HCCL_EXEC_TIMEOUT放宽了 HCCL 建连与执行超时3600 秒PYTORCH_NPU_ALLOC_CONFexpandable_segments:True开启可扩展内存段以降低显存碎片。核心训练规模变量为TP1、PP2、CP1、MBS1、GBS64、SEQ_LENGTH4096、TRAIN_ITERS2000。模型结构参数GPT_ARGS 块完整定义了 Qwen3 8B 规格是理解整条链路的关键参数取值含义--use-mcore-models-启用 Megatron-Core 模型实现--spec mindspeed_llm.tasks.models.spec.qwen3_spec layer_spec-指定 Qwen3 专属 Transformer Layer 规格--num-layers/--hidden-size/--ffn-hidden-size36 / 4096 / 12288层数、隐藏维度、FFN 维度--num-attention-heads/--num-query-groups32 / 8注意力头数与 GQA 查询组数--group-query-attention开启--qk-layernorm-对 Q/K 施加 LayerNormQwen3 结构特征--padded-vocab-size151936对齐后的词表大小配合--make-vocab-size-divisible-by 1--rotary-base1000000RoPE 旋转基数Qwen3 长序列特性--untie-embeddings-and-output-weights/--disable-bias-linear-解耦 embedding 与输出权重、全线性层去 bias--position-embedding-type rope/--normalization RMSNorm/--norm-epsilon 1e-6-RoPE 位置编码、RMSNorm 归一化--swiglu-FFN 采用 SwiGLU 激活--ckpt-format torch-检查点保存为 PyTorch 原生格式优化与性能参数OPTIMIZE_ARGS / TRAIN_ARGS方面--use-flash-attn、--use-fused-rotary-pos-emb、--use-fused-swiglu、--use-fused-rmsnorm启用融合算子--use-distributed-optimizer --reuse-fp32-param --overlap-grad-reduce --overlap-param-gather --use-ascend-coc组合了分布式优化器、FP32 参数复用、梯度归约/参数聚合通信重叠与昇腾 COC计算通信并发优化训练超参为lr 1.25e-6、min-lr 1.25e-7、cosine 衰减、lr-warmup-fraction 0.01、weight-decay 1e-1、clip-grad 1.0、adam-beta1 0.9、beta2 0.95、initial-loss-scale 4096、seed 42、--bf16。数据与输出参数--handler-name GeneralPretrainHandler、--data-path $DATA_PATH、--split 100,0,0全部用于训练--log-interval 1、--save-interval 2000、--eval-interval 2000、--eval-iters 0、--no-load-optim --no-load-rng断点续训时不加载优化器与随机数状态从零初始化训练时使用。启动命令以torchrun拉起 8 进程执行仓库根目录的 pretrain_gpt.py并通过--load ${CKPT_LOAD_DIR}、--save ${CKPT_SAVE_DIR}、--distributed-backend nccl、--transformer-impl local、--enable-hf2mg-convert、--model-type-hf qwen3完成加载与自动权重转换日志通过tee落盘至logs/train_mcore_qwen3_8b.log。6.2 A3 变体TP2, PP1pretrain_qwen3_8b_4K_ptd_A3.sh 面向特定硬件或集群配置场景与标准版的关键差异如下单节点 16 卡NPUS_PER_NODE16TP2、PP1、GBS128即更侧重张量并行而非流水线并行。将--enable-hf2mg-convert --model-type-hf qwen3抽离为独立的CKPT_ARGS变量组数据参数中不再单独出现--workers整体结构与标准版略有差异但模型结构参数36 层 / 4096 隐藏 / GQA-8 / padded-vocab 151936 等保持一致。在多机场景下将MASTER_ADDR改为实际主节点 IPNNODES改为节点数并按 rank 设置NODE_RANK即可扩展。七、阶段四指令微调7.1 全参微调tune_qwen3_8b_4K_full_ptd.sh 使用 posttrain_gpt.py 作为入口以--finetune --stage sft --is-instruction-dataset --prompt-type qwen3 --no-pad-to-seq-lengths声明 SFT 阶段数据侧--handler-name AlpacaStyleInstructionHandler、--enable-thinking true、--prompt-type qwen3与指令数据处理脚本的参数一一对应--no-pad-to-seq-lengths允许样本不强制 padding 到固定长度。模型侧除与预训练相同的结构参数外额外出现--kv-channels 128GQA 场景下显式指定 KV 通道数与--sequence-parallel序列并行。训练配置MBS1、GBS16--max-position-embeddings 32768在 4K 训练序列长度之上预留更长位置编码空间--exit-on-missing-checkpoint在检查点缺失时直接退出以避免无效训练保存间隔--save-interval 1000。检查点加载同样支持--enable-hf2mg-convert --model-type-hf qwen3可直接从 HF 基座权重开始微调。7.2 LoRA 微调tune_qwen3_8b_4K_lora_ptd.sh 在 SFT 参数基础上叠加 LoRA 配置TUNE_ARGS --finetune \ --stage sft \ --is-instruction-dataset \ --tokenizer-not-use-fast \ --prompt-type qwen3 \ --no-pad-to-seq-lengths \ --lora-r 16 \ --lora-alpha 32 \ --lora-fusion \ --lora-target-modules linear_qkv linear_proj linear_fc1 linear_fc2 --lora-r 16/--lora-alpha 32LoRA 秩与缩放系数实际秩 lora-alpha / lora-r 2这两个值必须与后续 ckpt_convert_qwen3_mcore2hf_lora.sh 中的--lora-r 8 --lora-alpha 16对应配置保持自洽注意示例中转换脚本的秩不同合并前需按实际训练值修改。--lora-fusion将 LoRA 增量融合进基座权重便于推理或后续转换。--lora-target-modules指定注入 LoRA 的线性层覆盖linear_qkv、linear_proj、linear_fc1、linear_fc2。与全参微调的差异还包括MBS4、GBS16、lr 1.25e-5LoRA 场景通常采用更高学习率并出现--no-shared-storage非共享存储场景下的保存语义。LoRA 微调的完整流程含多轮对话、数据组织可进一步参考 lora_finetune.md 与 instruction_finetune.md。八、阶段五推理生成generate_qwen3_8b_ptd.sh 使用 inference.py 加载训练或转换后的权重进行文本生成运行配置TP1、PP2、SEQ_LENGTH4096、--micro-batch-size 1、--max-new-tokens 256单次生成的最大新 token 数。模型参数与训练脚本保持一致36 层 / 4096 隐藏 / GQA-8 /--qk-layernorm/--rotary-base 1000000/ padded-vocab 151936 等并额外开启--use-fused-swiglu --use-fused-rmsnorm --use-fused-rotary-pos-emb融合算子以提升解码性能。--tokenizer-not-use-fast关闭 HF 快速 tokenizer与部分昇腾分词器实现兼容。--load ${CHECKPOINT}指定模型权重目录--exit-on-missing-checkpoint保证权重缺失时快速失败--transformer-impl local与--ckpt-format torch与训练阶段保持一致保证检查点可直接复用。推理入口的通用能力chat 模板、多轮对话等可参考 inference.md 与 chat.md。九、阶段六模型评估evaluate_qwen3_8b_ptd.sh 使用 evaluation.py 运行 benchmark 任务默认任务为 MMLUTASKmmlu通过--task-data-path ${DATA_PATH}指定评估数据集路径--task ${TASK}指定任务名支持替换为其他任务如 CEval、CMMLU、GSM8K 等参见 evaluation_guide.md。运行配置为TP1、PP1、--micro-batch-size 1、--max-new-tokens 2选择题类 benchmark 只需少量生成 token、--no-chat-template评测时不套 chat 模板。模型结构参数与训练/推理脚本保持一致--no-load-rng --no-load-optim --bf16保证评估过程不依赖训练状态。十、模型规格底层解析qwen3_spec训练、微调、推理、评估脚本中统一出现的--spec mindspeed_llm.tasks.models.spec.qwen3_spec layer_spec指向仓库内的 qwen3_spec.py。该模块通过 Megatron-Core 的ModuleSpec机制声明 Qwen3 Transformer Layer 的完整子模块结构输入归一化input_layernorm使用PTNorm昇腾适配的 LayerNorm注意力self_attention采用因果掩码AttnMaskType.causallinear_qkv用列并行线性层、linear_proj用行并行线性层。当--qk-layernorm开启时Q、K 上会附加q_layernorm/k_layernorm同时通过sharded_state_dict_keys_map将input_layernorm、pre_mlp_layernorm映射到 QKV 与 FC1 内嵌的 LayerNorm 张量上确保检查点状态字典的加载/保存与 Qwen3 原生权重布局对齐。该文件同时根据--transformer-impl自动切换实现local模式使用原生DotProductAttentiontransformer_engine模式则切换到 TE 系列算子与各脚本中的--transformer-impl local设定相印证。可以推断脚本中--qk-layernorm、--group-query-attention、--num-query-groups 8、--swiglu等参数正是为了让 mcore 通用 Transformer 框架还原出 Qwen3 的 GQA QK-Norm SwiGLU 结构这也是 Qwen3 系列模型区别于传统 GPT 结构的关键所在。十一、运行与调整前检查清单README 明确要求运行或调整脚本前建议先确认以下内容数据、权重、tokenizer、日志和输出目录已替换为实际路径脚本中CKPT_SAVE_DIR、DATA_PATH、TOKENIZER_PATH、CKPT_LOAD_DIR等占位符必须全部替换。模型规模相关参数与目标权重一致如--num-layers 36、--hidden-size 4096、--padded-vocab-size 151936需与 Qwen3-8B 实际配置相符。TP、PP、CP 等并行参数与硬件数量和权重切分方式匹配若权重已按 TP1、PP8 预转换训练时并行配置必须一致A3 脚本的 TP2、PP1 亦须与 16 卡拓扑对应。数据处理、权重转换、训练、推理和评估阶段使用的路径前后一致--output-prefix→--data-path、--save-dir→--load等链路不能断点。多机训练时主节点地址、端口、节点数和节点序号配置正确MASTER_ADDR、MASTER_PORT、NNODES、NODE_RANK。十二、常见问题与排查建议结合脚本内容与源码以下排查点具有实操价值检查点缺失导致训练/推理中断确认脚本中是否包含--exit-on-missing-checkpoint微调、推理、评估脚本均有预训练脚本从零开始时使用--no-load-optim --no-load-rng避免加载不存在的优化器状态。并行切分不一致预转换权重--target-tensor-parallel-size/--target-pipeline-parallel-size与训练脚本的--tensor-model-parallel-size/--pipeline-model-parallel-size必须完全对齐否则会因状态字典 shape 不匹配而加载失败。LoRA 参数不自洽微调的--lora-r/--lora-alpha/--lora-target-modules与 mcore2hf_lora 转换脚本必须保持逻辑一致否则合并出的 HF 权重结构与训练时不同。数据与 handler 不匹配预训练用GeneralPretrainHandler指令微调用AlpacaStyleInstructionHandler数据处理与训练两个阶段必须配对使用Qwen3 场景还需同步开启--enable-thinking true与--prompt-type qwen3。超时与资源类错误可参照预训练脚本头部环境变量适当调大HCCL_CONNECT_TIMEOUT/HCCL_EXEC_TIMEOUT并开启PYTORCH_NPU_ALLOC_CONFexpandable_segments:True缓解显存碎片问题。按数据处理 → 权重转换 → 预训练/微调 → 推理 → 评估的链路逐阶段打通即可基于 MindSpeed-LLM 完成 Qwen3 8B 在昇腾 NPU 上的完整 mcore 训练闭环在此基础上替换模型规格参数并同步调整并行配置即可迁移到其他规模的 Qwen3 系列模型。赞分享人工智能大模型分布式训练预训练微调模型推理服务强化学习Ascend【免费下载链接】MindSpeed-LLM昇腾LLM分布式训练框架项目地址https://gitcode.com/Ascend/MindSpeed-LLM点击查看免费下载相关推荐MindSpeed-LLM 大模型指令微调指南数据格式、序列训练策略与 mcore 全链路实操MindSpeed LLM 大模型指令微调指南数据格式、序列训练策略与 mcore 全链路实操 本文围绕 MindSpeed LLM 中 mcoreMega人工智能大模型分布式训练预训练微调模型推理服务强化学习AscendMindSpeed-LLM FSDP2 后端全参数微调实战指南以 Qwen3-8B 为例MindSpeed LLM FSDP2 后端全参数微调实战指南以 Qwen3 8B 为例 本文基于 finetune_fsdp2.md https://lin人工智能大模型分布式训练预训练微调模型推理服务强化学习AscendMindSpeed-LLM 多样本 Pack 微调实战指南样本打包、锯齿注意力掩码与 mcore 训练参数全解析MindSpeed LLM 多样本 Pack 微调实战指南样本打包、锯齿注意力掩码与 mcore 训练参数全解析 导读 多样本 PackMulti Samp人工智能大模型分布式训练预训练微调模型推理服务强化学习Ascend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考