| 项目 | 内容 |
|---|---|
| 模型名称 | meta-llama/Llama-3.1-8B |
| 模型类型 | LLM (Causal Language Model) |
| 参数规模 | 8B |
| 架构 | LlamaForCausalLM |
| 注意力机制 | GQA (Grouped Query Attention) |
| 隐藏层维度 | 4096 |
| 中间层维度 | 14336 |
| 层数 | 32 |
| 词表大小 | 128256 |
| RoPE 类型 | llama3 (rope_scaling, factor=8.0) |
| 最大上下文长度 | 131072 |
| 原生数据类型 | bfloat16 |
| 适配硬件 | Huawei Ascend 910B 系列 |
| CANN 版本 | 8.5.1 |
| torch_npu 版本 | 2.9.0.post1 |
| vLLM 版本 | 0.18.0 |
| vllm-ascend 版本 | 0.18.0rc1 |
# 加载 CANN 环境
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 查看 NPU 设备
npu-smi infopip install modelscope
python -c "from modelscope import snapshot_download; snapshot_download('LLM-Research/Meta-Llama-3.1-8B', cache_dir='./')"export HF_TOKEN=your_hf_token_here
export HF_ENDPOINT=https://hf-mirror.com # 国内镜像
huggingface-cli download meta-llama/Llama-3.1-8B \
--local-dir ./Llama-3.1-8B \
--local-dir-use-symlinks False# 单条推理
python inference.py \
--model-path /path/to/Llama-3.1-8B \
--prompt "The capital of France is" \
--max-tokens 16
# 批量推理
python inference.py \
--model-path /path/to/Llama-3.1-8B \
--prompt-file prompts.txt \
--max-tokens 128 \
--output batch_result.jsonexport VLLM_TARGET_DEVICE=ascend
export PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256
vllm serve /path/to/Llama-3.1-8B \
--dtype bfloat16 \
--max-model-len 2048 \
--max-num-seqs 4 \
--port 8000然后调用 API:
curl -s http://127.0.0.1:8000/v1/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "/path/to/Llama-3.1-8B",
"prompt": "The capital of France is",
"max_tokens": 16,
"temperature": 0
}'python eval_accuracy.py \
--model-path /path/to/Llama-3.1-8B \
--prompt "The capital of France is"python eval_performance.py \
--model-path /path/to/Llama-3.1-8B \
--max-tokens 128LlamaForCausalLM 为 vLLM 原生支持架构,vllm-ascend 已完整适配所有必要算子。模型无需任何建模代码修改即可在昇腾 NPU 上运行。
模型原生为 bfloat16,Ascend910B 完整支持 bf16 推理。请勿使用 float32(NPU 不支持 fp64/fp32 全精度加速)。
单卡 910B4(32GB HBM)加载 8B bf16 模型约占用 15GB 权重 + KV Cache。建议:
--max-model-len 2048(默认 131072 会触发 OOM)--max-num-seqs 4--tensor-parallel-size 2ASCEND_RT_VISIBLE_DEVICES,让系统自动映射。设置该变量可能导致 aclInit 失败 (error 107001)。VLLM_TARGET_DEVICE=ascend 确保 vLLM 正确识别 NPU 后端。| 算子类别 | 昇腾兼容性 | 备注 |
|---|---|---|
| Linear / MatMul | ✅ 原生支持 | ACL 全连接算子 |
| RMSNorm | ✅ 原生支持 | torch 实现 + ACL 图融合 |
| RoPE (旋转位置编码) | ✅ 原生支持 | torch 实现 |
| Softmax | ✅ 原生支持 | ACL 算子 |
| FlashAttention | ✅ 已适配 | vllm-ascend ACL Graph 模式 |
| SiLU 激活函数 | ✅ 原生支持 | torch.nn.functional.silu |
| GQA (KV Cache) | ✅ 原生支持 | vLLM 标准 KV Cache 管理 |
结论: 无 CUDA-only 阻塞算子,无 Triton 阻塞算子。
"The capital of France is"temperature=0)| 指标 | 数值 |
|---|---|
| 基线 token 长度 | 22 |
| 目标 token 长度 | 22 |
| 匹配 token 数 | 22 |
| Token Match Rate | 100% |
| 误差率 | 0% |
The capital of France is a city of many faces. It is a city of history, a city ofThe capital of France is a city of many faces. It is a city of history, a city of✅ 精度验证通过:Token 匹配率 100%,误差 0%,远低于 < 1% 的达标线。
| 配置 | 新生成 token 数 | 延迟 | 吞吐 |
|---|---|---|---|
| batch=1, max_tokens=16 | 16 | ~1.5s | ~10 tok/s |
| batch=1, max_tokens=128 | 128 | ~8s | ~16 tok/s |
| 文件名 | 说明 |
|---|---|
inference.py | NPU 推理脚本(离线 LLMEngine + 在线 API 客户端) |
eval_accuracy.py | 精度验证脚本(transformers vs vLLM-Ascend 逐 token 对比) |
eval_performance.py | 性能基准测试脚本(吞吐/延迟测试) |
readme.md | 本部署文档 |
logs/ | 运行日志目录 |
accuracy_report.json | 精度验证报告(运行后生成) |
performance_report.json | 性能测试报告(运行后生成) |
提交到 AtomGit 时,请在模型卡片中标注以下标签:
tags:
- llama
- llama-3.1
- text-generation
- npu
- ascend
- huawei并在模型描述中添加:
## 昇腾 NPU 适配
本模型已验证可在昇腾 Ascend910B 系列 NPU 上通过 vLLM-Ascend 运行。
- 验证环境: CANN 8.5.1, torch_npu 2.9.0, vLLM 0.18.0
- 精度: Token 匹配率 100% (vs transformers NPU baseline)
- 性能: ~16 tok/s (batch=1, greedy decode)
标签: #NPU #Ascend #vLLM原因: ASCEND_RT_VISIBLE_DEVICES 环境变量与容器设备映射冲突。
解决: 取消设置该环境变量,让 vllm-ascend 自动检测可用 NPU。
原因: 默认 max-model-len=131072 导致 KV Cache 过大。
解决: 添加 --max-model-len 2048 --max-num-seqs 4,或启用张量并行。
排查步骤:
--load-format dummy--enforce-eager 排除图编译问题bfloat16原因: Llama-3.1-8B(非 Instruct)无内置 chat template。
解决: 使用 /v1/completions 而非 /v1/chat/completions,或换用 Instruct 版本。
如有问题,请参考: