昇腾 NPU 部署 Llama-2-7B 大模型实战与性能测试
介绍在昇腾 910B NPU 平台上部署 Llama-2-7B 大模型的完整流程。涵盖环境配置、兼容性检查、模型加载及多场景推理测试。提供基于 PyTorch 和 MindSpore 的两种代码示例,并总结常见环境问题、显存不足及推理延迟等问题的解决方案。旨在为国产算力平台的大模型落地提供参考依据和可复用脚本。

介绍在昇腾 910B NPU 平台上部署 Llama-2-7B 大模型的完整流程。涵盖环境配置、兼容性检查、模型加载及多场景推理测试。提供基于 PyTorch 和 MindSpore 的两种代码示例,并总结常见环境问题、显存不足及推理延迟等问题的解决方案。旨在为国产算力平台的大模型落地提供参考依据和可复用脚本。

随着大语言模型在各类场景的落地加速,算力平台适配性已成为模型规模化应用的核心瓶颈之一。昇腾 NPU 作为国产算力的核心载体,其对主流大模型的支持能力,直接影响国产化 AI 基础设施的落地效率。
本报告聚焦 Llama-2-7B 在昇腾 910B(Atlas 800T A2 训练卡)NPU 平台的部署与性能,从环境配置、模型加载到多场景推理全流程展开实测:提供可复用的昇腾 NPU 环境配置方案,解决开发者在框架适配、模型加载中的实际问题;并通过真实数据验证昇腾 NPU 的算力表现。
验证 Llama-2-7B 大模型在昇腾 NPU(910B)算力平台的环境适配性、部署效率及多场景性能表现,为国产算力平台的大模型落地提供可复用的环境配置方案与真实数据参考。
选择支持昇腾 NPU 的 Notebook 环境并启动。
先确认环境能不能用,常用的检查命令如下:
# 看系统版本
cat /etc/os-release
# 看 Python 版本
python3 --version
# 看 PyTorch 版本
python -c "import torch; print(f'PyTorch 版本:{torch.__version__}')"
# 看昇腾 PyTorch 插件版本
python -c "import torch_npu; print(f'torch_npu 版本:{torch_npu.__version__}')"
国内下载依赖慢是老问题了,直接用清华源:
pip install transformers accelerate -i https://pypi.tuna.tsinghua.edu.cn/simple
先给个能直接跑的极简版代码,帮大家快速验证模型能不能在昇腾上跑起来:
import torch
import torch_npu
from transformers import AutoModelForCausalLM, AutoTokenizer
import time
print("开始测试昇腾 NPU 部署 Llama-2-7B...")
MODEL_NAME = "NousResearch/Llama-2-7b-hf"
print(f"正在加载模型:{MODEL_NAME}")
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
# 加载模型(用 FP16 省显存)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
torch_dtype=torch.float16,
low_cpu_mem_usage=True # 减少 CPU 内存占用
)
# 把模型移到昇腾 NPU 上
print("将模型加载到昇腾 NPU...")
model = model.npu()
model.eval()
print(f"当前显存占用:{torch.npu.memory_allocated() / 1e9:.2f} GB")
# 简单跑个测试
prompt = "法国的首都是"
inputs = tokenizer(prompt, return_tensors="pt")
# 这里要注意:逐个张量移到 NPU,避免批量转移报错
inputs = {k: v.npu() for k, v in inputs.items()}
start = time.time()
outputs = model.generate(inputs, max_new_tokens=50)
end = time.time()
print(f"\n生成结果:{tokenizer.decode(outputs[0])}")
print(f"生成耗时:{(end-start)*1000:.2f} ms")
print(f"生成速度:{50/(end-start):.2f} tokens/秒")
如果想做更全面的性能测试,以下脚本涵盖环境检测、模型加载、多场景推理,大家改改路径就能用:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""昇腾 NPU 部署 Llama-2-7B 的综合测评脚本"""
import time
import mindspore as ms
from mindspore import context
from mindformers import LlamaForCausalLM, LlamaTokenizer, GenerationConfig
# 这里改自己的模型路径就行
MODEL_PATH = "/path/to/你的 llama-7b 权重"
TOKENIZER_PATH = "/path/to/你的 llama 分词器"
DEVICE_ID = 0 # 昇腾 NPU 设备 ID
# 测试场景覆盖日常常用的类型
TEST_PROMPTS = [
"请介绍人工智能的发展历程",
"计算 1+2+3+...+100 的结果",
"用 Python 写一个快速排序的函数"
]
# 生成配置(max_new_tokens 别太大,省显存)
GEN_CONFIG = {"max_new_tokens": 200, "top_k": 50, "temperature": 0.7}
def main():
# 1. 配置昇腾环境
context.set_context(mode=context.GRAPH_MODE, device_target="Ascend", device_id=DEVICE_ID)
# 2. 加载模型和分词器(记个时,看加载速度)
start_load = time.time()
tokenizer = LlamaTokenizer.from_pretrained(TOKENIZER_PATH)
model = LlamaForCausalLM.from_pretrained(MODEL_PATH, dtype=ms.float16)
model.set_train(False)
model.set_generate_config(GenerationConfig(**GEN_CONFIG))
print(f"模型加载完成!耗时:{time.time() - start_load:.2f} 秒")
# 3. 先预热几轮(首次推理慢是正常的,预热后速度会上来)
print("开始预热(消除首次编译开销)...")
for i in range(5):
tokenizer(TEST_PROMPTS[i % ], return_tensors=)
()
total_tokens =
total_time =
prompt TEST_PROMPTS * :
inputs = tokenizer(prompt, return_tensors=)
start_infer = time.time()
outputs = model.generate(**inputs)
infer_time = time.time() - start_infer
gen_token_num = (tokenizer.encode(tokenizer.decode(outputs[]))) - (inputs.input_ids[])
total_tokens += gen_token_num
total_time += infer_time
()
__name__ == :
main()
这部分是实际运行中遇到的问题及解决方案:
| 遇到的问题 | 当时的现象 | 解决方案 |
|---|---|---|
| 框架调用不了 NPU | MindSpore/PyTorch 提示'找不到设备' | 1. 查 CANN 版本和框架版本是否匹配;2. 配 ASCEND_DEVICE_ID、LD_LIBRARY_PATH 这两个环境变量;3. 重装对应版本的 torch_npu/mindspore |
| 国内下载依赖超时/冲突 | pip 下载一半断了,或者装完提示版本不兼容 | 1. 全程用清华镜像源;2. 严格按 transformers==4.46.3、mindformers==1.9.0 这些版本装;3. 优先选稳定版别选最新版 |
| 遇到的问题 | 当时的现象 | 解决方案 |
|---|---|---|
| 模型权重下载慢/中断 | 下了半小时才 10%,或者直接报错断开 | 1. 改用 ModelScope、Hugging Face 国内镜像;2. 先在本地下好权重,再用路径加载;3. 大文件分块下 |
| 内存/显存不够用 | CPU 提示 OOM,或者 NPU 显存爆了 | 1. 加 low_cpu_mem_usage=True 参数;2. 用 FP16 精度;3. 把其他占资源的进程关了;4. 开 GQA 优化 |
| 分词器提示'pad_token 没设置' | 加载模型时直接报错 | 1. 手动指定 pad_token=eos_token;2. 重新下完整的分词器文件 |
| 遇到的问题 | 当时的现象 | 解决方案 |
|---|---|---|
| 首次推理特别慢 | 第一个请求等了 1 分钟才出结果 | 1. 服务启动时先跑 5 轮预热;2. 提前编译模型的计算图 |
| 张量转移失败 | 提示'无法将张量移到 NPU' | 1. 别批量转移张量,一个一个移;2. 检查输入格式对不对 |
| 连续跑几轮后进程崩了 | 跑 10 轮后显存一直涨,最后直接崩溃 | 1. 定期清 NPU 显存缓存;2. 限制单进程跑的轮次,别一直跑;3. 监控显存,超了就重启 |
本次报告将 Llama-2-7B 在昇腾 910B(Atlas 800T A2 训练卡)上从环境到推理的全流程拆成了实操步骤,分享了常见问题的解决办法。昇腾 NPU 跑 Llama-2-7B 已经比较成熟,按此指南基本能稳定跑起来。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online