搜「DeepSeek-VL 本地部署」的人,多半以为它还是那个 1.3B / 7B 的稠密模型。实际上这条线已经走了三步:初代 DeepSeek-VL 用 SigLIP-L 加 SAM-B 的混合视觉编码器,固定吃 1024×1024 输入;DeepSeek-VL2 换成 DeepSeekMoE 底座(配置里是 DeepseekV2ForCausalLM,72 个路由专家、top-6 激活)和 SigLIP-SO400M-384 动态切图,一次给出 tiny / small / 全量三个尺寸;再往后,官方的多模态发布集中到了文档方向,也就是 DeepSeek-OCR 和 DeepSeek-OCR-2。要做通用视觉理解,今天该部署的是 DeepSeek-VL2。
显存这件事上 DeepSeek-VL2 有个非常反直觉的地方。deepseek-vl2-small 的 bf16 权重只有 32.3GB,但官方 README 白纸黑字写着跑示例脚本需要 80GB 显存 —— 差出来的部分全在动态切图产生的图像 token 上:一张高分辨率图会被拆成一堆 384×384 的 tile(配置里列了 23 种候选分辨率,最大到 3456×384),prefill 阶段这些激活值同时驻留。仓库给的解法是 incremental_prefilling,chunk_size 设 512 分块喂进去,能压进 40GB,代价是首 token 明显变慢。按权重体积估卡,是这个模型最常见的翻车方式。
另一件要提前知道的事:量化生态很薄。Hugging Face 上搜不到 DeepSeek-VL2 的 GGUF,llama.cpp 那边的支持请求挂着 stale 标签就没了下文,所以 Ollama 和 LM Studio 这条路走不通。现成的低比特权重几乎都在 mlx-community(small 的 4bit 是 9.3GB),只跑 Apple Silicon。在 N 卡上要么老实上 bf16,要么用 bitsandbytes 的 load_in_4bit 或社区 AWQ 自己扛。这意味着省显存的余地比想象中小 —— 与其折腾量化,不如按小时租一张真的够用的卡。
01 —
DeepSeek-VL 全系版本与显存对照
权重体积取自各仓库 safetensors 元数据,显存门槛取自官方 README
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| DeepSeek-VL2 | 27.5B-A4.5B(MoE) | bf16 权重 55.0GB / 官方脚本 >80GB | 4096 | 顶配版,DeepSeekMoE-27B 底座配 MLA 注意力。README 原话是 small 就要 80GB、全量「even larger」,单卡不开分块 prefill 时 A100 80GB 也吃紧。 |
| DeepSeek-VL2-Small | 16.1B-A2.8B(MoE) | bf16 权重 32.3GB / 原始脚本 80GB,分块 prefill 后 40GB | 4096 | 自建评估和微调最常落的一档。40GB 卡靠 chunk_size=512 能跑但慢,80GB 卡才是顺手的选择。 |
| DeepSeek-VL2-Tiny | 3.37B-A1.0B(MoE) | bf16 权重 6.74GB | 4096 | 唯一能舒服塞进 24GB 消费卡的尺寸,适合跑通链路、调 prompt 模板、做 LoRA 调试。mlx-community 有 3/4/6/8bit 量化,但只跑 Mac。 |
| DeepSeek-VL-7B-Chat(初代) | 7.3B(稠密) | fp16 权重 14.7GB | 4096 | 第一代,SigLIP-L + SAM-B 混合编码器、固定 1024×1024 输入。同代还有 1.3B-chat(1.98B 参数、fp16 3.95GB)。只建议复现旧论文结果时用。 |
| DeepSeek-OCR | 3.3B(DeepSeek3B-MoE-A570M 解码器) | bf16 权重 6.71GB | Tiny 64 / Small 100 / Base 256 / Large 400 视觉 token | 文档分支的起点。DeepEncoder = SAM-base + 16× 卷积压缩 + CLIP-large。压缩比 10 倍以内解码精度约 97%,20 倍掉到约 60%。代码和权重都是 MIT。 |
| DeepSeek-OCR-2 | 3.4B | bf16 权重 6.78GB | (0-6)×144 + 256 视觉 token | 这条线最新的一代,架构标识 DeepseekOCR2ForCausalLM,主打 Visual Causal Flow。olmOCR-bench 总分 76.3%,arXiv 数学公式 OCR 到 82%,许可证放宽成 Apache-2.0。 |
02 —
在 NexGPU 上该租哪张卡
按尺寸和场景对号入座,价格为每卡每小时列表价
跑通 deepseek-vl2-tiny,验证 prompt 与 grounding 输出
RTX 3090 24GB$0.193/卡·时
6.74GB 权重加动态切图的图像 token 在 24GB 里绰绰有余,而且 Ampere 能直接吃仓库钉死的 torch 2.0.1,不用先跟 CUDA 版本打一架。
DeepSeek-OCR / OCR-2 批量 PDF 转 Markdown 流水线
RTX 4090 24GB$0.540/卡·时
6.7GB 的模型完全塞得下,Ada 架构跑得动官方那套 torch 2.6.0 + flash-attn 2.7.3 环境;用 vLLM 时记得按模型卡建议关掉 prefix caching。
deepseek-vl2-small 全精度评估或 LoRA 微调
A100 PCIE 80GB$0.824/卡·时
官方 README 明写这个尺寸的原始脚本要 80GB。RTX A6000 48GB 是 $0.817,多花 $0.007 就多拿 32GB,没有理由去 48GB 卡上折腾分块 prefill。
27.5B 全量 + 多图交错长会话 / 并发服务
A100 SXM4 80GB$1.088/卡·时
55GB 权重再叠上 prefill 激活,80GB 是底线;SXM4 的显存带宽和 NVLink 让 MoE 专家路由和多卡张量并行都不憋着。
03 —
四步把 DeepSeek-VL2 跑起来
从开卡到 OpenAI 兼容接口,把已知的坑都标出来
- 01
开卡,先确认 torch 和 GPU 架构对得上
在控制台选一张匹配尺寸的卡,直接用 2,000+ 预置镜像里的 PyTorch 或 vLLM 镜像开机,SSH、Jupyter、Web 终端随便进。第一件事是核对 torch:DeepSeek-VL2 的 requirements.txt 钉死了 torch==2.0.1 和 transformers==4.38.2,这在 Ampere(3090 / A100)上还能直接跑,但 RTX 5090 是 Blackwell sm_120,必须换成 torch 2.7 以上,那两个 pin 就得手动放掉。
nvidia-smi && python -c "import torch; print(torch.__version__, torch.cuda.get_device_capability(0))" - 02
拉源码和权重
官方推理代码在 deepseek-ai/DeepSeek-VL2,pip install -e . 就装好。注意 requirements 里的 attrdict 在 Python 3.10 以上会因为 collections 的导入方式直接报错,换成 attrdict3 即可 —— 这个坑一代二代都有。权重从 Hugging Face 拉,small 有 32.3GB,先看一眼实例的磁盘配额再下。
git clone https://github.com/deepseek-ai/DeepSeek-VL2.git && cd DeepSeek-VL2 && pip install -e . && pip install attrdict3 && hf download deepseek-ai/deepseek-vl2-small --local-dir /workspace/deepseek-vl2-small - 03
显存不够就开分块 prefill
只有 40GB 级别的卡时,用仓库自带的 incremental_prefilling 把图像 embedding 分块喂进去,chunk_size 取 512。这是官方唯一给出的、把 deepseek-vl2-small 压进 40GB 的办法,首 token 延迟会明显变高,吞吐场景不建议这么干 —— 直接上 80GB 卡更省心。
inputs_embeds, past_key_values = vl_gpt.incremental_prefilling(input_ids=prepare_inputs.input_ids, images=prepare_inputs.images, images_seq_mask=prepare_inputs.images_seq_mask, images_spatial_crop=prepare_inputs.images_spatial_crop, attention_mask=prepare_inputs.attention_mask, chunk_size=512) - 04
上 vLLM,换成 OpenAI 兼容接口
官方 README 自己写了那套 demo 「没有任何部署优化」,生产该走 vLLM、SGLang 或 LMDeploy。vLLM 已经内置 DeepseekVLV2ForCausalLM,LoRA 和流水线并行都支持,max-model-len 顶到 4096 就是模型上限。换成 DeepSeek-OCR / OCR-2 时,按模型卡建议补上 --no-enable-prefix-caching 和 --mm-processor-cache-gb 0。
vllm serve deepseek-ai/deepseek-vl2-small --trust-remote-code --max-model-len 4096
一笔真实的账
拿 DeepSeek-OCR 跑 5 万页 PDF:论文给的吞吐是单张 A100-40G 每天 20 万页以上(约 2,500 token/s),5 万页大约四分之一天,按 6 小时算。NexGPU 的 A100 PCIE 80GB 是 $0.824/卡·时,6 × $0.824 = $4.94;结果导出 3GB,出网按 $0.0081/GB 中位价是 $0.02,合计 $4.96 就把整批文档转成了 Markdown。换成 deepseek-vl2-small 的 bf16 评估:32.3GB 权重在同一张卡上加载几分钟,一轮 1,000 张图的 benchmark 按 2 小时算,2 × $0.824 = $1.65。如果只是先在 tiny 上跑通链路,RTX 3090 24GB 是 $0.193/卡·时,一下午 4 小时 = $0.77。计费按秒计量、按小时定价,没有最低消费、没有开通费、不用提配额申请;实例一停算力立刻不计费,只有你留着的存储按 $0.414/GB·月 中位价继续走,销毁即止。
04 —
