人工智能大模型分布式训练预训练微调模型推理服务强化学习Ascend【免费下载链接】MindSpeed-LLM昇腾LLM分布式训练框架项目地址https://gitcode.com/Ascend/MindSpeed-LLM点击查看免费下载MindSpeed-LLM 在昇腾硬件上提供开箱即用的大模型分布式评估能力支持在 MMLU、CEval、BoolQ、BBH、AGIEval、HumanEval、CMMLU、GSM8k、HellaSwag、NeedleBench 等公开基准上对预训练权重、指令微调权重与 LoRA 权重进行准确率评估。阅读本文后你将掌握评估脚本的命名与启动方式、关键参数--max-new-tokens、--evaluation-batch-size、--broadcast、--prompt-type等的语义与取值建议并理解评估框架的源码级实现原理从而在自己的训练流水线中快速落地可复现、可扩展的模型评测方案。1. 评估能力总览MindSpeed-LLM 的评估功能以仓库根目录的 evaluation.py 为统一入口通过torchrun拉起分布式推理将测试数据交给各 Benchmark 的专用评估实现位于 mindspeed_llm/tasks/evaluation/eval_impl最终在 rank 0 汇总输出各科目得分表。当前支持的 Benchmark 及对应验证集如下更完整的支持列表与统计信息见 models_evaluation.mdBenchmark验证集说明MMLUtest多任务多领域英文理解覆盖 STEM、人文学科、社会科学等CEvalval13,468 道覆盖 52 个学科的中文四选一客观题BoolQdev15,942 个问题段落答案三元组布尔问答BBHtestBIG-Bench 的 23 项高难度推理任务子集AGIEvaltest源自高考、SAT、法考等 20 项人类考试的基准HumanEvaltest代码生成评估含测试用例CMMLUtest中文多任务理解GSM8k-8,500 道小学数学应用题多步推理HellaSwag-常识推理与结尾续写选择NeedleBench-百万级上下文窗口下的长文本检索与推理仓库文档 models_evaluation.md 同时给出了 MindSpeed-LLM 在部分模型/任务上的评估结果例如 LLaMA2-7B 在 MMLU 上 45.73%、Qwen2-7B 在 MMLU 上 70.3%、GLM4-9B 在 MMLU 上 74.5% 等可用于结果合理性自检同一文档中也记录了社区评测数据供对比具体的复现条件脚本、权重与数据版本以该文档为准。2. 环境准备环境变量与分布式启动前提评估脚本中涉及的环境变量说明可参考 环境变量说明其中与评估运行关系密切的几项包括环境变量说明与建议CUDA_DEVICE_MAX_CONNECTIONS定义任务流可映射的硬件队列数量评估脚本中通常设为 1PYTORCH_NPU_ALLOC_CONF内存碎片优化开关可配置为expandable_segments:True以缓解 OOMHCCL_CONNECT_TIMEOUTHCCL 建连超时时间多机大集群建议调大如 3600NPUS_PER_NODE单节点使用的 NPU 数量MASTER_ADDR/MASTER_PORT分布式训练/推理主节点地址与端口ASCEND_RT_VISIBLE_DEVICES指定对当前进程可见的 Device所有评估脚本都通过torchrun启动多机配置统一为NNODES、NODE_RANK、NPUS_PER_NODE三个变量WORLD_SIZE$((NPUS_PER_NODE*NNODES))自动推导。评估属于推理过程因此脚本会固定传入--no-load-rng、--no-load-optim、--micro-batch-size 1、--exit-on-missing-checkpoint等与训练无关的选项。3. 基准评估对预训练权重直接打分3.1 脚本命名风格与启动方式MindSpeed-LLM 的评估脚本统一放在examples/mcore/model_name/下命名风格为evaluate_model_benchmark_ptd.sh。以当前仓库中的实际脚本为例examples/mcore/qwen3/evaluate_qwen3_8b_ptd.shexamples/mcore/qwen3_moe/evaluate_qwen3_30b_a3b_ptd.shexamples/mcore/qwen3_moe/evaluate_qwen3_235b_a22b_ptd.shexamples/mcore/deepseek3/evaluate_deepseek3_671b_4k_ptd.sh启动方式bash examples/mcore/qwen3/evaluate_qwen3_8b_ptd.sh3.2 需要修改的路径与任务配置每个评估脚本头部都留出了四个必须填写的路径变量TOKENIZER_PATHyour tokenizer path # 词表/分词器路径 CHECKPOINTyour model ckpt path # 权重路径mcore 格式 DATA_PATHyour data path # 任务数据集路径 TASKmmlu # 支持 mmlu、ceval、agieval、bbh、boolq、human_eval 等其中TASK的取值与 evaluation.py 中main()的任务分发逻辑一一对应cmmlu、mmlu_ppl、mmlu、gsm8k、boolq、ceval、bbh、agieval、human_eval、needlebench均作为独立任务名被识别且可一次传入多个任务同时评估。3.3 完整脚本骨架以 Qwen3-8B 为例examples/mcore/qwen3/evaluate_qwen3_8b_ptd.sh 的评估命令主体如下torchrun $DISTRIBUTED_ARGS evaluation.py \ --spec mindspeed_llm.tasks.models.spec.qwen3_spec layer_spec \ --task-data-path ${DATA_PATH} \ --task ${TASK} \ --use-mcore-models \ --tensor-model-parallel-size ${TP} \ --pipeline-model-parallel-size ${PP} \ --num-layers 36 \ --hidden-size 4096 \ --ffn-hidden-size 12288 \ --num-attention-heads 32 \ --group-query-attention \ --num-query-groups 8 \ --seq-length ${SEQ_LENGTH} \ --max-new-tokens 2 \ --max-position-embeddings 32768 \ --position-embedding-type rope \ --load ${CHECKPOINT} \ --no-chat-template \ --tokenizer-type PretrainedFromHF \ --tokenizer-name-or-path ${TOKENIZER_PATH} \ --normalization RMSNorm \ --no-load-rng \ --no-load-optim \ --seed 42 \ --bf16 \ --transformer-impl local \ --ckpt-format torch \ | tee logs/evaluate_qwen3_8b_ptd.log对于 MoE 模型如 Qwen3-30B-A3B脚本还会追加--num-experts、--moe-router-topk、--expert-model-parallel-size等专家并行参数见 examples/mcore/qwen3_moe/evaluate_qwen3_30b_a3b_ptd.sh。注意评估时使用的模型结构参数层数、隐藏维度、注意力头数、词表大小等必须与训练/转换权重时保持一致否则加载会失败。3.4 核心评估参数【--max-new-tokens】表示模型输出的生成长度。多项选择问题的输出长度通常比编码任务如 HumanEval的输出长度小很多该参数在很大程度上影响模型评估性能选择题类MMLU/CEval/CMMLU 直接模式、微调模板模式设置为 1 或 2BoolQ设置为 3 或 4AGIEval 直接模式3平替模板模式5 或以上BBH/GSM8k 直接模式32思维链CoT模式512 或以上HumanEval1024确保代码完整输出NeedleBench64。设置过大会拖慢推理每道题生成更多 token设置过小则可能导致答案截断、得分下降。【--evaluation-batch-size】可以设置多 batch 推理将多条测试样本打包后一次性前向显著提升模型评估吞吐。源码中该参数默认值为 1见 mindspeed_llm/tasks/evaluation/utils.py 中add_text_generate_args的--evaluation-batch-size定义评估实现按该值对指令列表切片分批送入chat.chat()见 eval_impl/mmlu_eval.py。【--broadcast】在开启 Expert ParallelEP 1评估 MoE 模型时需要启用该参数。从源码看--broadcast用于控制推理时的结果广播行为启用后评估数据不再按数据并行域切分get_final_dataset走 broadcast 分支而是将同一份数据广播给所有 rank 由各组独立推理后再汇总见 eval_impl/mmlu_eval.py。开启 EP 时若不设该参数各专家分片上的结果将无法正确合并导致评估失真。4. 各 Benchmark 的评估模式详解MindSpeed-LLM 对不同数据集提供了多种评估模式主要分为三类直接评估few-shot 模板直连、微调模板评估读取dev目录做 few-shot 对话模板、平替模板输出--alternative-prompt。各数据集的完整说明见 evaluation_datasets 目录。4.1 MMLU四种模式MMLUMassive Multitask Language Understanding覆盖抽象代数、天文学、大学化学、法律、医学、哲学等数十个科目完整科目清单见 mmlu_evaluation.md。直接评估模式默认读取仓库内置的 mmlu_5shot_template.json按科目预置 5-shot 示例拼接问题后直接前向模型第一个输出作为答案。--max-new-tokens设为 1 或 2。微调模板评估模式读取DATA_PATH同级dev目录下的*_dev.csv作为模板问题按--seed种子打乱后拼接再经对话模板处理。--max-new-tokens设为 1 或 2--prompt-type需与微调时保持一致。平替模板输出模式--alternative-prompt同样使用dev目录数据但不打乱顺序、不做对话字典处理直接拼接前向--max-new-tokens建议 128 或以上。该模式使用与业界优秀评估方案一致的模板通常可获得更稳定的分数。PPL 模式--task mmlu_ppl将 n 个选项各自拼接上下文形成 n 条序列计算困惑度perplexity取 ppl 最低的选项作为推理结果后处理简单直接、确定性高实现见 eval_impl/mmlu_ppl.py。4.2 CEval 与 CMMLU中文多学科评估CEval由 52 个学科、13,468 道四选一客观题构成。直接模式使用 ceval_5shot_template.json--max-new-tokens设为 2微调模板模式与平替模板模式的用法同 MMLU。CMMLU面向中文语境覆盖历史、文学、法律、数学、物理、医学、经济等学科学科分类见 cmmlu_evaluation.md。除通用模式外还建议设置--eval-language zh英文模型可保持en。4.3 BoolQ布尔问答BoolQ 的直接评估模式不使用任何提示模板模型直接接收问题-段落对输出层计算Yes/No的 token 概率P(Yes) P(No)判定为 True否则为 False——该判断逻辑在 evaluation.py 的get_result中通过对比tokenizer.encode(Yes)[-1]与tokenizer.encode(No)[-1]的 logits 实现。注意该模式准确率可能虚高 3~5%。平替模板模式则要求模型输出A/B分别对应 True/False配合--origin-postprocess可将类似True的输出重新映射回A映射逻辑见 eval_utils/boolq_utils.py。4.4 AGIEval人类考试基准AGIEval 源自高考、SAT、法考等 20 项人类考试含 18 项选择题任务与 2 项完形填空任务直接评估模式拼接 AGI_fewshot.json 模板--max-new-tokens设为 3平替模板输出模式使用 eval_utils/agi_utils.py 中template_mapping的固定模板--max-new-tokens设为 5 或以上--alternative-prompt置 true。4.5 GSM8k 与 BBH数学与多步推理GSM8k8,500 道小学数学应用题需 2~8 步链式计算。直接模式拼接 gsm8k_3shot_template.json--max-new-tokens设为 512CoT 思维链模式通过--chain-of-thought使能将 CoT 提示应用于任务--max-new-tokens512 或以上。BBH23 项高难度 BIG-Bench 任务。直接模式将问题直连模型--max-new-tokens32确保word_sorting等长输出任务完整输出微调模板模式使用 bbh_template.json非 CoT 风格CoT 模式使用 bbh_cot_template.json--max-new-tokens512 或以上。4.6 HumanEval代码生成HumanEval 不使用提示模板直接评估模式采用束搜索beam search推理每个问题输出后通过logger.info即时提示是否通过平替模板模式--alternative-prompt则用常规采样推理并在全部问题结束后统一评判。--max-new-tokens建议 1024。相关实现见 eval_impl/human_eval.py 与 evaluation.py 中LLMChat.beam_search_chat的num_beams4分支。4.7 HellaSwag 与 NeedleBenchHellaSwag常识推理、对抗性过滤的续写选择任务直接评估模式--max-new-tokens设为 32。NeedleBench评估百万级上下文下的检索与推理能力目前仓库支持 Single-Needle-RetrievalS-RT测试。参数上--max-new-tokens设为 64--seq-length/--max-position-embeddings/--max-tokens-to-oom可在 4096、8192、32768、131072、262144、524288、1048576 中选择以测试对应长度长文本测试需开启 YARN配置说明见 yarn.md。文档记录的复现数据显示 Qwen2-7B-Instruct 在 128K S-RT 上为 70.19%叠加 YARN 后提升至 87.03%详见 needlebench-evaluation.md。5. 指令微调权重评估对指令微调SFT后的权重进行评测时脚本命名风格为evaluate_model_setting_benchmark_ptd.sh例如tune阶段产出权重对应的评估脚本除基准评估的通用参数外还涉及以下三个关键参数。【--prompt-type】指定模型对话模板。评估时使用的--prompt-type必须与微调阶段保持一致否则模板不匹配会导致分数失真。该参数会触发微调模板评估模式从DATA_PATH同级dev目录读取*_dev.csv作为 few-shot 示例拼接后按对话模板构造消息序列输入模型。【--hf-chat-template】如果模型的 tokenizer 已自带chat_template属性可添加--hf-chat-template使用模型内置对话模板进行评估无需再手动指定--prompt-type。从源码看参数在 utils.py 中定义为actionstore_true而 evaluation.py 中LLMChat.chat的逻辑是未指定--prompt-type且未禁用模板时优先调用tokenizer.apply_chat_template(...)构造对话NeedleBench 任务始终使用内置模板。--no-chat-template可显式关闭该行为直接使用{instruction}模板。【--eval-language】根据评估数据集语言确定默认为en评估中文数据集如 CEval、CMMLU时应设置为zh。该参数在 utils.py 中限定choices[en, zh]并驱动 eval_impl/template.py 中注册的两套模板en使用 The following are multiple choice questions (with answers) about {subject}... 风格zh使用 以下是中国关于{subject}考试的单项选择题请选出其中的正确答案。\n\n 风格。6. LoRA 权重评估使用 LoRA 微调权重进行评估时脚本命名风格为evaluate_model_benchmark_lora_ptd.sh启动方式与基准评估一致。与普通评估的关键区别在于需要通过--lora-load加载 LoRA 权重该参数定义见 mindspeed_llm/features_manager/finetune/lora.py为Directory containing a lora model checkpoint。LoRA 权重的加载方式与推理脚本一致可参考 examples/mcore/deepseek3/generate_deepseek3_671b_4k_lora_ptd.shtorchrun $DISTRIBUTED_ARGS inference.py \ $GPT_ARGS \ ... --load ${CHECKPOINT} # 基础权重 --lora-load ${LORA_CHECKPOINT} # LoRA 权重 --lora-r 8 \ --lora-alpha 16 \ --lora-fusion \ --lora-target-modules linear_qkv linear_proj linear_fc1 linear_fc2评估时需注意--lora-r、--lora-alpha、--lora-target-modules等参数必须与微调阶段一致微调示例见 examples/mcore/qwen3/tune_qwen3_8b_4K_lora_ptd.sh其中--lora-r 16 --lora-alpha 32 --lora-fusion --lora-target-modules linear_qkv linear_proj linear_fc1 linear_fc2LoRA 微调后的权重评估同样建议配置--prompt-type与微调一致并使用微调模板评估模式以获得稳定结果若基础权重为 mcore 格式、LoRA 权重为独立保存的 checkpoint需确保--ckpt-format与转换流程一致。7. 分布式评估的源码级实现原理7.1 统一入口与任务分发evaluation.py 的main()依次完成initialize_megatron默认注入no_load_rng/no_load_optim→MegatronModuleForCausalLM.from_pretrained加载权重 →AutoTokenizer构建 tokenizer → 按args.task逐个分派到对应评估函数如mmlu、ceval、boolq、bbh、agieval、human_eval、gsm8k、cmmlu、mmlu_ppl、needlebench并在 rank 0 打印各任务的运行耗时。每个任务函数内部都会实例化对应的XxxEval(test_dirdata_path, eval_argseval_args)并调用eval(chatagent)。7.2 抽象接口DatasetEval 与 Chat评估框架由两个抽象接口驱动eval_api/chat.py 定义Chat抽象类提供chat(instruction, history)与beam_search_chat(instruction, history)两个对话接口eval_api/dataset_eval.py 定义DatasetEval抽象类要求实现eval(chat)返回{subject: {题号: 选项}}答案字典与含subject/question_n/acc字段的得分 DataFrame。evaluation.py 中的LLMChat是两者的桥梁它负责把 instruction 列表按模板/chat_template 处理成输入序列调用model.generate(..., do_sampleFalse, max_new_tokensargs.max_new_tokens, return_output_log_probs..., broadcastargs.broadcast)得到输出与 logits再经get_result提取首 token 答案及 Yes/No 概率对比结果。7.3 数据并行切分与结果聚合多卡评估时utils.py 提供了一套数据并行域切分机制compute_all_dp_domains按 TP/PP 拓扑计算所有数据并行分组conjugate_data_parallel_domain做共轭重组split_dataframe将数据集均匀切分alignment_data_length对长度不足的分片补齐首行以便各 rank 进度对齐最终每个 rank 只处理自己那一份样本评估结束后通过dist.all_reduce汇总各分组的正确数与题目数见 eval_impl/mmlu_eval.py在 rank 0 打印形如mmlu acc {total_acc_n}/{total_n}的总结并生成逐科目得分表。这与 MoE 场景下--broadcast的行为形成对照EP 开启时启用 broadcast样本不再切分各组独立推理后按组广播合并。7.4 答案后处理以 MMLU 为例答案提取使用两级正则r.*(?Panswer[A|B|C|D])\..*与r(?Panswer[A|B|C|D])逐条匹配模型输出平替模板模式下则调用 eval_utils/mmlu_utils.py 的postprocess内置了 答案是X、答案选X、故选X 等数十种中英文答案表述的映射规则--origin-postprocess可切换为原始提取方法。BollQ 则是直接比较 Yes/No 两个 token 的 logits不依赖生成文本。8. 调优建议与常见问题--max-new-tokens决定评估性能与正确性的平衡选择题设 1~2 可大幅提升吞吐代码/长推理任务设 512~1024 保证输出完整对某一基准拿不准时先按本文第 4 节给出的分数据集建议值配置。用--evaluation-batch-size提升吞吐从 1 开始逐步增大观察 NPU 利用率与显存占用batch 内多条样本共享一次前向。MoE 模型评估务必加--broadcastEP 并行下不开启会导致各专家分片结果无法正确归并。中文数据集设置--eval-language zhCEval、CMMLU 等中文基准会切换为中文 system 提示与答案引导语显著影响模型输出格式与得分。微调权重评估保持--prompt-type与训练一致对话模板不一致是微调后评估分数异常的最常见原因tokenizer 自带模板的模型可改用--hf-chat-template。调试小批量数据可加--max-eval-samples N限制每个数据集仅评估前 N 条参数定义见 utils.py快速验证脚本与路径配置无误后再全量评估。结果存档脚本末尾统一tee logs/evaluate_xxx.log得分表由 rank 0 以logger.info输出便于与 models_evaluation.md 中的参考数值比对。评估是衡量训练质量的最后一道关卡。掌握上述脚本、参数与源码机制后你便可以在 MindSpeed-LLM 上对任意一版权重预训练 / SFT / LoRA一键跑通全基准评估并在自己的流水线中复现、对比与迭代模型效果。赞分享人工智能大模型分布式训练预训练微调模型推理服务强化学习Ascend【免费下载链接】MindSpeed-LLM昇腾LLM分布式训练框架项目地址https://gitcode.com/Ascend/MindSpeed-LLM点击查看免费下载相关推荐MindSpeed-LLM 分布式大模型评估实战从 Benchmark 脚本、对话模板到 LoRA 权重评估MindSpeed LLM 分布式大模型评估实战从 Benchmark 脚本、对话模板到 LoRA 权重评估 本篇指南基于 MindSpeed LLM 官方评人工智能大模型分布式训练预训练微调模型推理服务强化学习AscendMindSpeed-LLM 中 AGIEval 基准评估实战指南两种评估模式与参数配置详解MindSpeed LLM 中 AGIEval 基准评估实战指南两种评估模式与参数配置详解 AGIEval 是一个以人类考试为蓝本、专门衡量基础模型综合认知与人工智能大模型分布式训练预训练微调模型推理服务强化学习AscendMindSpeed-LLM LoRA 微调移植实战指南从权重转换、数据预处理到微调/推理/评估与权重合并导出MindSpeed LLM LoRA 微调移植实战指南从权重转换、数据预处理到微调/推理/评估与权重合并导出 本文以昇腾AscendLLM 分布式训练框架人工智能大模型分布式训练预训练微调模型推理服务强化学习Ascend上一篇es-toolkit/fp 的 pipe 函数从左到右的函数组合与延迟求值机制详解下一篇Home Assistant 中 openhome.invoke_pin 动作实战在 Linn / OpenHome 设备上播放已固定的内容创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考