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-4B | qwen3-4B/ | train_qwen3_4B.py |
| Llama3-8B / Llama3.2-3B | llama3&llama3.2/ | train_llama3.py |
| GLM4-9B-Chat | glm4-9B-chat/ | train_glm4_9B.py |
| GPT-OSS-20B | gpt-oss-20B/ | train_gpt_oss_20B.py |
| Baichuan2-7B-Chat | baichuan2-7B-Chat/ | train_baichuan2_7B.py |
| Mamba-Codestral-7B | mamba-codestral-7B/ | train_mamba2_7B.py |
每个模型目录都遵循统一的三步流程:下载模型权重 → 准备训练数据 → 启动训练,对应的说明文档如 qwen3-4B/README.md 都有详细指引。
快速上手:四步完成 Qwen3-4B 基准测试 🚀
第一步:安装依赖
所有 LLM 基准共用的依赖已整理好,直接安装即可:
pip install -r benchmarks/llm/utils/requirements.txtbenchmarks/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_4bit | 4-bit 量化加载,让小显存设备也能测大模型 |
--use_bf16 | BF16 混合精度训练(NPU 推荐) |
--max_steps 200 | 控制测试步数,基准测试不必跑满整个 epoch |
--max_length 512 | 控制序列长度,模拟不同场景负载 |
--enable_compile | 开启 torch.compile 图模式 |
--enable_profiler | 开启 Profiler 数据收集 |
基准测试小技巧 ✅
- 统一变量:对比 eager 与 compile 时,保持
--max_steps、--batch_size、--max_length完全一致,结论才可信; - 利用 LoRA + 4bit:显存吃紧时加
--use_lora --use_4bit,可以显著降低模型加载的显存门槛; - 短步数快测:
--max_steps 200是仓库默认值,几分钟即可拿到稳态数据; - 日志留档:脚本默认将输出重定向到
logs/目录,便于多次实验后横向对比; - 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),仅供参考