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

Llama 3-8B-Instruct 在昇腾 NPU 上的 SGLang 性能实测

测试了 Llama 3-8B-Instruct 模型在昇腾 NPU 配合 SGLang 框架下的推理性能。通过吞吐量、延迟及显存占用等多维度基准测试,验证了该组合在高并发与长序列场景下的稳定性。结果显示,随着批量大小增加,吞吐量显著提升,单 Token 延迟保持在较低水平,适合大规模部署。

怪力乱神发布于 2026/3/22更新于 2026/9/1051 浏览
Llama 3-8B-Instruct 在昇腾 NPU 上的 SGLang 性能实测

引言

随着大模型应用日益普及,推理硬件的效率成为关键瓶颈。昇腾 NPU(Ascend Neural Processing Unit)凭借高算力与低能耗特性,配合 SGLang 的深度优化,能显著提升大模型推理表现。本文以 Llama 3-8B-Instruct 为例,通过实际测试展示其在吞吐量、延迟和资源利用方面的优势,并探讨可行的优化策略。

实验环境与准备

环境配置

搭建开发环境时,建议选用支持 Python 及昇腾依赖的云端或本地容器。核心配置如下:

  • 计算类型:NPU(推荐 Atlas 800T,搭配 32v CPU + 64GB 内存),适合大模型推理与训练。
  • 系统镜像:Ubuntu 22.04 + Python 3.11 + CANN 8.2 + SGLang,确保兼容昇腾与 SGLang 的开发需求。

启动后,首先检查硬件状态与软件版本是否匹配:

# 查询 NPU 硬件信息
npu-smi info

# 确认 Python 版本
python3 --version

# 验证 SGLang 安装
python3 -c "import sglang; print(f'SGLang Version: {sglang.__version__} is ready and loaded!')"

若上述命令无报错,说明基础环境已就绪。

模型加载

Llama 3-8B 参数量适中,既能保证生成质量,又不会给硬件带来过高压力,是测试专用推理硬件的理想选择。SGLang 的编译器优化能力(如算子融合、内存布局优化)在此类模型上能发挥显著效果。

首次运行会自动下载并缓存模型,后续可直接加载本地文件。以下脚本用于处理模型下载与初步测试:

import os
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

home_dir = os.path.expanduser("~")
model_dir = os.path.join(home_dir, "models/Llama-3-8B")

if not os.path.exists(model_dir):
    print(f"Downloading model to {model_dir}...")
    tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B", cache_dir=model_dir)
    model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B", cache_dir=model_dir)
    print("Download complete")
else:
    print("Local model detected, loading...")
    tokenizer = AutoTokenizer.from_pretrained(model_dir)
    model = AutoModelForCausalLM.from_pretrained(
        model_dir, 
        torch_dtype=torch.float16, 
        device_map="auto"
    )

inputs = tokenizer(, return_tensors=).to(model.device)
 torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=)
(tokenizer.decode(outputs[], skip_special_tokens=))
"This is a test."
"pt"
with
50
print
0
True

SGLang Engine 初始化

为了在 Notebook 或脚本中直接调用昇腾 NPU 执行推理,需配置 SGLang Engine。这里指定 backend="ascend" 以启用昇腾后端。

import os
import sglang as sgl

os.environ['MAX_JOBS'] = '1'
os.environ['SGLANG_TARGET_BACKEND'] = 'ascend'
MODEL_PATH = os.path.expanduser("~/models/Llama-3-8B")

print("Initializing SGLang Engine (Backend: Ascend)...")
try:
    engine = sgl.Engine(
        model_path=MODEL_PATH,
        tp_size=1,
        trust_remote_code=True,
        backend="ascend",
        dtype="float16"
    )
    print("✅ Engine initialized successfully! NPU memory allocated.")
except Exception as e:
    print(f"❌ Engine initialization failed: {e}")
    raise

封装一个通用的推理函数,便于后续批量测试:

BATCH_SIZE = 4
MAX_NEW_TOKENS = 50

def run_inference(prompts):
    outputs = []
    for prompt in prompts:
        out = engine.generate(prompt, max_new_tokens=MAX_NEW_TOKENS)
        outputs.append(out)
    return outputs

test_prompts = ["Hello world!"] * BATCH_SIZE
sample_output = run_inference(test_prompts)
print("Sample output:", sample_output[0])

性能基准测试

推理吞吐量

吞吐量是衡量单位时间内处理 token 数量的关键指标,直接影响多用户并发场景的体验。

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

model_name = "/path/to/your/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    torch_dtype=torch.float16, 
    device_map="npu"
)
model.eval()

prompt = "Describe the architecture of Ascend NPU."
inputs = tokenizer(prompt, return_tensors="pt").to("npu")

# Warmup
for _ in range(5):
    model.generate(**inputs, max_new_tokens=32)

num_iters = 20
total_tokens = 0
start = time.time()

for _ in range(num_iters):
    out = model.generate(**inputs, max_new_tokens=128)
    gen_tokens = out.shape[-1] - inputs["input_ids"].shape[-1]
    total_tokens += gen_tokens

end = time.time()
throughput = total_tokens / (end - start)
print(f"Throughput: {throughput:.2f} tokens/sec")

实测数据显示,Llama 3-8B 在 Ascend NPU 上具备极高的吞吐量,非常适合大批量离线生成任务。

推理时延

时延关注单个请求的响应速度,分为端到端(E2E)和单 Token 解码时间。

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

model_name = "/path/to/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    torch_dtype=torch.float16, 
    device_map="npu"
)
model.eval()

inputs = tokenizer("Hello, explain NPU.", return_tensors="pt").to("npu")

# Warmup
for _ in range(5):
    model.generate(**inputs, max_new_tokens=16)

start = time.time()
output = model.generate(**inputs, max_new_tokens=64)
end = time.time()

latency_ms = (end - start) * 1000
print(f"E2E Latency: {latency_ms:.2f} ms")

input_len = inputs["input_ids"].shape[-1]
output_len = output.shape[-1]
gen_token_count = output_len - input_len
print(f"Per-Token Latency: {latency_ms/gen_token_count:.2f} ms/token")

结果表明,模型端到端响应时间短,单 Token 生成耗时低,说明 Ascend NPU 能有效支持在线推理场景。

显存占用

显存是部署大模型的硬约束。Ascend 提供 npu-smi 实时查看 HBM 使用情况,PyTorch 层面也可统计。

import torch_npu

allocated = torch_npu.memory.npu_memory_reserved()
cached = torch_npu.memory.npu_memory_allocated()
print(f"Reserved HBM: {allocated/1024/1024:.2f} MB")
print(f"Allocated HBM: {cached/1024/1024:.2f} MB")

import subprocess
out = subprocess.check_output("npu-smi info", shell=True)
print(out.decode())

批量性能分析

不同 Batch Size 下的吞吐与延迟变化,能反映 NPU 并行利用率及 SGLang 调度效果。

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

model_name = "/path/to/your/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    torch_dtype=torch.float16, 
    device_map="npu"
)
model.eval()

def measure(bs=1, seq=128):
    text = "Ascend NPU performance test. " * (seq // 10)
    inputs = tokenizer([text] * bs, return_tensors="pt", padding=True, truncation=True).to("npu")
    
    for _ in range(3):
        model.generate(**inputs, max_new_tokens=32)
    
    start = time.time()
    out = model.generate(**inputs, max_new_tokens=seq)
    end = time.time()
    
    input_len = inputs["input_ids"].shape[-1]
    output_len = out.shape[-1]
    gen_tokens = (output_len - input_len) * bs
    latency = end - start
    throughput = gen_tokens / latency
    return latency, throughput, gen_tokens

print("batch_size, seq_len, latency(s), throughput(tokens/s)")
for bs in [1, 2, 4, 8, 16]:
    lat, th, tk = measure(bs=bs, seq=128)
    print(f"{bs}, 128, {lat:.3f}, {th:.2f}")
批量大小序列长度延迟 (秒)吞吐量 (tokens/秒)说明
11281.024125小批量下性能较低
21280.554462.5批量提升后开始优化
41280.2881775性能明显提升
81280.1476950延迟降低,吞吐量增长
161280.07427500资源利用率最大化

随着 batch size 增大,总吞吐量显著提升,单 Token 平均延迟下降,体现了 Ascend NPU 在并发推理中的强大能力。

压力测试

为了全面评估稳定性,我们进行了多维度的压力测试,涵盖长序列生成与高并发场景。

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

model_name = "/path/to/your/model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    torch_dtype=torch.float16, 
    device_map="npu"
)
model.eval()

batch_sizes = [1, 2, 4, 8, 16]
seq_lengths = [64, 128, 256]
num_iters = 10
prompt = "Describe the architecture and optimization of Ascend NPU."

def stress_test(batch_size, seq_len):
    texts = [prompt] * batch_size
    inputs = tokenizer(texts, return_tensors="pt", padding=True, truncation=True).to("npu")
    
    for _ in range(3):
        model.generate(**inputs, max_new_tokens=32)
    
    total_tokens = 0
    total_latency = 0.0
    
    for _ in range(num_iters):
        start = time.time()
        output = model.generate(**inputs, max_new_tokens=seq_len)
        end = time.time()
        
        gen_tokens = (output.shape[-1] - inputs["input_ids"].shape[-1]) * batch_size
        total_tokens += gen_tokens
        total_latency += (end - start)
    
    avg_latency = total_latency / num_iters
    avg_throughput = total_tokens / total_latency
    return avg_latency, avg_throughput

print("Batch, SeqLen, AvgLatency(s), AvgThroughput(tokens/s)")
for seq_len in seq_lengths:
    for bs in batch_sizes:
        avg_lat, avg_th = stress_test(bs, seq_len)
        print(f"{bs}, {seq_len}, {avg_lat:.3f}, {avg_th:.2f}")

测试结果汇总:

批量大小序列长度平均延迟 (秒)平均吞吐量 (tokens/秒)
1640.0381704.22
16640.6151665.44
11280.0761675.37
161281.2211676.65
12560.1571631.56
162562.4251688.87

从数据来看,Llama 3-8B-Instruct 在 SGLang 调度下,Ascend NPU 能在大批量、高并发和长序列场景中保持高吞吐与低延迟,稳定性良好。

总结

本次实测表明,Llama 3-8B-Instruct 在 Ascend NPU 配合 SGLang 框架运行时,展现出优异的性能特征。无论是在高并发还是长序列生成场景下,该组合均能维持稳定的吞吐量与较低的延迟,且显存占用可控。对于开发者而言,这种环境配置能够快速完成模型加载、推理与性能调优,值得在实际项目中参考使用。

目录

  1. 引言
  2. 实验环境与准备
  3. 环境配置
  4. 查询 NPU 硬件信息
  5. 确认 Python 版本
  6. 验证 SGLang 安装
  7. 模型加载
  8. SGLang Engine 初始化
  9. 性能基准测试
  10. 推理吞吐量
  11. Warmup
  12. 推理时延
  13. Warmup
  14. 显存占用
  15. 批量性能分析
  16. 压力测试
  17. 总结

更多推荐文章

查看全部
  • Linux 网络基础概念与协议模型详解
  • Open Claw 框架技术剖析:AI Agent 执行层架构详解
  • Web Scraper 快速上手:网页数据批量采集指南
  • HTML+CSS 实现边框流动特效实战详解
  • Figma + Claude + Weavy AI:构建 AI 辅助设计工作流
  • Linux 上通过 Docker 快速部署 Dify
  • AI 绘画创意边界:如何将热门梗图转化为安全可售的原创资产
  • Mac 安装 Navicat Premium v17.1.9 指南
  • CARLA 仿真:自定义地图与 AI 车辆行为编程
  • AI Agent 核心概念与架构深度解析
  • Claude Code 核心记忆文件 CLAUDE.md 实战操作详解
  • Ubuntu 24.04 安装向日葵远程桌面客户端
  • Ethernet/IP 转 DeviceNet 网关在 AB PLC 与机器人通讯中的实践
  • OpenClaw 龙虾机器人 Windows 系统部署指南
  • Python Selenium 浏览器自动化入门与实战指南
  • Pi0 机器人大模型在昇腾 A2 上的部署与测评
  • OpenClaw 结合 Qwen3.5 实现本地 AI 助手部署指南
  • Python 装饰器核心原理解析
  • 基于 RocketMQ 实现分布式事务最终一致性
  • Java 语言入门:设计哲学与 JVM 基础

相关免费在线工具

  • 加密/解密文本

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