Llama-2-7B 昇腾 NPU 测评总结
背景与测评目标
本文旨在适配大模型国产化部署需求,以 Llama-2-7B 为对象,在昇腾 NPU 环境中完成从依赖安装到模型部署的全流程落地。通过六大维度测评验证:单请求吞吐量稳定 15.6-17.6 tokens/秒,batch=4 时总吞吐量达 63.33 tokens/秒,16GB 显存即可支撑高并发。最终提供可复现的部署方案、性能基准数据及硬件选型建议。
昇腾 NPU:以华为自研达芬奇架构为核心,高效张量计算适配大模型全场景;搭载 CANN 架构简化开发,支持量化与混合并行技术平衡算力与能耗。
Llama-2-7B 模型:Meta 开源 70 亿参数大模型,文本生成与推理能力优异;轻量化设计部署灵活,支持微调定制适配多业务场景。
环境初始化与资源配置
1. 激活 Notebook 环境
选择 NPU 计算类型,配置硬件规格(如 Atlas 800T NPU),分配存储资源。

2. 检查深度学习环境核心配置
确认操作系统、Python、PyTorch 及昇腾 NPU 适配库 torch_npu 的版本,保障任务运行。
# 检查系统版本
cat /etc/os-release
# 检查 python 版本
python3 --version
# 检查 PyTorch 版本
python -c "import torch; print(f'PyTorch 版本:{torch.__version__}')"
# 检查 torch_npu
python -c "import torch_npu; print(f'torch_npu 版本:{torch_npu.__version__}')"

模型部署所需依赖安装与环境准备
通过国内镜像快速安装深度学习所需的模型工具库和硬件加速配置工具:transformers、accelerate。
pip install transformers accelerate -i https://pypi.tuna.tsinghua.edu.cn/simple

Llama-2-7B 模型加载与推理测试部署
1. 编写 llama.py 文件
import torch
import torch_npu
from transformers import AutoModelForCausalLM, AutoTokenizer
import time
print("开始测试...")
MODEL_NAME = "NousResearch/Llama-2-7b-hf"
print(f"下载模型:{MODEL_NAME}")
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME, torch_dtype=torch.float16, low_cpu_mem_usage=True
)
print("加载到 NPU...")
model = model.npu()
model.eval()
print(f"显存占用:{torch.npu.memory_allocated() / 1e9:.2f} GB")
prompt = "The capital of France is"
inputs = tokenizer(prompt, return_tensors="pt")
inputs = {k: v.npu() for k, v in inputs.items()}
start = time.time()
outputs = model.generate(**inputs, max_new_tokens=50)
end = time.time()
text = tokenizer.decode(outputs[0])
print(f"\n生成文本:{text}")
print(f"耗时:{(end-start)*1000:.2f}ms")
print(f"吞吐量:{50/(end-start):.2f} tokens/s")
2. 切换 Hugging Face 下载源
export HF_ENDPOINT=https://hf-mirror.com
3. 运行脚本

Llama-2-7B 在昇腾 NPU 上的性能基准测试
前提准备:测评脚本编写
编写 Test.py 脚本进行多维度性能测试,包含预热、同步、多批次统计。
import torch
import torch_npu
import time
import json
import pandas as pd
from datetime import datetime
from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL_NAME = "NousResearch/Llama-2-7b-hf"
DEVICE = "npu:0"
WARMUP_RUNS = 5
TEST_RUNS = 10
PRECISION = "fp16"
# ... (省略部分辅助函数代码,详见完整脚本) ...
def benchmark(prompt, tokenizer, model, max_new_tokens, batch_size):
# 构造批量输入
batch_inputs = [prompt] * batch_size
inputs = tokenizer(batch_inputs, return_tensors="pt", padding=True, truncation=True, max_length=512).to(DEVICE)
# 预热
for _ in range(WARMUP_RUNS):
with torch.no_grad():
_ = model.generate(**inputs, max_new_tokens=max_new_tokens, do_sample=False, pad_token_id=tokenizer.eos_token_id)
# 正式测试
latencies = []
for i in range(TEST_RUNS):
torch.npu.synchronize()
start = time.time()
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=max_new_tokens, do_sample=False, pad_token_id=tokenizer.eos_token_id)
torch.npu.synchronize()
end = time.time()
latencies.append(end - start)
avg_latency = sum(latencies) / len(latencies)
throughput = max_new_tokens / avg_latency
total_throughput = throughput * batch_size
mem_peak = torch.npu.max_memory_allocated() / 1e9
{
: (avg_latency, ),
: (throughput, ),
: (total_throughput, ),
: (mem_peak, )
}
__name__ == :
基础能力测评
| 环境项 | 实测结果 |
|---|---|
| NPU 设备 | 昇腾 NPU (npu:0) |
| 框架版本 | PyTorch 2.1.0 + torch_npu 2.1.0.post3 |
| 模型与精度 | Llama-2-7b-hf (FP16) |
| 依赖库版本 | transformers 4.39.2 |
核心性能测评
1. 单请求多场景性能测评
覆盖短/长文本、中/英文、代码、多轮对话,单请求吞吐量稳定在 15.6~17.6 tokens/秒。
| 测评场景 | 生成长度 | 实测吞吐量 (tokens/秒) | 实测延迟 (秒) |
|---|---|---|---|
| 英文短文本生成 | 50 | 15.60 ~ 17.40 | 2.87 ~ 3.26 |
| 中文对话 | 100 | 16.01 ~ 17.61 | 5.68 ~ 6.25 |
| 代码生成 | 150 | 15.69 ~ 17.17 | 8.74 ~ 9.56 |
| 长文本叙事 | 200 | 16.42 ~ 17.08 | 11.71 ~ 12.18 |
| 多轮问答 | 100 | 16.01 ~ 16.85 | 5.93 ~ 6.25 |
2. 批量并发性能测评
模拟多用户同时请求,batch_size 从 1 增至 4 时,总吞吐量增长 3.9 倍,显存可控。
| 测评维度 (batch_size) | 生成长度 | 实测总吞吐量 (tokens/秒) | 相对单请求倍数 | 实测显存峰值 |
|---|---|---|---|---|
| batch=1 | 50 | 16.08 | 1.0 倍 | 13.71 GB |
| batch=2 | 50 | 32.39 | 2.0 倍 | 14.83 GB |
| batch=4 | 50 | 63.33 | 3.9 倍 | 16.04 GB |
3. 显存资源消耗测评
跟踪全流程显存变化,明确不同阶段的资源需求。
| 显存测评阶段 | 实测显存占用 (FP16 精度) | 资源结论 |
|---|---|---|
| 模型加载阶段 | 13.61 GB | 初始化显存需求明确 |
| 单请求推理阶段 | 13.71 ~ 14.83 GB | 增量可控 |
| 批量推理阶段 (batch=4) | 16.04 GB | 16GB 显存可支撑高并发 |
高并发线性增长极限测试
配置 NPU 算子融合、显存池等优化项,对 1~128 的 batch_size 完成测试。
| batch_size | 单请求吞吐量 (tokens/秒) | 总吞吐量 (tokens/秒) | 平均延迟 (秒) | 平均显存峰值 (GB) |
|---|---|---|---|---|
| 1 | 16.08 | 16.08 | 3.05 | 13.71 |
| 64 | 16.00 | 1024.00 | 3.10 | 17.50 |
| 128 | 15.55 | 2028.80 | 3.15 | 20.12 |
关键表现总结:从 batch=1 到 batch=128,平均延迟仅微增 3.28%,延迟标准差始终≤0.03 秒。batch=128 时总吞吐量达 2028.80 tokens/秒,是单请求的 123.9 倍,增长衰减率仅 5%。
Llama 模型在昇腾 NPU 上的性能测试报告
综合两组实测数据,Llama-2-7B 和昇腾 NPU 的适配既稳又能打:
- 性能稳定性:各场景单请求吞吐量稳定在 15.6-17.6 tokens/秒,延迟标准差≤0.22 秒。
- 批量效率:batch_size 从 1 增至 4 时,总吞吐量接近线性增长,适合高并发部署。
- 显存需求:FP16 精度下,7B 模型加载显存 13.61GB,最大推理显存 16.04GB,适配 16GB 及以上 NPU。
- 场景适配:多语言(中/英文)、多任务(文本/代码/对话)性能均衡。
性能优化方案
1. NPU 环境配置
# 启用 NPU 算子融合
export NPU_FUSION_ENABLE=1
# 关闭不必要的显存检查
export NPU_ENABLE_HBM_BOUNDS_CHECK=0
# 预分配显存池
export ASCEND_GLOBAL_MEM_POOL_SIZE=2147483648
# 优化内存分配策略
export ASCEND_CACHE_CLEAR_INTERVAL=100
2. 修改推理逻辑
补充 pad_token,开启 KV 缓存,使用 npu_optimized 缓存实现。
# 补充 pad_token
tokenizer.pad_token = tokenizer.eos_token
# 开启 KV 缓存
outputs = model.generate(
**inputs,
max_new_tokens=50,
use_cache=True,
cache_implementation="npu_optimized",
pad_token_id=tokenizer.pad_token_id
)
3. 修改 Benchmark 函数
在 benchmark 函数中同样启用 use_cache=True 和 cache_implementation="npu_optimized",并固定输出长度以减少波动。
实操问题及解决方案
1. 国内镜像源安装依赖失败
若遇到 ConnectionTimeout 或 404 错误,可切换阿里云或华为源。
pip install transformers accelerate -i https://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
2. torch_npu 版本不兼容
若导入报错,严格匹配版本安装。
pip install torch==2.1.0 torch_npu==2.1.0.post3 -i https://mirror.sjtu.edu.cn/pypi/web/simple
3. 依赖包版本冲突
指定兼容版本安装适配 Llama-2 NPU 环境。
pip install transformers==4.39.2 accelerate==0.28.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
总结
针对 Llama-2-7B 国产化部署的实际需求,昇腾 NPU 通过关键性能与资源优势提供高效支撑:16GB 显存即可覆盖模型加载到 batch=4 并发的全流程,单请求吞吐量 15.6-17.6 tokens/秒、批量总吞吐量达 63.33 tokens/秒(近线性增长),同时兼具低延迟波动、全场景适配及可复现部署方案,为国产算力下大模型落地提供稳定可靠的性能保障。
参考资料
- 昇腾官方文档:https://www.hiascend.com/document
- 昇腾开源仓库:https://gitcode.com/ascend


