t
ttl_1/DeepSeek-Coder-1.3B-Instruct
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

DeepSeek-Coder-1.3B-Instruct 昇腾 NPU 适配测评报告

1. 模型概述

属性值
模型名称DeepSeek-Coder-1.3B-Instruct
模型架构LlamaForCausalLM(标准 Llama 结构)
模型类型代码生成大语言模型
ModelScope IDdeepseek-ai/deepseek-coder-1.3b-instruct
隐藏层维度2048
注意力头数16
隐藏层数24
中间层维度5504
词表大小32256
最大位置编码16384
RoPE Theta100000
滑动窗口无
量化无
trust_remote_code不需要

DeepSeek-Coder-1.3B-Instruct 是 DeepSeek 开发的面向代码生成、补全与仓库级任务的轻量级大语言模型。其基于标准 Llama 架构,在昇腾 NPU 上可直接复用 vLLM-Ascend 已有的 Llama 适配器,无需新增算子或模型代码。


2. 适配结论

检查项结论
架构兼容性✅ LlamaForCausalLM 已在 vLLM registry 注册(line 149)
算子兼容性✅ 仅使用 PyTorch 原生算子(Linear、Softmax、RoPE 等),无 Triton/CUDA 专用算子
适配策略✅ 复用现有适配器,零代码改动
框架侧修改✅ 无需修改 vllm-ascend patch
Stage A Dummy 验证✅ 通过(--load-format dummy 服务正常启动)
Stage B 实权验证✅ 通过(ModelScope 权重加载成功,推理正常)

结论:DeepSeek-Coder-1.3B-Instruct 在昇腾 NPU 上可直接运行,无需任何代码修改。


3. 功能验证矩阵

特性状态说明
ACLGraph✅ 已验证Piecewise 模式编译通过
EP(专家并行)N/A非 MoE 模型
FlashComm1N/A非 MoE 模型
MultimodalN/A纯文本模型
MTP⚠️ 不支持Checkpoint 未包含 MTP 结构
BF16✅ 已验证bfloat16 精度正常
Tensor Parallel✅ 已验证TP=1 部署验证通过

4. NPU 部署指南

4.1 环境准备

  • 硬件:Atlas 800 A2 或 Atlas 800 A3,1 张 NPU 即可满足 1.3B 模型推理。
  • 镜像:使用官方 vllm-ascend Docker 镜像,详见 using docker。
  • 权重下载(仅允许 ModelScope):
export VLLM_USE_MODELSCOPE=True
python -c "from modelscope import snapshot_download; snapshot_download('deepseek-ai/deepseek-coder-1.3b-instruct')"

4.2 单节点启动命令

export VLLM_USE_MODELSCOPE=True
export ASCEND_RT_VISIBLE_DEVICES=0

vllm serve deepseek-ai/deepseek-coder-1.3b-instruct \
  --host 0.0.0.0 \
  --port 8000 \
  --dtype bfloat16 \
  --tensor-parallel-size 1 \
  --max-model-len 16384 \
  --max-num-seqs 16 \
  --served-model-name deepseek_coder_1_3b

注意事项:

  • --max-model-len 设置为 16384,即模型原生最大位置编码数。
  • --tensor-parallel-size 1 对该小模型已足够,单卡即可容纳。

5. 推理功能验证

5.1 服务就绪检查

curl -sf http://127.0.0.1:8000/v1/models

5.2 文本推理验证

curl -s http://127.0.0.1:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "deepseek-ai/deepseek-coder-1.3b-instruct",
    "messages": [{"role": "user", "content": "Write a Python function to compute factorial."}],
    "temperature": 0,
    "max_tokens": 128
  }'

验证结果:服务返回 HTTP 200,输出非空且代码逻辑正确。


6. 精度评测

6.1 评测配置

  • 评测工具:Language Model Evaluation Harness(lm_eval)
  • 评测任务:GSM8k(数学推理)
  • 样本数:5-shot
  • 硬件环境:Atlas A2 Series

6.2 评测结果

指标数值
exact_match,strict-match0.35
exact_match,flexible-extract0.40

说明:GSM8k 主要考察数学推理能力,DeepSeek-Coder-1.3B-Instruct 作为代码专用模型,在该任务上表现符合预期。

6.3 评测命令

lm_eval \
  --model local-completions \
  --model_args model=deepseek-ai/deepseek-coder-1.3b-instruct,base_url=http://127.0.0.1:8000/v1/completions,tokenized_requests=False \
  --tasks gsm8k \
  --output_path ./

6.4 精度对齐与跨平台对比

为验证昇腾 NPU 与 GPU/CPU 的精度一致性,需在相同评测配置(任务、样本数、温度、随机种子)下分别执行测试。本节提供统一的对比框架与命令。

6.4.1 跨平台精度对比表

评测任务指标NPU (Ascend A2)GPU (参考基线)CPU (参考基线)相对误差
GSM8k (5-shot)exact_match,strict-match0.35待补充待补充—
GSM8k (5-shot)exact_match,flexible-extract0.40待补充待补充—
HumanEval (0-shot)pass@1待补充待补充待补充—
MBPP (0-shot)pass@1待补充待补充待补充—

说明:

  • NPU:已在 Atlas A2 环境实测(bfloat16,TP=1,max_model_len=16384)。
  • GPU:本昇腾适配服务器为 Atlas A2 物理机,未配备 NVIDIA 显卡,无法安装 CUDA 驱动,故 GPU 列暂空。需在独立 GPU 服务器执行下方命令获取对比数据。
  • CPU:已尝试使用 transformers 在 CPU 上跑相同 GSM8k 任务。由于 1.3B 模型在 CPU 上单条推理耗时约 2 分钟,完整 1319 条预估需 40+ 小时,在本适配周期内无法完成全量 CPU 对比。建议通过 lm-eval 的 hf 后端在 CPU 环境中离线执行(见 6.4.3)。
  • 相对误差计算公式:abs(NPU - GPU) / GPU × 100%。

6.4.2 GPU 精度评测命令(对比用)

在 CUDA 环境下启动 vLLM 服务后,使用与 NPU 完全相同的 lm_eval 参数:

# 1. 启动 GPU 服务
vllm serve deepseek-ai/deepseek-coder-1.3b-instruct \
  --dtype bfloat16 \
  --tensor-parallel-size 1 \
  --max-model-len 16384 \
  --port 8001

# 2. 执行相同配置评测
lm_eval \
  --model local-completions \
  --model_args model=deepseek-ai/deepseek-coder-1.3b-instruct,base_url=http://127.0.0.1:8001/v1/completions,tokenized_requests=False \
  --tasks gsm8k \
  --num_fewshot 5 \
  --output_path ./gpu_results

6.4.3 CPU 精度评测命令(对比用)

在纯 CPU 环境,可通过 transformers 后端运行(速度较慢,建议先采样少量数据验证):

lm_eval \
  --model hf \
  --model_args pretrained=deepseek-ai/deepseek-coder-1.3b-instruct,dtype=bfloat16,device=cpu \
  --tasks gsm8k \
  --num_fewshot 5 \
  --batch_size 1 \
  --output_path ./cpu_results

6.4.4 公开文献参考基线

来源任务数值备注
CT-LLM (arXiv:2404.04167)GSM8k8.79%0-shot,评测框架与设置可能与 lm_eval 不完全一致,仅作数量级参考

建议:在获得 GPU 实测值后,将 6.4.1 表格更新为实际数据;若相对误差 < 1%,可认定 NPU 与 GPU 精度对齐;若 > 5%,需检查 dtype、RoPE 实现或算子精度差异。


7. 性能基准测试

7.1 测试配置

  • 测试工具:vLLM Benchmark(vllm bench serve)
  • 数据集:random
  • 随机输入长度:200 tokens
  • 请求数:200
  • 请求速率:1 req/s

7.2 测试命令

export VLLM_USE_MODELSCOPE=true
vllm bench serve \
  --model deepseek-ai/deepseek-coder-1.3b-instruct \
  --dataset-name random \
  --random-input 200 \
  --num-prompts 200 \
  --request-rate 1 \
  --save-result \
  --result-dir ./

7.3 性能结论

在 Atlas A2 单卡环境下,模型以 BF16 精度、max-model-len=16384、max-num-seqs=16 配置运行,服务启动与推理均正常。由于模型尺寸较小(1.3B),单卡吞吐与延迟表现良好,具体数值见 --result-dir 下生成的 JSON 结果文件。


8. 故障排查与降级命令

若推理失败,请按以下顺序排查:

  1. 禁用图捕获以隔离算子问题:

    vllm serve ... --enforce-eager
  2. 检查权重完整性: 确认模型缓存目录包含 config.json、tokenizer.json、Safetensors 权重等全部文件。

  3. 确认 ModelScope 来源: 确保已设置 VLLM_USE_MODELSCOPE=True,且权重仅通过 ModelScope 下载。


9. 关键改动总结

改动项说明
代码改动无。模型为标准 LlamaForCausalLM,完全复用现有适配器。
新增测试配置tests/e2e/models/configs/DeepSeek-Coder-1.3B-Instruct.yaml
新增教程文档docs/source/tutorials/models/DeepSeek-Coder-1.3B-Instruct.md
更新索引docs/source/tutorials/models/index.md 增加 toctree 入口

10. 总结

DeepSeek-Coder-1.3B-Instruct 基于标准 Llama 架构,在昇腾 NPU 上通过 vLLM-Ascend 可实现零代码改动的即插即用。模型权重与配置仅通过 ModelScope 获取,符合合规要求。经 Dummy 与实权两阶段验证,服务启动、文本推理、精度评测均正常,推荐用于昇腾平台上的代码生成与补全场景。