跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

昇腾 NPU 部署 Llama 2 模型:性能测试与优化实践

综述由AI生成记录了在华为昇腾 NPU 上部署和运行 Llama 2 大模型的完整流程。内容包括环境搭建(选择 NPU 镜像与规格)、模型下载与部署(解决网络与张量迁移问题)、性能基准测试(FP16 精度)以及优化方案(INT8 量化与批处理)。测试显示 FP16 下吞吐量约 20 tokens/s,INT8 量化后可提升至 45 tokens/s。结论表明昇腾 NPU 适合对成本敏感及追求自主可控的离线或内部工具场景。

监控大屏发布于 2026/4/5更新于 2026/5/2838 浏览
昇腾 NPU 部署 Llama 2 模型:性能测试与优化实践

在昇腾 NPU 上跑 Llama 2 模型:一次完整的性能测试与实战通关指南

引言:从'为什么选择昇腾'开始

面对动辄数万的 NVIDIA 高端 GPU,许多开发者和团队在部署大模型时都感到成本压力。华为昇腾(Ascend)NPU 凭借其自主可控的达芬奇架构、日益完善的软件开源生态以及云上可得的测试资源,构成了高性价比的部署方案。

本文记录使用云平台免费 Notebook 实例,完成从环境配置、模型部署到性能测试与优化的全过程。

一、环境搭建——好的开始是成功的一半

1.1 环境创建注意事项

在云平台创建 Notebook 实例时,几个关键配置决定了后续的成败:

  • 计算类型:务必选择 NPU!手滑选了 CPU 或 GPU,后续所有步骤都将徒劳无功。
  • 规格选择:NPU basic 规格(1*Ascend 910B, 32vCPU, 64GB 内存)是运行 Llama-2-7B 的甜点配置。
  • 镜像选择:必须选择预装了 CANN、PyTorch 适配器等核心工具的镜像,例如 euler2.9-py38-torch2.1.0-cann8.0-openmind0.6-notebook 。这能省去大量手动配置环境的时间。
1.2 环境验证:'Hello, NPU!'

实例启动后,我们首先需要确认 NPU 可用。在终端中,依次执行以下命令:

# 检查系统与 Python 版本
cat /etc/os-release
python3 --version

# 检查 PyTorch 及 torch_npu
python -c "import torch; print(f'PyTorch 版本:{torch.__version__}')"
python -c "import torch_npu; print(f'torch_npu 版本:{torch_npu.__version__}')"

# 没有的话安装,先执行
pip install --upgrade pip
pip install torch torchvision torchaudio
pip install torch-npu

看到 PyTorch 版本:2.4.0 和 torch_npu 版本:2.4.0.post4 说明正常可用。

第一个常见的'坑':直接运行 torch.npu.is_available() 会报错 AttributeError。 原因与解决方案:torch_npu 是一个独立的插件,必须显式导入后才能注册 NPU 后端。正确的验证方式是:

python -c "import torch; import torch_npu; print(torch.npu.is_available())"

看到 True ,恭喜你,NPU 环境准备就绪!

二、模型部署——从下载到运行的流程

2.1 安装依赖与模型下载

安装运行 Llama 2 所必须的库,建议使用国内镜像加速:

pip install transformers accelerate -i https://pypi.tuna.tsinghua.edu.cn/simple

第二个'坑'——模型下载权限与网络。直接访问 Meta 官方的 Llama 2 仓库需要申请权限,且国内下载速度堪忧。 解决方案:使用社区镜像版本,如 NousResearch/Llama-2-7b-hf,无需权限,下载稳定。

2.2 核心部署代码与注意事项

创建一个 Python 脚本(如 llama_demo.py),以下是核心代码及注意事项:

import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
# 国内镜像加速
import torch
import torch_npu  # 切记!
from transformers import AutoModelForCausalLM, AutoTokenizer
import time

# 配置
MODEL_NAME = "NousResearch/Llama-2-7b-hf"
DEVICE = "npu:0"

print("开始加载模型...")
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    torch_dtype=torch.float16,  # 使用 FP16 节省显存
    low_cpu_mem_usage=True
)
print("将模型移至 NPU...")
model = model.to(DEVICE)
model.eval()  # 设置为评估模式

# 第三个'坑':输入张量迁移
prompt = "The capital of France is"
# 错误写法:inputs = tokenizer(prompt, return_tensors="pt").npu() -> 报错!
# 正确写法:
inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)

# 推理
with torch.no_grad():
    start_time = time.time()
    outputs = model.generate(**inputs, max_new_tokens=50)
    end_time = time.time()
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)

print(f"生成内容:{generated_text}")
print(f"推理耗时:{end_time - start_time:.2f} 秒")

关键点总结:

  1. 在国内环境中,直接访问 HuggingFace 经常会超时,所以推荐使用国内镜像 https://hf-mirror.com
  2. import torch_npu 必须在任何 NPU 操作之前。
  3. 模型使用 model.to('npu:0') 迁移。
  4. 输入数据(字典)使用 .to('npu:0') 迁移,而非不存在的 .npu() 方法。

三、性能测试——揭开昇腾 NPU 的真实面纱

是骡子是马,拉出来遛遛。设计一个更严谨的测试脚本来评估性能。

3.1 严谨的性能测试脚本
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
import torch
import torch_npu
import time
import json
from transformers import AutoModelForCausalLM, AutoTokenizer

# 配置
MODEL_NAME = "NousResearch/Llama-2-7b-hf"
DEVICE = "npu:0"
WARMUP_RUNS = 3
TEST_RUNS = 5

def load_model():
    print("加载模型与分词器...")
    tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
    model = AutoModelForCausalLM.from_pretrained(
        MODEL_NAME,
        torch_dtype=torch.float16,
        low_cpu_mem_usage=True
    ).to(DEVICE)
    model.eval()
    return model, tokenizer

def benchmark(prompt, model, tokenizer, max_new_tokens=100):
    inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)
    # 预热
    print("预热运行...")
    for _ in range(WARMUP_RUNS):
        with torch.no_grad():
            _ = model.generate(**inputs, max_new_tokens=max_new_tokens)
    # 正式测试
    print("开始性能测试...")
    latencies = []
    for i in range(TEST_RUNS):
        torch.npu.synchronize()  # 同步,确保计时准确
        start = time.time()
        with torch.no_grad():
            _ = model.generate(**inputs, max_new_tokens=max_new_tokens)
        torch.npu.synchronize()
        end = time.time()
        latency = end - start
        latencies.append(latency)
        print(f" 第{i+1}次耗时:{latency:.2f}s")
    avg_latency = sum(latencies) / len(latencies)
    throughput = max_new_tokens / avg_latency
    return throughput, avg_latency

if __name__ == "__main__":
    model, tokenizer = load_model()
    test_cases = [
        {"场景":"英文生成","提示":"The future of artificial intelligence is","长度":100},
        {"场景":"中文问答","提示":"请用简单的话解释量子计算:","长度":100},
        {"场景":"代码生成","提示":"Write a Python function to reverse a string:","长度":150},
    ]
    print("\n" + "="*50)
    print("性能测试结果")
    print("="*50)
    for case in test_cases:
        throughput, avg_latency = benchmark(case["提示"], model, tokenizer, case["长度"])
        print(f"- {case['场景']}:")
        print(f"  平均延迟:{avg_latency:.2f}s")
        print(f"  吞吐量:{throughput:.2f} tokens/s")
    print("="*50)
3.2 测试结果与分析

在 NPU Basic 实例上,测试结果大致如下:

测试类型第 1 次耗时第 2 次耗时第 3 次耗时第 4 次耗时第 5 次耗时平均延迟吞吐量
英文生成4.87s4.88s4.78s4.96s5.22s4.94s20.24 tokens/s
中文问答4.84s4.86s5.01s4.81s4.81s4.87s20.55 tokens/s
代码生成7.14s7.19s7.32s7.37s7.16s7.24s20.73 tokens/s

结果分析:

  • 性能表现:吞吐量稳定在 20-30 tokens/秒 左右。这个速度对于离线批处理、内部工具开发和对实时性要求不高的场景是足够的,但与顶级消费级 GPU 相比仍有差距。
  • 稳定性:在整个测试过程中,昇腾 NPU 表现出了良好的稳定性,没有出现崩溃或性能波动。
  • 结论:昇腾 NPU 为运行 Llama 2 这类大模型提供了一个可行、稳定且具有高性价比(尤其考虑国产化与云上成本) 的算力选项。

四、性能优化——让 Llama 跑得更快

如果对默认性能不满意,这里有几个可以尝试的优化方向:

4.1 使用昇腾原生大模型框架

针对模型量化,昇腾平台提供了专业的优化工具链。在训练或微调环节,建议使用昇腾社区提供的 MindSpeed-LLM 框架。该框架针对昇腾硬件进行了深度优化,可高效完成大模型的训练与微调任务。

完成模型开发后,进行模型压缩与部署时,可直接使用昇腾的 Modelslim 工具进行量化。该工具能有效降低模型精度(如从 FP16/BF16 量化至 INT8),以显著提升推理速度并减少内存占用,同时力求保持模型精度。根据昇腾社区公开的基准测试数据,在典型的大模型推理场景下,经过 Modelslim 量化后的模型,相比原生 PyTorch FP16 推理,在昇腾硬件上通常可获得 1.5 倍至 3 倍 的端到端性能提升,具体加速比因模型结构和任务复杂度而异。

4.2 INT8 量化

在第三幕中,我们建立了 FP16 精度下的性能基线。现在,我们使用昇腾的 Modelslim 工具对同一个 NousResearch/Llama-2-7b-hf 模型进行 W8A8(权重与激活值均 INT8)量化。量化完成后,我们不修改任何测试代码,仅将模型路径指向新生成的量化模型,并重新执行第三幕的测试脚本。

from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_NAME,
    quantization_config=quantization_config,
    device_map="auto"
)

以下是量化后的性能测试结果,与第三幕形成直接对比:

测试类型第 1 次耗时第 2 次耗时第 3 次耗时第 4 次耗时第 5 次耗时平均延迟吞吐量相比 FP16 提升
英文生成2.21s2.18s2.25s2.32s2.19s2.23s44.84 tokens/s吞吐量提升约 1.21 倍
中文问答2.19s2.24s2.16s2.28s2.22s2.22s45.05 tokens/s吞吐量提升约 1.19 倍
代码生成3.31s3.28s3.42s3.35s3.29s3.33s45.05 tokens/s吞吐量提升约 1.17 倍
4.3 启用批处理(Batch Inference)

同时处理多个请求可以大幅提升吞吐量。

prompts = ["Prompt 1", "Prompt 2", "Prompt 3", "Prompt 4"]
inputs = tokenizer(prompts, return_tensors="pt", padding=True).to(DEVICE)
outputs = model.generate(**inputs, max_new_tokens=100)

总结与建议

经过这一番从'踩坑'到'通关'的实战,我对昇腾 NPU 的总结如下:

  • 适用场景:非常适合追求技术自主可控、预算有限、进行离线批处理或构建内部 AI 工具的团队和个人开发者。
  • 生态体验:软件栈(CANN, torch_npu)日趋成熟,开源社区提供了宝贵的资源和支持。
  • 给后来者的建议:
    1. 先从云开始:利用免费/低成本资源验证方案,再决定是否投入硬件。
    2. 仔细阅读文档:参考昇腾官方文档,特别是版本匹配问题。
    3. 拥抱社区:遇到问题时,在社区 Issue 中搜索,很可能已有解决方案。

本次部署测试证明了基于昇腾 NPU 部署和运行 Llama 2 大模型是一条完全可行的技术路径。虽然绝对性能并非顶尖,但其在成本、自主可控和稳定性方面的优势,使其在 AI 算力多元化的今天,成为一个不容忽视的选择。

目录

  1. 在昇腾 NPU 上跑 Llama 2 模型:一次完整的性能测试与实战通关指南
  2. 引言:从“为什么选择昇腾”开始
  3. 一、环境搭建——好的开始是成功的一半
  4. 1.1 环境创建注意事项
  5. 1.2 环境验证:“Hello, NPU!”
  6. 检查系统与 Python 版本
  7. 检查 PyTorch 及 torch_npu
  8. 没有的话安装,先执行
  9. 二、模型部署——从下载到运行的流程
  10. 2.1 安装依赖与模型下载
  11. 2.2 核心部署代码与注意事项
  12. 国内镜像加速
  13. 配置
  14. 第三个“坑”:输入张量迁移
  15. 错误写法:inputs = tokenizer(prompt, return_tensors="pt").npu() -> 报错!
  16. 正确写法:
  17. 推理
  18. 三、性能测试——揭开昇腾 NPU 的真实面纱
  19. 3.1 严谨的性能测试脚本
  20. 配置
  21. 3.2 测试结果与分析
  22. 四、性能优化——让 Llama 跑得更快
  23. 4.1 使用昇腾原生大模型框架
  24. 4.2 INT8 量化
  25. 4.3 启用批处理(Batch Inference)
  26. 总结与建议
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Webpack Loader 一览表
  • Stable Diffusion 修复 Midjourney 生成图片的手部与面部瑕疵
  • OpenCvSharp 无人机图像处理实战:从特征匹配到全景拼接
  • VS Code + GitHub Copilot 避坑指南:从安装配置到最佳实践
  • Mac 本地 AI 绘画:Mochi Diffusion 安装与使用指南
  • GitHub Copilot Agent Skills:构建跨项目 AI 专属工具箱
  • MCP AI Copilot 认证指南与核心知识解析
  • SpringBoot 源码解析:AnnotationConfigServletWebServerApplicationContext 构造方法
  • JavaSE 反射与动态代理
  • AI 大模型开发转行指南:学习路径与求职建议
  • 大模型 API 对接指南:OpenAI、Claude 与 LLaMA 3 调用技巧
  • xsimd:C++ SIMD 加速入门指南
  • 2026 年高校 AIGC 检测新规:AI 率合格标准详解
  • 鸿蒙 ArkWeb 混合开发:加载机制与 Cookie 管理
  • OpenClaw 智能体框架环境搭建与 WebUI 远程访问配置
  • Python 基础:容器公共操作与推导式详解
  • 数据结构:双向链表概念与实现
  • 机器学习核心算法实战笔记:从 KNN 到集成学习
  • Transformer 入门教程:原理、架构与实战详解
  • AI Coding 详解:定义、核心能力与实际价值

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online