昇腾 NPU 运行 Llama 模型:环境搭建与性能测试
在昇腾 NPU 上运行 Llama 等大语言模型的完整流程。内容包括环境搭建(NPU 实例配置、PyTorch 与 torch_npu 验证、依赖安装)、模型部署实战(模型加载、推理测试代码)、多场景性能基准测试(短文本、长文本、代码生成)以及常见问题解决方案。测试结果显示,昇腾 NPU 在显存占用和生成速度方面表现稳定,适合企业级应用及科研场景。文章提供了详细的代码示例和环境配置建议,帮助开发者快速上手。

在昇腾 NPU 上运行 Llama 等大语言模型的完整流程。内容包括环境搭建(NPU 实例配置、PyTorch 与 torch_npu 验证、依赖安装)、模型部署实战(模型加载、推理测试代码)、多场景性能基准测试(短文本、长文本、代码生成)以及常见问题解决方案。测试结果显示,昇腾 NPU 在显存占用和生成速度方面表现稳定,适合企业级应用及科研场景。文章提供了详细的代码示例和环境配置建议,帮助开发者快速上手。

近年来,AI 大模型发展迅速,Llama 等开源模型成为技术热点。这些模型对硬件要求较高,华为昇腾 NPU 凭借强大的算力和良好的功耗控制,适合用于大模型推理。
选择 Llama 进行测试的原因包括:完全开源、规模选择多(如 7B、13B)、性能表现亮眼、应用场景广泛。昇腾 NPU 通过 MindSpore 框架及算子优化,在内存管理和推理效率上表现良好。
由于昇腾 NPU 硬件资源相对稀缺,建议使用云资源进行实验。推荐配置如下:
启动云环境中的 Notebook 实例,选择 NPU 资源配置(如 NPU basic • 1 * NPU 910B)。确保容器镜像包含必要的深度学习框架和 CANN 驱动。
在终端执行以下命令验证环境:
# 检查 PyTorch 版本
import torch
print(f'PyTorch 版本:{torch.__version__}')
# 检查 torch_npu 版本
import torch_npu
print(f'torch_npu 版本:{torch_npu.__version__}')
# 验证 NPU 可用性
import torch
import torch_npu
print(torch.npu.is_available())
预期输出显示 PyTorch 版本为 2.1.0,torch_npu 版本正常,且 torch.npu.is_available() 返回 True。
# 安装 Hugging Face 相关库
pip install transformers accelerate -i https://pypi.tuna.tsinghua.edu.cn/simple
# 如果遇到依赖冲突,卸载冲突库
pip uninstall mindformers
使用国内镜像源可显著提高下载速度。
本次测评选择 Llama-2-7b 或类似模型作为测试对象。若遇到无法连接 Hugging Face Hub 的问题,可配置镜像源:
export HF_ENDPOINT=https://hf-mirror.com
代码示例:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import torch
import torch_npu
from transformers import AutoModelForCausalLM, AutoTokenizer
import time
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.to('npu:0')
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.to('npu:0') 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")
注意:若系统线程资源不足,可设置环境变量限制线程数:
export OMP_NUM_THREADS=4
简化后的推理脚本结构如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import torch
import torch_npu
import time
import os
from transformers import AutoModelForCausalLM, AutoTokenizer
def main():
print("开始昇腾 NPU 基础推理测试...")
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
os.environ['HF_HUB_DISABLE_TELEMETRY'] = '1'
if not torch.npu.is_available():
print("NPU 不可用,请检查 NPU 配置")
return
try:
model_name = "microsoft/DialoGPT-small"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
low_cpu_mem_usage=True
)
device = "npu:0"
model = model.to(device)
model.eval()
print("模型已迁移到 NPU")
except Exception as e:
print(f"模型加载失败:{e}")
return
prompt = "The capital of France is"
inputs = tokenizer(prompt, return_tensors="pt").to(device)
start_time = time.time()
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=20, do_sample=True, temperature=0.7, pad_token_id=tokenizer.eos_token_id)
end_time = time.time()
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=)
generation_time = end_time - start_time
tokens_generated = (outputs[]) - (inputs[][])
()
()
()
__name__ == :
main()
设计了三个代表性测试场景:短文本生成、长文本生成、批处理测试。
测试日常对话和简单问答场景下的响应速度。代码逻辑参考基础推理测试,循环多个 Prompt 并记录平均速度。
模拟文档写作场景,测试模型在处理复杂任务时的稳定性。设置 max_new_tokens=100,观察生成内容的连贯性。
模拟辅助编程场景,测试 Python、JavaScript 等代码生成质量。设置较低温度 (temperature=0.3) 以确保代码准确性。
基于以上测试,得到以下性能基准数据:
| 测试场景 | 平均生成速度 | 显存占用 | 总耗时 | 总生成 token |
|---|---|---|---|---|
| 短文本生成 | 26.02 tokens/s | 0.27 GB | 1.73 秒 | 45 |
| 长文本生成 | 8.51 tokens/s | 0.27 GB | 1.29 秒 | 11 |
| 代码生成 | 4.19 tokens/s | 0.27 GB | 0.96 秒 | 4 |
从测试结果来看,昇腾 NPU 在不同负载下均能保持稳定的显存占用和合理的生成速度。
构建基于模型的问答应用,输入问题并获取回答。重点测试多轮对话的上下文理解能力及响应延迟。
利用模型的高温度参数 (temperature=0.9) 激发创造性内容,适用于故事创作、诗歌生成等场景。
torch.npu找不到
import torch 再 import torch_npu。tokenizer.npu()方法不存在
.to('npu:0') 转移张量。NousResearch/Llama-2-7b-hf。mindformers,重新安装 transformers 和 accelerate。torch.float16),清理显存 torch.npu.empty_cache()。do_sample=False),减少 beam search 开销。通过本次测评,昇腾 NPU 能够支持 Llama 等大型语言模型的部署和运行。在大多数应用场景下性能表现良好,系统运行稳定,开发环境配置相对简单。昇腾 NPU 在企业级应用、教育科研及国产化替代场景中具有广阔前景。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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