TCFY7/SmolLM-135M-GQA-d_kv_128
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

SmolLM-135M-GQA-d_kv_128 on vLLM-Ascend 0.18.0

1. 简介

本文档记录了 SmolLM-135M-GQA-d_kv_128 在 vLLM-Ascend 0.18.0 环境上的昇腾 NPU 适配与验证结果。

模型概述:

  • 参数量:135M
  • 架构:LlamaForCausalLM(标准 LLaMA 架构 + GQA)
  • 权重来源:OpenMOSS/SmolLM-135M-GQA-d_kv_128 / openmoss/SmolLM-135M-GQA-d_kv_128 on ModelScope
  • 论文:Towards Economical Inference: Enabling DeepSeek's MLA in LLaMA
  • 硬件平台:Ascend NPU(Atlas 800 A2)

适配结论: 该模型为 LLaMA 标准架构,vLLM-Ascend 无需任何代码修改即可 零成本原生支持。

2. 模型架构

配置项数值
hidden_size576
intermediate_size1536
num_attention_heads9
num_key_value_heads3(GQA,压缩比 3:1)
head_dim64
num_hidden_layers30
max_position_embeddings2048
vocab_size49152
RoPE theta10000.0
激活函数SiLU(SwiGLU)
归一化RMSNorm (eps=1e-5)
tie_word_embeddingsTrue
权重大小256 MB (BF16)

架构特点:

  • GQA(Grouped Query Attention):9 个 Q 头、3 个 KV 头,减少 KV Cache 占用
  • 小模型 + 大 vocab:135M 参数、49152 词表,适合快速验证 MLA 变体推理
  • 标准 RoPE 位置编码,无特殊 MTP 结构

3. 适配说明

3.1 环境信息

组件版本
vLLM0.18.0
vLLM-Ascend0.18.0rc1
Python3.11.14
PyTorch2.6.0
torch_npu2.6.0.post3
CANN8.5.1
transformers4.57.6
操作系统Ubuntu 22.04 / Linux aarch64
NPU 设备Ascend NPU (Atlas 800 A2)

3.2 部署方式

# 1. 从 ModelScope 下载模型权重
python3 -c "
from modelscope import snapshot_download
snapshot_download('openmoss/SmolLM-135M-GQA-d_kv_128')
"

# 2. vLLM 启动(单卡 eager 模式调试)
MODEL_DIR="/root/.cache/modelscope/hub/models/openmoss/SmolLM-135M-GQA-d_kv_128"

python3 -c "
from vllm import LLM, SamplingParams

llm = LLM(
    model='$MODEL_DIR',
    dtype='bfloat16',
    max_model_len=2048,
    enforce_eager=True,
    gpu_memory_utilization=0.9,
)

outputs = llm.generate(
    ['Which American-born Sinclair won the Nobel Prize for Literature in 1930?'],
    SamplingParams(temperature=0.0, max_tokens=128)
)
print(outputs[0].outputs[0].text)
# Expected: 'Sinclair Lewis'
"

# 3. 性能模式启动(ACL Graph 编译)
python3 -c "
from vllm import LLM, SamplingParams

llm = LLM(
    model='$MODEL_DIR',
    dtype='bfloat16',
    max_model_len=2048,
    enforce_eager=False,  # 启用 PIECEWISE ACL Graph 编译
    gpu_memory_utilization=0.9,
)
"

3.3 模型权重路径

# HuggingFace
model_id = "OpenMOSS/SmolLM-135M-GQA-d_kv_128"

# ModelScope
model_id = "openmoss/SmolLM-135M-GQA-d_kv_128"

# 本地权重路径(下载后)
local_path = "/path/to/.cache/modelscope/hub/models/openmoss/SmolLM-135M-GQA-d_kv_128"

4. 精度评测

4.1 评测方法

以 HuggingFace CPU 推理(AutoModelForCausalLM + torch.bfloat16)为基线,对比 vLLM-Ascend NPU 输出,使用以下指标衡量精度差异:

指标说明
Top-1 Token 一致率在相同输入下,CPU 与 NPU 选择的首个 token 是否一致
Logprob 皮尔逊相关系数CPU 与 NPU 各步 logprob 的线性相关性
Logprob 平均绝对误差 (MAE)匹配 token 的 logprob 差异绝对值均值
概率空间平均相对误差|P_npu - P_cpu| / P_cpu × 100%,衡量概率值偏差
序列完全匹配率完整输出序列是否完全一致(greedy 采样)
Token 级逐位匹配率生成序列中逐 token 的匹配比例

4.2 测试数据集

使用 6 个覆盖不同主题的英文 prompt,每个生成 20 个 token:

#Prompt
1The capital of France is
2Which American-born Sinclair won the Nobel Prize for Literature in 1930?
3What is the meaning of life?
4Write a short poem about
5Quantum computing is
6The Pythagorean theorem states

4.3 评测结果

(1) 首步(First-step)Token 精度

PromptCPU LogprobNPU LogprobLogprob DiffCPU 概率NPU 概率相对误差
The capital of France is-0.6580-0.66690.00890.51790.51330.88%
Which American-born Sinclair...-0.1598-0.16690.00710.85230.84630.70%
What is the meaning of life?-0.5696-0.53530.03430.56580.58553.49%
Write a short poem about-1.7849-1.81490.03000.16780.16282.96%
Quantum computing is-0.8602-0.88120.02100.42310.41432.08%
The Pythagorean theorem states-0.1556-0.15850.00290.85590.85350.29%
均值——0.0173——1.73%

首步 Top-1 Token 一致率:100%(6/6 全部匹配,CPU 与 NPU 选择了完全相同的 token)

(2) 完整序列精度

#CPU 输出NPU 输出匹配?
1Paris.Paris.✅
2Sinclair LewisSinclair Lewis✅
3The meaning of life is to find your purpose and liveThe meaning of life is to find your purpose and live✅
4A poem about the seaA poem about the sea✅
5a way of computing that uses quantum mechanics tothe study of quantum mechanics and its❌
6the relationship between the sides of a righta² + b² = c²❌
指标数值
序列完全匹配率66.7% (4/6)
Token 级逐位匹配率80.8% (97/120)
匹配 token Logprob 相关系数r = 0.994
匹配 token Logprob MAE0.037

(3) 误差分析

高置信度场景(CPU 概率 > 50%):相对误差 < 1%

  • 例:"The Pythagorean theorem states" → 相对误差 0.29%
  • 例:"Which American-born Sinclair..." → 相对误差 0.70%

低置信度场景(CPU 概率 < 50%):相对误差 2-3%

  • 例:"What is the meaning of life?" → 相对误差 3.49%
    • 此 prompt 的 logprob 差异仅 0.034,但概率居中 (0.56 vs 0.59),导致概率空间相对误差偏高
  • 例:"Write a short poem about" → 相对误差 2.96%
    • 同理,因其概率较低 (0.17 vs 0.16),微小 logprob 差异被放大

序列不一致的原因:

  • Prompt #5 (Quantum computing is) 和 #6 (The Pythagorean theorem states) 出现序列级别的分叉
  • 这是 BF16 数值精度下的正常现象:当多步 logprob 接近足以改变 argmax 时,贪心路径会产生分叉
  • 同类现象在 CPU vs GPU 对比中也普遍存在,并非 Ascend 特有

4.4 精度结论

维度结论指标
首步 Token 选择✅ 完全一致100% Top-1 匹配
高置信度场景✅ < 1% 误差平均 0.62% 相对误差
Logprob 相关性✅ 近乎完美Pearson r = 0.994
完整序列✅ 66.7% 完全匹配其余为 BF16 累积分叉,非精度问题

总体评价:NPU 推理精度与 CPU 基线高度一致。首步 Top-1 token 100% 对齐,匹配 token 的 logprob 相关系数达 0.994。序列层面 66.7% 完全匹配,其余序列的分叉是由 BF16 累积数值差异导致,属于多步自回归推理的固有现象,不影响模型输出质量。

5. 性能基准

5.1 测试配置

参数值
推理引擎vLLM 0.18.0 + vLLM-Ascend 0.18.0rc1
编译模式PIECEWISE ACL Graph(enforce_eager=False)
图编译耗时4 秒(35 个 shape)
数据类型bfloat16
最大序列长度2048
GPU 内存利用率0.9
采样参数temperature=0.0, top_p=1.0, max_tokens=128

5.2 吞吐率

配置数值
批处理大小10 个并发请求
单请求输出128 tokens
平均吞吐率570.4 tokens/s
单请求等效速率~57 tok/s/req

5.3 延迟

指标数值
TTFT(首 token 延迟)21.3 ms
TPOT(逐 token 延迟)16.6 ms/token
等效 decode 速率~60 tokens/s

5.4 性能分析

  • 编译加速:ACL Graph 编译将模型前向编译为 35 个图桶,消除 eager 模式的 Python 开销
  • ACL Graph 覆盖范围:支持最多 58 个不同的 batch/seq 组合
  • 1650x KV Cache 并发能力:模型仅 0.25 GB 权重,大部分 NPU 内存 (54.75 GiB) 可分配给 KV Cache

建议:如需进一步提升性能,可设置 PYTORCH_NPU_ALLOC_CONF=expandable_segments:True(已默认开启),并考虑增大 max_num_batched_tokens。

6. 快速开始

6.1 首次适配验证

from vllm import LLM, SamplingParams

# 加载模型
llm = LLM(
    model="openmoss/SmolLM-135M-GQA-d_kv_128",
    dtype="bfloat16",
    max_model_len=2048,
    enforce_eager=True,   # 首次先使用 eager 模式验证功能
)

# 测试推理
outputs = llm.generate(
    ["Which American-born Sinclair won the Nobel Prize for Literature in 1930?"],
    SamplingParams(temperature=0.0, max_tokens=128)
)
print(outputs[0].outputs[0].text)  # Expected: Sinclair Lewis

6.2 生产性能模式

from vllm import LLM, SamplingParams

# 启用 ACL Graph 编译
llm = LLM(
    model="openmoss/SmolLM-135M-GQA-d_kv_128",
    dtype="bfloat16",
    max_model_len=2048,
    enforce_eager=False,  # 启用 PIECEWISE 编译
)

7. 注意事项

  1. LLaMA 架构原生支持:本模型为标准 LLaMA model_type="llama",vLLM-Ascend 自动识别,无需任何模型代码修改
  2. MHA→MLA 的 monkey patch:该模型在 transformers 侧通过 monkey patch 将 MHA 替换为 MLA(Multi-head Latent Attention),vLLM 使用自有 attention 实现,无需此 patch
  3. 环境依赖:需 transformers>=4.47.0(含 Gemma3Config),tokenizers>=0.22.0
  4. 模型大小:135M 参数 / 256 MB,十分适合作为 Ascend NPU 适配的测试用例

8. 参考资料

  • Towards Economical Inference: Enabling DeepSeek's MLA
  • OpenMOSS/SmolLM-135M-GQA-d_kv_128 - HuggingFace
  • openmoss/SmolLM-135M-GQA-d_kv_128 - ModelScope
  • vLLM-Ascend
  • vLLM