weixin_43499674/llama-3.1-8b-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

meta-llama/Llama-3.1-8B 昇腾 NPU 适配部署文档


模型信息

项目内容
模型名称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

硬件/软件环境要求

硬件

  • NPU: Ascend910B 系列(推荐 910B4,HBM >= 32GB)
  • CPU: aarch64 / x86_64
  • 内存: >= 32GB(用于权重加载和 KV Cache)

软件

  • OS: openEuler / Ubuntu / KylinOS
  • CANN: >= 8.0(推荐 8.2+)
  • Python: 3.8 - 3.11
  • PyTorch: 与 CANN 版本匹配
  • torch_npu: 与 PyTorch 版本一致
  • vLLM: >= 0.18.0
  • vllm-ascend: 与 vLLM 版本匹配

快速开始

1. 环境准备

# 加载 CANN 环境
source /usr/local/Ascend/ascend-toolkit/set_env.sh

# 查看 NPU 设备
npu-smi info

2. 获取模型权重

方式 A: ModelScope(推荐,国内免授权)

pip install modelscope
python -c "from modelscope import snapshot_download; snapshot_download('LLM-Research/Meta-Llama-3.1-8B', cache_dir='./')"

方式 B: HuggingFace(需授权)

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

3. 运行推理

方式一:离线推理(使用 inference.py)

# 单条推理
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.json

方式二:启动在线服务

export 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
  }'

4. 运行精度验证

python eval_accuracy.py \
  --model-path /path/to/Llama-3.1-8B \
  --prompt "The capital of France is"

5. 运行性能基准测试

python eval_performance.py \
  --model-path /path/to/Llama-3.1-8B \
  --max-tokens 128

NPU 适配要点

1. 无需代码修改

LlamaForCausalLM 为 vLLM 原生支持架构,vllm-ascend 已完整适配所有必要算子。模型无需任何建模代码修改即可在昇腾 NPU 上运行。

2. 数据类型

模型原生为 bfloat16,Ascend910B 完整支持 bf16 推理。请勿使用 float32(NPU 不支持 fp64/fp32 全精度加速)。

3. 内存管理

单卡 910B4(32GB HBM)加载 8B bf16 模型约占用 15GB 权重 + KV Cache。建议:

  • --max-model-len 2048(默认 131072 会触发 OOM)
  • --max-num-seqs 4
  • 如需更大上下文,启用张量并行 --tensor-parallel-size 2

4. 环境变量注意事项

  • 不要设置 ASCEND_RT_VISIBLE_DEVICES,让系统自动映射。设置该变量可能导致 aclInit 失败 (error 107001)。
  • 设置 VLLM_TARGET_DEVICE=ascend 确保 vLLM 正确识别 NPU 后端。

5. 算子兼容性

算子类别昇腾兼容性备注
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 阻塞算子。


精度验证结果

验证方法

  • 基线: transformers (NPU bfloat16)
  • 目标: vLLM-Ascend (NPU bfloat16)
  • 方式: 同精度对比,逐 token 匹配
  • 输入: "The capital of France is"
  • 解码: greedy (temperature=0)

生成 Token 匹配

指标数值
基线 token 长度22
目标 token 长度22
匹配 token 数22
Token Match Rate100%
误差率0%

生成文本对比

  • transformers (NPU bf16): The capital of France is a city of many faces. It is a city of history, a city of
  • vLLM-Ascend (NPU bf16): The 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=1616~1.5s~10 tok/s
batch=1, max_tokens=128128~8s~16 tok/s
  • 测试设备: Ascend910B4 (32GB HBM)
  • 数据类型: bfloat16
  • 推理模式: greedy decode
  • 服务启动: ~135s(含权重加载 14s + ACL Graph 编译)

文件清单

文件名说明
inference.pyNPU 推理脚本(离线 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

故障排查

1. 启动失败: "aclInit error 107001, Invalid device ID"

原因: ASCEND_RT_VISIBLE_DEVICES 环境变量与容器设备映射冲突。 解决: 取消设置该环境变量,让 vllm-ascend 自动检测可用 NPU。

2. OOM (NPU out of memory)

原因: 默认 max-model-len=131072 导致 KV Cache 过大。 解决: 添加 --max-model-len 2048 --max-num-seqs 4,或启用张量并行。

3. 推理输出异常(重复 token / 乱码)

排查步骤:

  1. 确认使用的是真实权重,而非 --load-format dummy
  2. 检查 tokenizer 文件是否完整
  3. 尝试添加 --enforce-eager 排除图编译问题
  4. 确认 dtype 为 bfloat16

4. Chat Completion 返回 400

原因: Llama-3.1-8B(非 Instruct)无内置 chat template。 解决: 使用 /v1/completions 而非 /v1/chat/completions,或换用 Instruct 版本。


联系方式

如有问题,请参考:

  • 昇腾 NPU 迁移指南
  • torch_npu 文档
  • vllm-ascend GitHub