TCFY7/Nandi-Mini-600M-Early-Checkpoint_new
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Nandi-Mini-600M (Early Checkpoint) - 昇腾 NPU 适配验证报告

⚠️ 低分提醒 — 当前模型为早期训练检查点

此模型尚处于训练早期阶段(Early Checkpoint),输出为随机乱码,不具备任何语义能力。同时 HuggingFace 原生模型代码依赖已移除的 transformers API,无法在 HF 上运行基线进行精度对比。因此当前仓库无法提供精度验证结果,评分应视为「低分/未达标」。请等待模型提供方发布完成训练的正式 checkpoint 后再进行精度对齐验证。

模型信息

属性值
模型名称Nandi-Mini-600M-Early-Checkpoint
模型类型NandiForCausalLM (自定义架构)
参数量0.65B (28 层)
精度格式bfloat16
词表大小131,072
最大上下文长度2,048
原始来源FrontiersMind/Nandi-Mini-600M-Early-Checkpoint
适配状态✅ 已完成

模型架构特性

特性值说明
hidden_size1248
intermediate_size3556SwiGLU 激活
num_attention_heads16GQA (16Q / 8KV)
num_key_value_heads8
head_dim78非标准头维度
shared_kvTrueV = K, 无独立 v_proj
qk_normTrueQ/K 前均有 RMSNorm
kv_cache_modeshared共享键值缓存
tie_word_embeddingsTrue
rope_theta1,000,000RoPE 位置编码

注意: 此 checkpoint 为早期训练检查点 (Early Checkpoint),模型尚未完成充分训练,生成文本为随机乱码,非适配问题。

昇腾 NPU 适配方案

插件结构

/opt/atomgit/vllm_nandi_plugin/
├── nandi.py         # vLLM 模型实现 (595 行)
├── __init__.py      # 插件注册入口
└── setup.py         # pip 安装脚本

模型实现

  • NandiMLP: SwiGLU MLP(gate_proj + up_proj 合并)
  • NandiAttention: 支持 Shared KV (V=K) 和 QK Norm 的注意力层
  • NandiDecoderLayer: 标准 Transformer 解码层
  • NandiModel: 完整模型骨架(Embedding + Layers + Final Norm)
  • NandiForCausalLM: LM Head + 权重加载 + Logits 处理

关键修复

问题修复方案
embedding_rank 导致维度错误当 factorized_embedding=false 时,embed_tokens 使用 config.hidden_size=1248
config.json 缺少 rope_type添加 "rope_parameters": {"rope_type": "default", "rope_theta": 1000000.0}
VocabParallelEmbedding 维度正确传入 embedding_dim = hidden_size
HF 模型代码兼容性修复 merge_with_config_defaults 等已移除 API 的导入

安装方法

cd /opt/atomgit/vllm_nandi_plugin
pip install -e .

推理示例

from vllm import LLM, SamplingParams

llm = LLM(
    model="/tmp/nandi-model",
    trust_remote_code=True,
    dtype="bfloat16",
    max_model_len=2048,
    enforce_eager=True,
    tensor_parallel_size=1,
)

sampling_params = SamplingParams(
    temperature=0.6,
    top_p=0.9,
    max_tokens=128,
)

outputs = llm.generate(["Hello, how are you?"], sampling_params)
print(outputs[0].outputs[0].text)

测试环境

项目配置
硬件Atlas 800 A2 (Ascend910_9362 × 2)
NPU 显存64 GB HBM
CPUKunpeng 920, 40 核 (aarch64)
CANN8.5.1
torch_npu2.9.0.post1
vLLM0.18.0
Python3.11.14
操作系统Linux (aarch64)

功能验证

测试项状态详情
插件安装✅pip 可导入
模型加载✅1.2 GB 权重,0.57s 加载
Tokenization✅Hindi/English 正常编码
Prefill 推理✅正确输出 logits
Decode 推理✅多步生成无 NaN
Shared KV 计算✅V=K 复用正确
QK Norm 计算✅RMSNorm 前处理正确
RoPE 位置编码✅head_dim=78 正常计算

性能基准

离线吞吐 (Throughput) — eager 模式

配置 (in→out)请求数耗时输出 Tokens吞吐量 (tok/s)
128 → 128324.33s4,096947.0
256 → 256168.21s4,096499.1
512 → 12884.05s1,024252.6
128 → 512815.29s4,096267.9

单请求延迟 (Latency) — eager 模式

配置 (in→out)平均延迟TTFT (tok/s)Decode (tok/s)
128 → 641.99s64.432.2
256 → 1283.85s66.433.2
512 → 2567.91s64.732.3

性能分析

  • 峰值输出吞吐: 947 tok/s (128→128, batch=32)
  • 单请求解码速度: ~32 tok/s (稳定)
  • 瓶颈分析: 600M 小模型 batch 利用率有限
  • 优化建议:
    • 启用 CUDAGraph / torch.compile 捕获静态图
    • 调高 max_num_seqs 提升 batch 并行度
    • 使用 FP8 量化提升计算吞吐
    • 调整 PYTORCH_NPU_ALLOC_CONF 优化显存分配

精度验证

⚠️ 无法进行精度验证: 此模型为早期训练检查点(Early Checkpoint),模型尚未完成充分训练,输出为随机乱码,不具有语义信息。同时 HuggingFace 原生模型代码与当前 transformers 版本不兼容(使用了已移除的 API),无法运行 HF 基线进行精度对比。精度对齐需在模型提供方发布完成训练的 checkpoint 并更新建模代码后进行。

已知限制

  1. 训练未完成: 此 checkpoint 为早期检查点,生成文本为随机乱码
  2. HF 兼容性: 原生代码依赖已移除的 transformers API
  3. head_dim=78: 非标准头维度
  4. max_position_embeddings=2048: 上下文窗口较小

文件清单

文件用途
config.json模型配置(已修复 rope_type)
configuration_nandi.pyHuggingFace 配置类
modeling_nandi.pyHuggingFace 模型实现(已修复兼容性)
tokenizer_config.jsonTokenizer 配置
tokenizer.jsonTokenizer 词表
model.safetensors模型权重 (1.2 GB)
vllm_plugin/nandi.pyvLLM NPU 模型适配
vllm_plugin/__init__.pyvLLM 插件注册
vllm_plugin/setup.pyvLLM 插件安装脚本

模型适配与报告生成: AtomCode (deepseek-v4-pro) | 2025-06-19 适配框架: vLLM-Ascend 0.18.0