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

在昇腾 NPU 上部署 Llama 大模型实战与踩坑指南

在昇腾 NPU 上部署 Llama-2-7B 大模型的完整流程。内容包括环境准备(GitCode Notebook 配置)、依赖安装(PyTorch、transformers)、模型下载及运行脚本编写。详细解决了 torch_npu 导入错误、设备映射、权限限制等常见问题,并提供了性能测试脚本及结果分析(约 16-17 tokens/s)。最后给出了 MindSpeed-LLM、INT8 量化及批处理推理等优化建议,适合对国产 AI 芯片有需求的开发者参考。

星云发布于 2026/4/5更新于 2026/7/2459 浏览
在昇腾 NPU 上部署 Llama 大模型实战与踩坑指南

在昇腾 NPU 上部署 Llama 大模型

本文分享了在昇腾 NPU 上部署测试 Llama-2-7B 大模型的全过程,提供踩坑经验。作者选择昇腾 NPU 主要因其自主可控的达芬奇架构、完善的开源生态及云端测试资源。文中详细介绍了创建昇腾 Notebook 实例的关键配置、环境验证方法,以及安装 transformers 库、下载部署模型的步骤,记录了遇到的常见问题及解决方案。通过测试英文生成、中文对话、代码生成三种场景,得出 16-17 tokens/s 的吞吐量,并给出使用 MindSpeed-LLM 框架、INT8 量化、批处理推理等优化建议。

一、选择昇腾 NPU 的原因

  1. 自主可控:昇腾采用华为自研的达芬奇架构,供应链安全性高。
  2. 生态完善:昇腾 GitCode 仓库包含多个开源项目,支持 PyTorch、TensorFlow 适配,拥有 MindSpeed-LLM 等大模型框架。
  3. 云端测试资源:可通过 GitCode 申请免费的昇腾 Notebook 实例进行模型测试,降低硬件成本。

二、环境准备

1. 创建 Notebook 实例

进入 GitCode 控制台创建实例,关键配置如下:

  • 计算类型:必选 NPU,避免误选 CPU 或 GPU。
  • 规格:推荐 1*NPU 800T A2、32v CPU、64GB 内存。
  • 镜像:选择 euler2.9-py38-torch2.1.0-cann8.0-openmind0.6-notebook,预装关键工具。
  • 存储:50G 免费存储足够容纳约 13GB 的模型文件。
2. 环境配置

镜像已预装以下工具:

  • PyTorch 2.1.0
  • CANN 8.0
  • Python 3.8
  • torch_npu 2.1.0

三、验证环境

进入 Notebook 终端,执行以下命令检查版本:

cat /etc/os-release
python3 --version
python -c "import torch; print(f'PyTorch 版本:{torch.__version__}')"
python -c "import torch_npu; print(f'torch_npu 版本:{torch_npu.__version__}')"

验证 NPU 可用性时,需先导入插件:

import torch
import torch_npu
print(torch.npu.is_available()) # 输出:True

四、安装依赖

手动安装 transformers 库,建议使用清华镜像加速:

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

五、部署 Llama 模型

1. 模型下载

官方仓库 meta-llama/Llama-2-7b-hf 需权限且国内访问不稳定。建议使用开源镜像版本 NousResearch/Llama-2-7b-hf。 设置环境变量加速下载:

 HF_ENDPOINT=https://hf-mirror.com
export
2. 核心代码

注意设备映射方式,字典类型不能直接调用 .npu() 方法,应使用 .to('npu:0')。

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,
    low_cpu_mem_usage=True
).to(DEVICE)
model.eval()

prompt = "The capital of France is"
inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE)

start = time.time()
outputs = model.generate(**inputs, max_new_tokens=50)
end = time.time()

text = tokenizer.decode(outputs[0])
print(f"生成文本:{text}")
print(f"耗时:{(end-start)*1000:.2f}ms")
print(f"吞吐量:{50/(end-start):.2f} tokens/s")

六、性能测试

为获得准确数据,需加入预热和同步机制。以下是完整的测试脚本结构:

import torch
import torch_npu
import time
from transformers import AutoModelForCausalLM, AutoTokenizer

MODEL_NAME = "NousResearch/Llama-2-7b-hf"
DEVICE = "npu:0"
WARMUP_RUNS = 3
TEST_RUNS = 10

def load_model_and_tokenizer(model_name):
    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
    ).to(DEVICE)
    model.eval()
    print(f"显存占用:{torch.npu.memory_allocated()/1e9:.2f}GB")
    return model, tokenizer

def benchmark(prompt, tokenizer, model, max_new_tokens=100):
    inputs = tokenizer(prompt, return_tensors="pt").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.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.time()
        latency = end_time - start_time
        latencies.append(latency)
    
    avg_latency = sum(latencies) / len(latencies)
    throughput = max_new_tokens / avg_latency
    return {
        "平均延迟 (秒)": round(avg_latency, 2),
        "平均吞吐量 (tokens/秒)": round(throughput, 2),
        "显存占用 (GB)": round(torch.npu.memory_allocated()/1e9, 2)
    }

if __name__ == "__main__":
    model, tokenizer = load_model_and_tokenizer(MODEL_NAME)
    test_cases = [
        {"场景": "英文短文本生成", "输入": "The capital of France is", "生成长度": 100},
        {"场景": "中文对话", "输入": "请解释什么是人工智能:", "生成长度": 100},
        {"场景": "代码生成", "输入": "Write a Python function to calculate fibonacci:", "生成长度": 150}
    ]
    for case in test_cases:
        result = benchmark(case["输入"], tokenizer, model, case["生成长度"])
        result["场景"] = case["场景"]
        print(f"{case['场景']}:{result['平均吞吐量 (tokens/秒)']} tokens/秒")

测试结果约为 16-17 tokens/s,性能稳定。

七、常见问题与解决方案

  1. torch.npu 找不到

    • 现象:AttributeError: module 'torch' has no attribute 'npu'
    • 解决:代码开头添加 import torch_npu。
  2. tokenizer.npu() 不存在

    • 现象:字典对象无 npu() 方法
    • 解决:使用 inputs.to('npu:0')。
  3. Llama 下载需要权限

    • 现象:访问 meta-llama 被拒绝
    • 解决:使用 NousResearch/Llama-2-7b-hf 镜像版本。
  4. 网络超时

    • 现象:HuggingFace 下载中断
    • 解决:设置 HF_ENDPOINT 或使用 ModelScope 下载。

八、性能优化建议

  1. 使用 MindIE 框架:昇腾官方大模型框架,针对 NPU 深度优化。
  2. INT8 量化:减少显存占用并提升速度。
    from transformers import BitsAndBytesConfig
    quantization_config = BitsAndBytesConfig(load_in_8bit=True)
    model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, quantization_config=quantization_config)
    
  3. 批处理推理:增加 batch size 可显著提升吞吐量。

九、总结

昇腾 NPU 适合对供应链自主可控有要求的政企项目,以及预算有限但需跑大模型的团队。云上测试成本低,流程相对成熟。建议开发者优先尝试云端实例,关注 import torch_npu 和设备映射细节,合理预期性能表现。

名称网址
昇腾官网https://www.hiascend.com/
昇腾社区https://www.hiascend.com/community
昇腾官方文档https://www.hiascend.com/document
昇腾开源仓库https://gitcode.com/ascend

目录

  1. 在昇腾 NPU 上部署 Llama 大模型
  2. 一、选择昇腾 NPU 的原因
  3. 二、环境准备
  4. 1. 创建 Notebook 实例
  5. 2. 环境配置
  6. 三、验证环境
  7. 四、安装依赖
  8. 五、部署 Llama 模型
  9. 1. 模型下载
  10. 2. 核心代码
  11. 六、性能测试
  12. 七、常见问题与解决方案
  13. 八、性能优化建议
  14. 九、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 基于 Playwright 封装反爬网页爬虫及特征隐藏方案
  • Fold Craft Launcher:安卓设备 Minecraft Java 版启动器
  • Transformer 模型架构与核心原理详解
  • AI 绘画提示词工程实践:安全合规与过滤机制
  • 基于 MCP 协议集成 Codebuddy CLI 与腾讯云 Lighthouse 实战
  • 一份给安全从业者的CISP证书参考指南
  • 前端本地存储方案对比:localStorage、sessionStorage 与 cookie
  • JPA 实体继承的三种策略详解
  • VSCode 禁用 GitHub Copilot 功能设置指南
  • C++中经典的定时器库与实现方式
  • Java Web 开发基础:Spring Web MVC 核心注解详解
  • 基于 GLM4.7 的 Claude Code GitHub 代码自动审查
  • Python 使用 Folium 实现高德地图热力图可视化
  • 图的寻路算法详解:基于深度优先搜索 (DFS) 的实现
  • 前端状态管理:Recoil 原子化方案详解
  • Java 企业工程管理系统功能架构与核心模块解析
  • 构建 Agent 该选 Python 还是 Java?
  • 相干伊辛机在医疗及医疗 AI 领域的应用前景
  • Spring Boot 日志使用指南:框架、级别与配置详解
  • Python 判断变量或输入是否为数字的几种实用方法

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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