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

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

综述由AI生成昇腾 NPU 推理性能测试聚焦于 Llama 3-8B-Instruct 模型在 SGLang 框架下的表现。通过配置 Ubuntu 环境及 CANN 8.2 驱动,完成了模型加载、引擎初始化及多种基准测试。实测数据显示,随着批量大小增加,吞吐量显著提升,单 Token 延迟保持在低位。压力测试进一步验证了在高并发及长序列场景下的稳定性。结论表明,Ascend NPU 具备强大的并行计算能力,适合大规模在线推理部署。

筑梦师发布于 2026/3/21更新于 2026/5/2014 浏览
Llama 3-8B-Instruct 在昇腾 NPU 上的 SGLang 性能实测

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

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

实验环境与准备

环境配置建议

为了进行高效的测试,建议使用 Linux 环境(如 Ubuntu 22.04),安装 Python 3.11、CANN 8.2 以及 SGLang 依赖。无需本地复杂配置时,云端开发环境也是不错的选择。

启动环境后,首先确认硬件状态:

npu-smi info

确保 NPU 运行正常且无异常占用。接着检查 Python 版本及 SGLang 是否就绪:

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

模型加载与初始化

首次运行时,若本地没有模型权重,脚本会自动下载并缓存;后续可直接加载本地文件。创建一个 load.py 文件来管理模型加载逻辑:

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

确认模型加载无误后,接下来配置 SGLang Engine。该模式支持直接在脚本中调用昇腾 NPU 执行推理。

创建 sglang_engine_setup.py 进行初始化:

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",       # 指定使用昇腾 NPU
        dtype="float16"         # FP16 精度节省显存
    )
    print("✅ Engine initialized successfully!")
except Exception as e:
    print(f"❌ 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])

性能基准测试

推理吞吐量测试

吞吐量是评估大模型推理性能的核心指标,通常关注 tokens/sec(每秒生成 token 数)和 samples/sec(每秒处理样本数)。吞吐量越高,越适合多用户并发或大批量离线生成场景。

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")

推理时延测试

时延(Latency)关注单个请求的响应速度,包括 E2E Latency(端到端)和 Per-token Latency(单 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)

# E2E Latency
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")

# Per-token Latency
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")

显存占用监控

显存是部署大模型的关键限制因素。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")

系统命令同样有效:

npu-smi info

批量吞吐与自动化测试

不同 Batch Size 下的性能表现能反映 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()

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")
    
    # warmup
    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")
    
    # warmup
    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}")

# 单 token 延迟分析
bs_test, seq_test = 4, 128
inputs = tokenizer([prompt]*bs_test, return_tensors="pt", padding=True, truncation=True).to("npu")
output = model.generate(**inputs, max_new_tokens=seq_test)
total_tokens = (output.shape[-1] - inputs["input_ids"].shape[-1]) * bs_test

start = time.time()
_ = model.generate(**inputs, max_new_tokens=seq_test)
end = time.time()

e2e_latency = end - start
per_token_latency = e2e_latency / total_tokens
print(f"\nE2E Latency for batch {bs_test}, seq {seq_test}: {e2e_latency:.3f}s")
print(f"Per-token Latency: {per_token_latency*1000:.2f} ms/token")

压力测试总结:

从结果来看,Llama 3-8B-Instruct 在 SGLang 调度下,Ascend NPU 能够在大批量、高并发和长序列生成场景中保持高吞吐和低延迟。即使在极端配置下(如 Batch 16 + Seq 256),吞吐量依然稳定,证明其完全胜任实际生产环境的部署需求。

总结

本次实测表明,Llama 3-8B-Instruct 在 Ascend NPU 上配合 SGLang 框架,展现出极高的推理效率。无论是吞吐量还是延迟控制,都在不同并发规模下表现优异,且显存占用得到有效管理。开发者可以直接基于此方案快速完成模型部署与性能调优,无需过度依赖特定云平台,重点在于环境驱动的正确配置与参数调优。

目录

  1. Llama 3-8B-Instruct 在昇腾 NPU 上的 SGLang 性能实测
  2. 实验环境与准备
  3. 环境配置建议
  4. 模型加载与初始化
  5. 设置本地模型存储路径
  6. 简单测试推理
  7. 性能基准测试
  8. 推理吞吐量测试
  9. Warmup
  10. 推理时延测试
  11. Warmup
  12. E2E Latency
  13. Per-token Latency
  14. 显存占用监控
  15. 批量吞吐与自动化测试
  16. 压力测试
  17. 单 token 延迟分析
  18. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Vue Print Designer 前端可视化打印设计器详解
  • DCT-Net 线稿上色与云端 GPU 双模型协作流程
  • GitHub Copilot 代理与网络配置指南
  • Llama 3-8B-Instruct 在昇腾 NPU 上的 SGLang 性能实测
  • Linux 下 libwebkit2gtk-4.1-0 安装与使用指南
  • Linux 系统安装 libwebkit2gtk-4.1-0 实战指南
  • 从零开始本地部署 Whisper 语音识别模型指南与避坑实践
  • Linux 权限概念与操作详解
  • 前端权限控制设计:避免硬编码权限判断
  • 后端开发者 AI Agent 入门:Astron 概念、架构与部署
  • Linux 基础 IO:深入理解软链接与硬链接
  • Neo4j 图数据库从搭建到项目使用深度详解
  • LeetCode 3637. 三段式数组 I 解法:一次循环遍历
  • C++ STL 栈与队列模拟实现及容器适配器原理
  • ForkJoinPool 基本使用及原理解读
  • Java 内存模型与多线程核心概念解析
  • 基于 LazyLLM 框架构建自动化财报分析 Agent
  • 如何快速部署 OpenAI Whisper:离线语音转文字指南
  • JavaScript 流程控制与数组基础实战
  • 基于协同过滤算法的 Flask 理财产品推荐系统

相关免费在线工具

  • 加密/解密文本

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