☰
DeepSeek-V3 本地推理:JSON 配置与调用全解(附 3 个报错速查)
2026/10/7 9:24:05 网站建设 项目流程

DeepSeek-V3 本地推理:JSON 配置与调用全解(附 3 个报错速查)

【免费下载链接】DeepSeek-V3项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-V3

跑 DeepSeek-V3 本地推理的人,大多被同一行断言劝退过:

AssertionError: Number of prompts exceeds maximum batch size (8)

先说结论:V3 仓库里没有 HTTP 服务层,也没有"请求体 JSON"这种东西。你所谓的 DeepSeek-V3 JSON 请求格式,实际上就是inference/configs/下那份 config JSON,加上generate.py的命令行参数——全部本地进程内消费。弄懂这两块,绝大多数参数疑问自然消失。

跑通前:环境、权重与第一条命令

官方 demo 的环境要求比较苛刻,先对齐:

  • Linux 系统,Python 3.10(macOS、Windows 不支持,见仓库 README 6.1 节);
  • clone 仓库(git clone https://gitcode.com/GitHub_Trending/de/DeepSeek-V3),进inference/装依赖:pip install -r requirements.txt,锁的是 torch 2.4.1、triton 3.0.0、transformers 4.46.3、safetensors 0.4.5。

权重要先转成 demo 的分片格式,仓库只提供 FP8 权重:

python convert.py --hf-ckpt-path /path/to/DeepSeek-V3 \ --save-path /path/to/DeepSeek-V3-Demo \ --n-experts 256 --model-parallel 16

--model-parallel要和你实际的 GPU 总数对齐——demo 按model{rank}-mp{world_size}.safetensors的命名读分片,对不上就会报文件找不到。

最简调用(2 节点 × 8 卡,交互模式):

torchrun --nnodes 2 --nproc-per-node 8 --node-rank $RANK --master-addr $ADDR \ generate.py --ckpt-path /path/to/DeepSeek-V3-Demo \ --config configs/config_671B.json \ --interactive --temperature 0.7 --max-new-tokens 200

参数全在这条命令里了:--config指定那份 JSON,--temperature 0.7控制采样随机度,--max-new-tokens 200限输出长度。

那份 JSON 里到底装了什么

关键认知:config JSON 不是发给谁的"请求体",它是模型结构的扁平描述文件,加载方式就一行:ModelArgs(**json.load(f))。

ModelArgs是 inference/model.py 里定义的数据类,config 里每个 key 都会覆盖掉它的默认值;JSON 里没有的字段,就落回类里的缺省值(如max_batch_size默认 8、max_seq_len默认 16384)。以 config_671B.json 为例:

字段取值一句话说明
vocab_size129280词表大小
dim/inter_dim7168 / 18432主干维度 / 稠密 MLP 中间维
n_layers/n_heads61 / 128Transformer 层数 / 注意力头数
n_routed_experts等 4 项256/1/8/4MoE(混合专家)路由相关:总专家、共享专家、每 token 激活专家、专家分组
q_lora_rank/kv_lora_rank1536 / 512MLA(多头潜在注意力)低秩投影维度
dtypefp8权重精度,可选bf16

目录里的config_16B.json、config_236B.json是 V2 时代遗留的对照件,跑 V3 权重时别用。config_v3.1.json与 671B 版几乎一致,多一个量化缩放格式字段scale_fmt: "ue8m0",按你拿到的权重版本二选一。

真正干活的是 generate(),不是 HTTP 请求

demo 里没有requests、没有端口,inference/generate.py 里唯一值得记住的接口就是generate():

def generate(model, prompt_tokens, max_new_tokens, eos_id, temperature=1.0)

行为逻辑:

  • temperature > 0:Gumbel 采样(对指数噪声取 argmax);temperature == 0:纯贪心。
  • 没有 top_p、top_k——这套推理实现里就不存在,想调多样性只能动 temperature。
  • prompt_tokens必须是 token id 的二维列表(List[List[int]]),每个 prompt 占一行。

最小调用闭环(约 20 行):

import json, os import torch from transformers import AutoTokenizer from safetensors.torch import load_model from model import Transformer, ModelArgs, gemm_impl args = ModelArgs(**json.load(open("configs/config_671B.json"))) gemm_impl = "fp8" if args.dtype == "fp8" else "bf16" model = Transformer(args).to("cuda").eval() load_model(model, os.path.join(ckpt_path, f"model0-mp1.{args.dtype}.safetensors")) tokenizer = AutoTokenizer.from_pretrained(hf_path) msgs = [{"role": "user", "content": "解释一下 MLA 是什么"}] ptoks = tokenizer.apply_chat_template(msgs, add_generation_prompt=True) out = generate(model, [ptoks], max_new_tokens=200, eos_id=tokenizer.eos_token_id, temperature=0.7) print(tokenizer.decode(out[0], skip_special_tokens=True))

两个细节值得盯一下:官方链路用apply_chat_template而不是裸encode,它会把对话包装成模型训练时的模板格式;eos_id传 tokenizer 的结束符 id,模型生成到它就停。

现象 → 原因 → 一行修复

报错现象原因修复
AssertionError: Number of prompts exceeds maximum batch size (8)批处理文件超过 8 行,撞了max_batch_size断言(generate.py 148 行)减到 8 行以内,或在 config JSON 里调大max_batch_size
Prompt length exceeds model maximum sequence lengthprompt 超过max_seq_len(默认 16384),generate.py 第 52 行直接拦截缩短输入;或按你的硬件改 config 里的max_seq_len
多卡起服务后找不到model{rank}-mp{world_size}.safetensorsconvert.py的--model-parallel与 GPU 总数对不上按实际卡数重新转一遍权重

另外提醒一句:demo 本身不是服务,别去等 4xx 状态码——所有报错都是本地 Python 异常,堆栈里哪个文件哪行,基本就是全部线索。

长上下文与选型佐证

第一张是 V3 相对同类开源模型的基准对比;第二张是 NIAH("大海捞针"检索测试)结果,128K 上下文档内各长度检索精度都很稳——这也是官方敢把max_seq_len默认放到 16K 以上的原因:长上下文能力是验证过的,你调大这个字段不是赌博。


上手顺序其实就三步:确认环境(Linux + Python 3.10 + 卡数)、转权重时让--model-parallel对齐 GPU 总数、torchrun跑通交互模式。之后才轮到调 temperature、--max-new-tokens和批大小——按这个顺序做,上面三个报错基本都会在发生之前被你躲开。

【免费下载链接】DeepSeek-V3项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-V3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询