TorchNPU LLM性能基准实战:如何快速测试热门大模型在昇腾NPU上的真实表现
2026/9/24 15:46:53 网站建设 项目流程

TorchNPU LLM性能基准实战:如何快速测试热门大模型在昇腾NPU上的真实表现

【免费下载链接】pytorch作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。项目地址: https://gitcode.com/Ascend/pytorch

TorchNPU是昇腾专为 PyTorch 打造的深度学习适配插件(Ascend for PyTorch),让 PyTorch 框架能够直接调用昇腾 NPU 算力。而本仓库自带的 benchmarks/llm/ 基准测试套件,就是快速验证 Qwen3、Llama3、GLM4 等热门大模型在昇腾 NPU 上真实训练性能的"利器"——一条命令即可测出每一步的真实耗时,还能自动采集 Profiler 性能数据。

为什么你需要 LLM 性能基准测试 🎯

在把大模型迁移到昇腾 NPU 之前,你大概率会关心这几个问题:

  • 模型在 NPU 上的训练步耗时到底是多少?
  • 开启torch.compile图模式后能提速多少
  • 显存占用是否满足硬件要求?

靠肉眼看日志很难量化这些指标。仓库内置的 LLM 基准脚本内置了TimingCallback计时回调(见 benchmarks/llu/utils/utils.py),会自动记录每一步的耗时(毫秒级精度),并在训练结束时输出统计摘要——直接给出总步数、总耗时和平均步耗时,无需你手写任何测量代码。

支持哪些热门大模型?📦

benchmarks/llm/ 目录下为多个主流模型分别提供了开箱即用的训练脚本:

模型目录训练脚本
Qwen3-4Bqwen3-4B/train_qwen3_4B.py
Llama3-8B / Llama3.2-3Bllama3&llama3.2/train_llama3.py
GLM4-9B-Chatglm4-9B-chat/train_glm4_9B.py
GPT-OSS-20Bgpt-oss-20B/train_gpt_oss_20B.py
Baichuan2-7B-Chatbaichuan2-7B-Chat/train_baichuan2_7B.py
Mamba-Codestral-7Bmamba-codestral-7B/train_mamba2_7B.py

每个模型目录都遵循统一的三步流程:下载模型权重 → 准备训练数据 → 启动训练,对应的说明文档如 qwen3-4B/README.md 都有详细指引。

快速上手:四步完成 Qwen3-4B 基准测试 🚀

第一步:安装依赖

所有 LLM 基准共用的依赖已整理好,直接安装即可:

pip install -r benchmarks/llm/utils/requirements.txt

benchmarks/llm/utils/requirements.txt 中固定了 transformers、peft、datasets、accelerate 等关键版本,保证可复现性。

第二步:准备模型权重与数据

以 Qwen3-4B-Base 为例,仓库提供了统一的下载脚本:

python benchmarks/llm/utils/download_hf.py --model Qwen/Qwen3-4B-Base --save_path ./Qwen3-4B-Base

训练数据可任意准备jsonl格式的语料(各模型 README 中给出了示例数据c4_demo.jsonl的获取方式),脚本会自动完成分词、截断和 padding 处理。

第三步:修改路径并启动 eager 模式测试

编辑 benchmarks/llm/qwen3-4B/run_qwen3.sh,填入你的模型与数据路径,然后执行:

cd benchmarks/llm/qwen3-4B bash run_qwen3.sh

训练日志会输出到logs/train_qwen.log,你会看到类似这样的实时输出:

[eager] step 12 step_time: 382.145ms loss: 1.8732

训练结束时自动打印汇总:

Step time consumption statistics (keeping only the last 100 steps) [eager] total step:100 total steps time:38201.45ms, avg step time:382.014ms

💡 计时逻辑会跳过前段热身步数(默认保留后 100 步),从而消除编译和数据加载等干扰,得到更真实的稳态步耗时。

第四步:切换 torch.compile 对比图模式性能

同样的命令加两个开关即可切换为图模式:

bash run_qwen3.sh --enable_compile --npu-backend mlir
  • NPU 上默认后端为mlir,也可显式指定dvm后端(--npu-backend dvm
  • 日志中的模式标记会变为[compile],方便与 eager 结果对照

跑完两种模式后,对比两者输出的avg step time,就能直观得到编译优化带来的加速比例。

进阶:采集 Profiler 定位性能瓶颈 🔍

只看步耗时还不够,想知道时间具体耗在哪个算子上,可以开启 Profiler 开关:

bash run_qwen3.sh --enable_profiler --profiler_start_step 5 --profiler_end_step 6

底层由 benchmarks/llm/utils/utils.py 中的get_profile函数实现,它在 NPU 设备上会自动调用torch_npu.profiler.profile,按 schedule 跳过前 5 步热身后采集第 6 步的数据,并导出 TensorBoard 兼容的 trace 文件。

生成的 trace 可以用 TensorBoard 打开,看到 Python 线程、CANN 调度线程与 NPU 硬件三条泳道的完整时间线:

如果想分析显存占用,还可以结合内存时间线图查看参数、优化器状态、激活值与梯度的分配曲线:

常见参数速查表 ⚙️

以下参数在所有模型训练脚本中通用(以 train_qwen3_4B.py 为例):

参数作用
--use_lora启用 LoRA 参数高效微调,降低显存需求
--use_4bit4-bit 量化加载,让小显存设备也能测大模型
--use_bf16BF16 混合精度训练(NPU 推荐)
--max_steps 200控制测试步数,基准测试不必跑满整个 epoch
--max_length 512控制序列长度,模拟不同场景负载
--enable_compile开启 torch.compile 图模式
--enable_profiler开启 Profiler 数据收集

基准测试小技巧 ✅

  1. 统一变量:对比 eager 与 compile 时,保持--max_steps--batch_size--max_length完全一致,结论才可信;
  2. 利用 LoRA + 4bit:显存吃紧时加--use_lora --use_4bit,可以显著降低模型加载的显存门槛;
  3. 短步数快测--max_steps 200是仓库默认值,几分钟即可拿到稳态数据;
  4. 日志留档:脚本默认将输出重定向到logs/目录,便于多次实验后横向对比;
  5. GPU/NPU 自动识别detect_device_type会优先探测 CUDA,其次 NPU,同一套脚本在两种设备上都能直接跑。

写在最后

借助 benchmarks/llm/ 这套基准套件,你只需要"装依赖 → 填路径 → 跑脚本"三步,就能拿到热门大模型在昇腾 NPU 上的真实步耗时与 Profiler 数据。无论是评估硬件选型、验证编译优化收益,还是定位训练瓶颈,它都能帮你把"NPU 上到底快不快"这个模糊问题,变成一组清晰的数字。

📌 更多环境配置与性能调优说明,可参阅仓库根目录下的 README.zh.md。

【免费下载链接】pytorch作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。项目地址: https://gitcode.com/Ascend/pytorch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询