最近在昇腾 NPU 上跑了下 Llama 3-8B-Instruct,用 SGLang 作为推理引擎。这里记录一下环境搭法和几个性能测试的结果。
环境搭建
用的是 Atlas 800T,CANN 8.2,Python 3.11,配 32 核 CPU 和 64GB 内存。容器里装好依赖后,第一步先检查硬件:
npu-smi info
python3 --version
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("This is a test.", return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
跑通后确认模型能正常输出。
初始化 SGLang Engine
SGLang 需要指定后端为 ascend,然后加载模型。这里的配置项不多,主要是 tp_size=1 和 dtype=float16。


