1.引言
随着大模型在各类智能应用中的广泛应用,高效的推理硬件成为关键瓶颈。昇腾 NPU(Ascend Neural Processing Unit)凭借其高算力、低能耗以及对 SGLang 的深度优化,能够显著提升大模型推理性能。本文以 Llama 3-8B-Instruct 为例,通过在昇腾 NPU 上的实测,展示其在吞吐量、延迟和资源利用方面的优势,并探索可行的优化策略,为开发者在今后的开发中提供可参考的案例。
本文采用云端开发环境进行实战,支持 Python、SGLang 及昇腾 NPU 相关依赖,无需本地复杂环境配置即可直接运行代码和进行实验。
2.实验环境与准备
2.1 实验环境准备
进入开发平台后选择对应的开发环境配置:
- 计算类型选 NPU(使用 Atlas 800T,搭配 32v CPU+64GB 内存),适合大模型推理/训练;
- 容器镜像是 ubuntu22.04+Python3.11+CANN8.2+SGLang,直接兼容昇腾 + SGLang 的开发需求;
启动环境后进入控制台,使用 npu-smi info 指令查询 NPU 的硬件信息和运行状态,确保开发环境正常。
使用 python3 --version 查看 python 版本:
使用 python3 -c "import sglang; print(f'SGLang Version: {sglang.__version__} is ready and loaded!')" 指令查看 SGLang 是否安装好。
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("meta-llama/Llama-3-8B", cache_dir=model_dir)
print("Download complete")
else:
()
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=))


