引言
随着大模型在各类智能应用中的广泛应用,高效的推理硬件成为关键瓶颈。昇腾 NPU(Ascend Neural Processing Unit)凭借其高算力、低能耗以及对 SGLang 的深度优化,能够显著提升大模型推理性能。本文以 Llama 3-8B-Instruct 为例,通过在昇腾 NPU 上的实测,展示其在吞吐量、延迟和资源利用方面的优势,并探索可行的优化策略,为开发者在今后的开发中提供可参考的案例。
实验环境与准备
环境配置
我们采用支持昇腾 NPU 的开发环境进行实战。选择 Atlas 800T 计算类型,搭配 32v CPU+64GB 内存,适合大模型推理 / 训练。容器镜像需包含 ubuntu22.04、Python3.11、CANN8.2 及 SGLang,直接兼容昇腾 + SGLang 的开发需求。
启动后,使用 npu-smi info 指令查询 NPU 的硬件信息和运行状态,确保开发环境正常。同时检查 Python 版本及 SGLang 安装情况:
python3 --version
python3 -c "import sglang; print(f'SGLang Version: {sglang.version} is ready and loaded!')"
模型加载
在进行 Llama 3-8B 的推理前,需要先确保模型已在本地可用。选择 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 = 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=).to(model.device)
torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=)
(tokenizer.decode(outputs[], skip_special_tokens=))


