1. 引言
随着大模型在各类智能应用中的广泛应用,高效的推理硬件成为关键瓶颈。昇腾 NPU(Ascend Neural Processing Unit)凭借其高算力、低能耗以及对 SGLang 的深度优化,能够显著提升大模型推理性能。本文以 Llama 3-8B-Instruct 为例,通过在昇腾 NPU 上的实测,展示其在吞吐量、延迟和资源利用方面的优势,并探索可行的优化策略,为开发者在今后的开发中提供可参考的案例。
2. 实验环境与准备
2.1 环境配置
为了快速验证,我们推荐使用云端开发环境或本地搭建昇腾开发栈。这里采用 Ubuntu 22.04 + Python 3.11 + CANN 8.2 + SGLang 的组合,直接兼容昇腾 + SGLang 的开发需求。
启动环境后,使用 npu-smi info 指令查询 NPU 的硬件信息和运行状态,确保开发环境没有任何问题。

检查 Python 版本:
python3 --version
确认 SGLang 安装情况:
python3 -c "import sglang; print(f'SGLang Version: {sglang.version} is ready and loaded!')"
硬件信息以及软件配置确认无误后,即可进入实操环节。
2.2 模型加载
在进行 Llama 3-8B 的推理前,需要先确保模型已在本地可用。选择 Llama 3-8B 主要基于以下考虑:其参数量适中,既能保证生成质量,又不会对硬件提出过高要求,非常适合在专用推理硬件上进行性能测试和优化。
对于 SGLang 来说,Llama 3-8B 的结构与算子类型能够充分发挥其编译器优化能力,包括算子融合、内存布局优化和流水线调度等,从而提升推理效率。昇腾 NPU 在矩阵运算、张量处理以及多核并行方面具备显著优势,能够高效执行 Llama 3-8B 的计算图,实现低延迟、高吞吐的推理性能。
首次运行时,如果本地没有模型,会自动下载并缓存;以后直接加载本地模型即可。
创建一个 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 和模型权重
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B", cache_dir=model_dir)
model = AutoModelForCausalLM.from_pretrained(, cache_dir=model_dir)
()
:
()
tokenizer = AutoTokenizer.from_pretrained(model_dir)
model = AutoModelForCausalLM.from_pretrained(
model_dir,
torch_dtype=torch.float16,
device_map=
)
inputs = tokenizer(, return_tensors=).to(model.device)
torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=)
(tokenizer.decode(outputs[], skip_special_tokens=))








