ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ModelOpt 量化 LLM 精度基准测试实战:Windows 环境下 MMLU 与多维指标评估指南

ModelOpt 量化 LLM 精度基准测试实战:Windows 环境下 MMLU 与多维指标评估指南 【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载本指南聚焦 ModelOpt 仓库中 examples/windows/accuracy_benchmark 目录讲解如何用 MMLUMassive Multitask Language Understanding等经典基准在 Windows 环境下评估经 ModelOpt 量化PTQ / QAT / QAD后的 LLM 准确率覆盖 DirectML、ONNX RuntimeDML/CUDA/CPU与 TensorRT-LLM 多种部署后端。读完本文你将掌握从环境准备、数据集下载到四类后端评测命令的完整流程并能使用 KL 散度、Perplexity、FVD 等附加指标对量化模型做多维度精度验证同时了解 ONNX Runtime GenAI v0.6 API 变更对评测脚本的影响。概述量化之后精度如何验证模型压缩量化、剪枝、蒸馏在带来推理加速的同时也会引入精度损失。ModelOpt 提供了统一的优化工具链而accuracy_benchmark目录则配套提供了优化效果如何度量的完整方案它包含评测脚本、第三方经典基准与使用说明演示如何使用 ModelOpt 量化后的 LLM 在多种后端上跑 MMLU 等基准重点覆盖 Windows 环境下的 DirectML 与 TensorRT-LLM 部署路径。该目录的核心资产如下组件路径作用MMLU 评测主脚本mmlu_benchmark.py多后端 MMLU 准确率评测模型封装modeling.pyHF 模型 / AWQ 模型 / TRT-LLM Pipeline 封装量化工具quantization_utils.py评测前内联执行 ModelOpt PTQ 量化KL 散度指标kl_divergence_metrics/双模型输出相似度比较Perplexity 指标perplexity_metrics/WikiText-2 困惑度评估FVD 指标fvd_metrics/视频生成模型 Fréchet 距离评估环境准备Prerequisites在开始之前请确认以下环境要求类别说明操作系统Windows 10 或更高版本PythonORT-DML GenAI 使用 Python 3.11TensorRT-LLM 使用 Python 3.10其余后端 3.10 / 3.11 均可包管理器pip硬件与驱动根据评测方式安装对应硬件与驱动DirectML 评测需要 DirectML 支持TensorRT 评测需要 CUDA 兼容 GPU辅助工具推荐使用cmd运行命令Tar与Curl已内置于 Windows 10 及以上的 PowerShell 中提示本文命令基于 PowerShell 语法使用反引号作为续行符文档建议使用 cmd 运行相关命令实际操作时可按你熟悉的方式替换续行符。MMLU 基准与数据集准备MMLU 通过跨领域的大规模多项选择题涵盖 STEM、人文、社会科学、商业、健康等多个类别评估 LLM 能力输出分数介于 0 到 1 之间分数越高代表准确率越好。其论文为Measuring Massive Multitask Language UnderstandingarXiv:2009.03300。在 ModelOpt 评测中MMLU 的答案必须以 A/B/C/D 选项首字母开头这一特性使得脚本只需生成两个 token 即可判定对错非常适合快速验证量化模型的精度变化。环境搭建步骤步骤命令或说明以管理员身份打开 PowerShell—创建并激活虚拟环境可选但推荐python -m venv llm_env.\llm_env\Scripts\Activate.ps1安装 PyTorch 及相关包pip install torch2.7.0 torchvision0.22.0 torchaudio2.7.0 --index-url https://download.pytorch.org/whl/cu128安装 ONNX Runtime 包pip install onnxruntime-directml1.21.1pip install onnxruntime-genai-directml0.6.0安装基准依赖pip install -r requirements.txt下载 MMLU 数据mkdir datacurl.exe -L -o .\data\mmlu.tar mmlu 数据集 data.tar 下载地址tar -xf .\data\mmlu.tar -C .\dataMove-Item .\data\data .\data\mmlu其中 MMLU 数据来自cais/mmlu数据集的data.tar固定 commitc30699e8356da336a370243923dbaf21066bb9fe。下载解压后目录结构需要整理为data/mmlu/ ├── dev/ # 每学科 N 道开发集题目_dev.csv用于 few-shot 示例 └── test/ # 每学科测试集题目_test.csv用于打分依赖清单见 requirements.txt核心依赖包括datasets2.14.5、fire0.6.0、numpy1.26.4、pandas2.2.2、transformers4.57.3、peft0.5.0、tqdm4.66.5等。四种评估后端详解环境就绪后使用mmlu_benchmark.py即可评测不同后端部署的 LLM。脚本基于 Google Fire 生成命令行接口核心统一参数如下参数默认值说明--eppt执行后端genai_dml/ort_dml/ort_cuda/ort_cpu/pt/trt-llm--model_name—模型类型名causal或autoawq_causal见 modeling.py 的select_model--model_path—ONNX 模型文件夹或 HF 模型路径--output_fileresults/results.json结果输出 JSON 路径--ntrain0few-shot 示例数k-shot 中的 k--subjectNone指定学科逗号分隔不指定则评测全部 57 个学科--max_seq_length4096最大序列长度超出则跳过该样本--dtypebfloat16pt 后端使用的 torch dtypefloat16/bfloat16--quant_cfgNonept 后端的 ModelOpt 量化配置名如INT4_AWQ_CFG--calib_size512量化校准集大小--batch_size0校准 batch0 表示自动推导--trust_remote_codeFalse是否信任远端模型代码后端一GenAI API DirectML--ep genai_dml使用 ONNX Runtime GenAIonnxruntime-genai-directml加载 ONNX 模型通过og.Model、og.Tokenizer、og.Generator完成推理。在 mmlu_benchmark.py 的evaluate_genai_dml中生成策略被严格固定do_sampleFalse、temperature0.0仅生成 2 个新 token 后即解码判断若len(input_tokens) 2 args.max_seq_length则打印警告并跳过该样本每轮推理后还会显式gc.collect()回收显存以避免 DirectML 场景下的内存累积。完整测试套件python mmlu_benchmark.py --model_name causal --model_path ONNX_model_folder --ep genai_dml --output_file output_log_file.json --ntrain 5指定学科例如只跑abstract_algebra、anatomy、college_mathematicspython mmlu_benchmark.py --model_name causal --model_path ONNX_model_folder --ep genai_dml --output_file output_log_file.json --subject abstract_algebra,anatomy,college_mathematics --ntrain 5后端二ONNX Runtime API--ep ort_dml/--ep ort_cuda/--ep ort_cpu使用原生 ONNX RuntimeInferenceSession分别对应DmlExecutionProvider、CUDAExecutionProvider、CPUExecutionProvider三种执行提供方。该路径不依赖 GenAI 包而是读取 ONNX 模型目录下的config.json需包含num_hidden_layers、hidden_size、num_attention_heads、num_key_value_heads与model.onnx然后在 forward_ort_native 中手写自回归解码循环每步sess.run取 logits 后argmax采样下一个 token并手工维护past_key_values.{i}.key/value的 KV 缓存直到生成eos_token_id为止。注意模型目录必须包含model.onnx与config.jsontokenizer 通过AutoTokenizer.from_pretrained(onnx_model_path, local_files_onlyTrue)本地加载。完整测试套件python mmlu_benchmark.py --model_name causal --model_path ONNX_model_folder --ep ort_dml --output_file output_log_file.json --ntrain 5指定学科python mmlu_benchmark.py --model_name causal --model_path ONNX_model_folder --ep ort_dml --output_file output_log_file.json --subject abstract_algebra,anatomy,college_mathematics --ntrain 5把--ep换成ort_cuda或ort_cpu即可切换执行提供方。后端三PyTorch / Hugging Face--ep pt直接加载 PyTorch HF 模型进行评测是量化前后对比最直接的方式。脚本通过 select_model 选择模型类causal→CausalModelautoawq_causal→AutoAWQCausalModel其中CausalModel.load()会强制设置generation_config.do_sample False因为代码注释明确指出带 temperature 的采样会导致 MMLU 分数下降。完整测试套件python mmlu_benchmark.py --model_name causal --model_path ONNX_model_folder --ep pt --output_file output_log_file.json --ntrain 5 --dtype torch_dtype in models config.json {float16|bfloat16}指定学科python mmlu_benchmark.py --model_name causal --model_path ONNX_model_folder --ep pt --output_file output_log_file.json --subject abstract_algebra,anatomy,college_mathematics --ntrain 5 --dtype torch_dtype in models config.json {float16|bfloat16}后端四TensorRT-LLM--ep trt-llmTensorRT-LLM 后端需要独立的安装步骤与引擎目录engine_dir并额外提供--hf_model_dir用于加载 HF tokenizer 与 prompt 模板。1. 安装 TensorRT-LLM 与兼容的 PyTorchpip install torch2.4.0cu121 --index-url https://download.pytorch.org/whl pip install tensorrt_llm0.12.0 --extra-index-url https://pypi.nvidia.com --extra-index-url https://download.pytorch.org/whl/cu121/torch/2. 运行基准完整测试套件python mmlu_benchmark.py --model_name causal --hf_model_dir hf_model_path --engine_dir engine_path --ep trt-llm --ntrain 5 --output_file result.json指定学科python mmlu_benchmark.py --model_name causal --hf_model_dir hf_model_path --engine_dir engine_path --ep trt-llm --ntrain 5 --output_file result.json --subject abstract_algebra,anatomy,college_mathematics从源码看该路径在 trtllm_utils.py 中通过read_model_name(engine_dir)识别引擎架构如 GLM 版本、Qwen 版本由 load_tokenizer 加载带左填充/左截断的 tokenizer并针对 Qwen、GLM 等模型自动套用 prompt 模板见DEFAULT_PROMPT_TEMPLATES。当 Python 绑定可用时使用ModelRunnerCpp并配置max_beam_width1、kv_cache_free_gpu_memory_fraction0.9、kv_cache_enable_block_reuseFalse等运行时参数生成的TrtllmPipeline以 batch size 1、beam size 1、top_k1、top_p0.0、temperature1的确定性策略解码同样只生成 2 个 tokenoutput_len2。多卡场景下非 rank 0 进程只参与推理、不参与统计。mmlu_benchmark.py 核心流程源码解析深入 mmlu_benchmark.py 的main()可以看到评测管线由几个关键环节组成学科枚举subjectNone时脚本扫描data/mmlu/test下所有*_test.csv按文件名排序得到全部 57 个学科指定--subject时按逗号拆分。MMLU 的学科→子类→大类映射STEM / humanities / social sciences / other内置于get_subcategories()与get_categories()。样本与 prompt 构造format_example将每道题格式化为题目 选项A/B/C/D Answer:gen_prompt在开头拼接学科说明并取dev集中前ntrain条作为 few-shot 示例。长度自适应各后端都会调用check_valid_length校验 prompt 长度若超出max_input_length/max_seq_len则逐步减小kfew-shot 数重新构造 prompt确保样本不因长度被丢弃。打分方式所有后端统一采用pred.strip().startswith(label)判定正确性——模型生成的第一个字符与标准答案选项字母一致即判对。这正是脚本只生成 2 个 token 即可完成评测的原因。结果输出每个学科记录accuracy、逐题correctness列表与time_taken_seconds最终通过 save_results_to_json 输出包含subject_accuracies、overall_accuracy、category_accuracies、subcategory_accuracies、subject_details的 JSON 文件。可复现性脚本在入口处固定random.seed(RAND_SEED)与np.random.seed(RAND_SEED)RAND_SEED 1234保证多次运行结果一致。在评测中内联量化pt 后端的--quant_cfgpt 后端最独特的价值在于无需提前导出量化模型即可在评测流程中直接调用 ModelOpt 完成量化并立即评估。传入--quant_cfg如INT4_AWQ_CFG等算法配置名后脚本会执行 quantize_model校准集构造默认使用cnn_dailymail数据集calib_size控制总样本数默认 512batch_size0时通过dataset_utils.get_max_batch_size(net)自动推导最大可容纳 batch。动态量化检测_quantize_model_with_dataset会检查quant_cfg[quant_cfg]中是否存在非dynamic类型的量化器若全部为动态量化则跳过校准循环若配置中含bmm_quantizer键则先调用register_hf_attentions_on_the_fly(net)注册 HF attention 支持。执行量化调用mtq.quantize(net, atq_cfg, calibrate_loop)后紧跟mtq.fold_weight(net)折叠权重以加速评测。质量自检test_generatedTrue时会在量化前后分别用同一输入文本生成输出并打印对比直观展示 PTQ 带来的生成差异AWQ 配置会提示校准耗时更长可减小 calib_size。借助该机制你可以在一次命令行中完成量化 MMLU 评测的端到端对比实验。附加指标KL 散度、Perplexity 与 FVDMMLU 反映的是任务级准确率而量化模型在分布层面的退化还需要其他指标来度量。该目录按指标拆分了三个子目录各自包含独立 READMEKL 散度kl_divergence_metrics/使用 compute_kl_divergence.py 对两个模型做逐 token 输出分布的 KL 散度比较值越低表示输出越接近。典型场景包括优化前后对比量化/剪枝是否保持输出质量、框架对比HF vs GenAI、精度对比FP16 vs INT4 vs INT8以及执行提供方测试CUDA / DirectML / CPU / TensorRT。脚本支持 HF 与 GenAI 两种模型类型的自由组合HF vs GenAI、GenAI vs GenAI 需同一 EP、HF vs HF评测统一使用 WikiText-2 测试集。常用命令python compute_kl_divergence.py \ --model1 meta-llama/Llama-3.1-8B-Instruct --model1_type hf \ --model2 G:\models\genai_model --model2_type genai \ --device cuda \ --output results.json可选参数包括--debugverbose 日志--device默认cuda遇到 CUDA OOM 时可改用--device cpu。Perplexityperplexity_metrics/使用 run_perplexity.py 基于 WikiText-2 数据集评估 ONNX Runtime GenAI 模型与 HF 模型的困惑度值越低代表语言建模能力越强。脚本源自微软 onnxruntime-genai 仓库的perplexity_metrics.py并扩展了多上下文长度、可配置 chunk size、prefill chunking 与 HF 模型支持。支持 GenAI 模型Gemma、Llama、Mistral、Phi、Qwen 等架构CPU / DirectML / CUDA / NvTensorRtRtx 执行提供方与任意 HF 因果 LM如 Llama-2-7b、gpt2、Mistral-7B。典型用法# 单个 ONNX 模型 python run_perplexity.py --models /path/to/model # 自定义输入序列长度与 prefill chunk python run_perplexity.py --models /path/to/model --i 1024,2048,4096,8192,12288 --chunk_size1024 # HF 模型 半精度推荐 python run_perplexity.py --hf_model meta-llama/Llama-2-7b-hf --hf_dtype float16 --i 1024 # ONNX 与 HF 并排对比 python run_perplexity.py \ --models /path/to/onnx_model \ --hf_model meta-llama/Llama-2-7b-hf \ --hf_dtype float16 \ --i 1024 \ --output comparison_results.csv若genai_config.json中启用了 kv_chunkingsearch段存在chunk_size则max_input_seq_length设为 8192 且stride取chunk_size否则默认max_input_seq_length1024、stride512。输出 CSV 包含模型路径、模型类型、输入长度、Perplexity 分数、状态与错误信息。目录 README 给出的经验区间为2–20 优秀、20–40 良好、40–80 尚可、100 较差。FVDfvd_metrics/使用 compute_fvd.py 与 i3d_model.py 计算两组视频之间的 Fréchet Video Distance。FVD 是分布级指标值越低表示两组视频分布越相似0 表示完全相同基于预训练 I3D 模型Kinetics-400 RGB 流Inception-v1 3D 化结构1024 维特征实现权重rgb_imagenet.pt约 49 MB、首次运行自动下载。典型命令python compute_fvd.py \ --ref-dir /path/to/reference/videos \ --gen-dir /path/to/generated/videos \ --clips-per-video 4 \ --output results.json可选参数包括--weights本地 I3D 权重、--device默认自动检测、--clip-length默认 16 帧、--clips-per-video默认 1、--batch-size默认 8、--pca-dim当 clip 数小于 1024 维特征时自动 PCA避免协方差矩阵秩亏。该子目录 README 还记录了 LTX-2.3 视频生成模型 PTQ 与 QAD 对比 BF16 基线的示例基准11 个 VBench 维度上 QAD 平均 FVD 22.19、PTQ 平均 34.41其中 Scene Background64.92 vs 35.69与 Object Class51.51 vs 26.86差异最大——这些数据可作为理解 FVD 指标量级与量化方法取舍的参考。注意ONNX Runtime GenAI v0.6 API 变更在 onnxruntime-genai v0.6 中generator.compute_logits()与generator_params.input_ids被弃用取而代之的是新增的generator.append_tokens(List: token_ids)API。本目录的mmlu_benchmark.py已同步更新到新 API见evaluate_genai_dml中generator.append_tokens(input_tokens)的调用方式。如上图所示旧版本左侧在初始化og.GeneratorParams(model)后通过params.input_ids input_tokens注入输入并在每轮生成前显式调用generator.compute_logits()新版本右侧则在创建og.Generator(model, params)后直接调用generator.append_tokens(input_tokens)一次性注入 token 序列循环中仅需generate_next_token()get_next_tokens()。因此若你仍在使用 GenAI 0.6需要按左侧逻辑修改评测脚本中的对应片段。故障排查Troubleshoot模型特定问题如 tokenizer 或 onnxruntime-genai 包问题可尝试退回旧版 GenAI例如用onnxruntime-genai-directml0.4 配合transformers4.44 导出 ONNX 模型。GenAI 跑 MMLU 前先验证模型本身确认输入模型能在 GenAI 下正常推理。onnxruntime-genai 提供了示例推理脚本如 phi3 问答示例可先跑通再进入批量评测。CUDA OOM对于 HF 模型可改用--device cpu或减小 batch、关闭其他占用 GPU 的程序。FVD 结果不稳定clip 样本数过少低于约 256 个时估计噪声大发布级结果建议 2048 个 clip可用--clips-per-video 8增加采样数。小结本文完整介绍了 ModelOpt 在 Windows 环境下的精度基准测试方案以 mmlu_benchmark.py 为核心覆盖 GenAI/DirectML、原生 ONNX RuntimeDML/CUDA/CPU、PyTorch HF 与 TensorRT-LLM 四条评测路径配合--quant_cfg可在一行命令内完成ModelOpt 量化 MMLU 评测再辅以 KL 散度、Perplexity、FVD 三种分布级指标即可从任务准确率、输出分布、语言建模能力与视频生成质量等多个维度全面验证量化模型的精度表现为部署到 TensorRT-LLM、ONNX Runtime 等推理框架前提供可靠的质量把关。赞分享【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载相关推荐Oumi模型评估MMLU与BBH基准测试全攻略Oumi模型评估MMLU与BBH基准测试全攻略 引言探索大语言模型的认知能力密码 你是否曾困惑于如何客观衡量大语言模型LLM的真实能力在层出不穷的模型人工智能大模型预训练微调强化学习模型推理服务模型评测MCP 服务分布式训练模型量化SGLang MMLU 基准测试指南数据准备、服务部署与 few-shot 精度评测SGLang MMLU 基准测试指南数据准备、服务部署与 few shot 精度评测 本文基于 SGLang 仓库中 benchmark/mmlu https模型推理服务推理引擎人工智能大模型本地部署多模态如何快速上手Frank英雄联盟助手的完整安装与配置指南如何快速上手Frank英雄联盟助手的完整安装与配置指南 想要提升《英雄联盟》游戏体验Frank英雄联盟助手是你的绝佳选择作为一款全新的轻量级游戏辅助工具上一篇如何快速上手Advent of Code Kotlin Template从模板创建到第一个谜题解答下一篇Lua面向对象编程革命middleclass库完全指南与10大核心功能解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表