向AI转型的程序员都关注公众号 机器学习AI算法工程
仓库:huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp
基线模型:DeepSeek-V4-Flash-0731
DeepSeek 在 Hugging Face 上线了 DeepSeek-V4-Flash-Vision-Exp,这是 DeepSeek-V4 家族的第一个多模态模型。它在 DeepSeek-V4-Flash 架构上加入视觉模块,经持续训练获得图像理解能力。官方模型卡对其定位的表述是:多模态 Agent 能力相比基线有明显提升,纯文本 Agent 任务性能基本持平。
这次开放的不只是权重,还有 tokenizer、图文提示编码的参考实现,以及覆盖 Vision Encoder、Aligner、DFlash Attention、MoE、Hyper-Connections、DSpark 的最小 PyTorch 推理代码。协议为 MIT。
模型概况
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
据公开媒体报道,模型总参数约 304.6B,权重分 48 个 Safetensors 分片,仓库体积约 168GB。官方模型卡未直接标注参数量,引用时请以仓库实际文件为准。
架构:语言主干
注意力:KV 压到 1 个头 + 稀疏索引
num_key_value_heads 设为 1,head_dim 为 512,Q 和 O 走低秩压缩(q_lora_rank、o_lora_rank 均为 1024)。这是 MLA 思路的极端版本:KV 缓存被压到极低,代价是单头维度拉大。
在此之上是一套稀疏索引器:index_n_heads: 64、index_head_dim: 128、index_topk: 512,即从全序列中挑选 512 个位置做全局注意力;局部则由 sliding_window: 128 的滑窗覆盖。
位置编码用 YaRN(factor: 16,original_max_position_embeddings: 65536)把上下文从 64K 扩展到 1M。
MoE:256 专家 + 无辅助损失路由
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
量化:168GB 是怎么来的
expert_dtype 为 fp4,quantization_config 为 FP8(e4m3 格式、ue8m0 缩放因子、128×128 分块)。
按 304.6B 参数估算:若以 BF16(2 字节/参数)存储需约 609GB;专家权重改用 FP4(0.5 字节)、其余用 FP8(1 字节)后,总量降到约 168GB,约为原来的 1/3.6。由于 256 个专家占了参数的大头,FP4 带来的压缩最明显。
上述 609GB、1/3.6 为按 config.json 数值的推算,非官方标注。
Hyper-Connections 与 DSpark
- Hyper-Connections
: hc_mult: 4(残差流宽度 4 倍)、hc_sinkhorn_iters: 20、o_groups: 8、num_hash_layers: 3。用可学习连接替代标准残差,靠 Sinkhorn 迭代做归一化。 - DSpark
: dspark_target_layer_ids: [40, 41, 42]、dspark_block_size: 5、dspark_markov_rank: 256、dspark_noise_token_id: 128799。投机解码的草稿头挂在最后三层,一次起草 5 个 token。 -
另有 num_nextn_predict_layers: 3(多 token 预测 3 层)、rms_norm_eps: 1e-20、swiglu_limit: 10.0。
架构:视觉前端与 Aligner
ViT:32 层,全双向注意力 + 2D RoPE
inference/vision.py 里是一个标准 ViT,用 F.scaled_dot_product_attention 且不加因果掩码(全双向),配 2D 旋转位置编码——横向与纵向坐标分别编码,使模型知道每个 patch 在图上的位置。
def get_vision_cos_sin(n_h, n_w, dim, theta): hpos = torch.arange(n_h).unsqueeze(1).expand(n_h, n_w) # 行坐标 wpos = torch.arange(n_w).unsqueeze(0).expand(n_h, n_w) # 列坐标 freqs = torch.stack([hpos, wpos], dim=-1).reshape(-1, 2, 1).float() * inv_freq return freqs.cos().unsqueeze(1), freqs.sin().unsqueeze(1)
Aligner:9 合 1 下采样
视觉 token 进入语言模型前,由 Aligner 做 3×3 合并。F.unfold(..., r, stride=r) 把 9 个相邻 patch 的特征拼在一起,in_dim 为 vision_dim × 3² = 1024 × 9 = 9216,再投影回 4096。
class Aligner(nn.Module): def __init__(self, args): self.downsample_ratio = args.vision_downsample_ratio # = 3 in_dim = args.vision_dim * self.downsample_ratio ** 2 # 1024 * 9 = 9216 self.w1 = nn.Linear(in_dim, args.dim) # 9216 -> 4096 self.w2 = nn.Linear(args.dim, args.dim) # 4096 -> 4096 def forward(self, x, n_h, n_w): r = self.downsample_ratio x = x.view(n_h, n_w, -1).permute(2, 0, 1) x = F.pad(x, (0, -n_w % r, 0, -n_h % r)) # 补齐到 r 的倍数 x = F.unfold(x.unsqueeze(0), r, stride=r).squeeze(0).transpose(0, 1) return self.w2(F.gelu(self.w1(x)))
单图 token 上限 384 对应的分辨率
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
换算:384 × 9 × 196 = 677,376 像素,约等于 823×823。也就是说,无论输入原图多大,进入语言模型时都会被压缩到这个量级,token 消耗上限固定为 384。对单条请求需要输入大量截图的 Agent 场景,这个上限直接决定了成本是否可控。
823×823 为按 config.json 数值的推算,非官方标注。另有报道称单请求最多可输入 600 张图,该数字未见于官方 config,仅供参考。
官方 Benchmark
模型卡给出三组对比(Vision-Exp / V4-Flash-0731 / Opus-4.8):
|
|
|
|
|
|---|---|---|---|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对比基线 V4-Flash-0731,文本项多数不降反升:Terminal Bench 82.7→83.9、DeepSWE 54.4→59.3、Toolathlon-Verified 70.3→75.9、DSBench-Hard 59.6→63.6;Cybergym 略降(76.7→75.3)。加入视觉模块未造成文本能力回退。
与 Opus-4.8 相比是多模态项互有胜负:Agents' Last Exam(27.3 vs 25.7)、ZeroBench(35.0 vs 34.0)领先,ApexBench(36.5 vs 39.4)、Chartography(64.3 vs 65.0)小幅落后。文本项差距较大,NL2Repo 为 57.7 vs 69.7。
能力分布偏向界面操作、图表读取与 Agent 流程类任务(Chartography 64.3、ZeroBench 35.0 均接近第一梯队),需要深厚代码库理解的 NL2Repo 则差距明显。
官方注释(模型卡原文):† ApexBench 与 Agents' Last Exam 两项中,DeepSeek-V4-Flash-0731 会忽略输入里的多模态元素,因此这两列更接近"有无视觉能力"的对照,不是同条件下的模型排名。文本 Agent 各项均在 DeepSeek Harness minimal mode 下评测,reasoning effort 为 max,temperature = 1.0、top_p = 0.95。
关于可用性:官方 inference/README.md 开头注明,仓库提供的是 readable reference implementation,不是 production serving engine,生成循环为朴素自回归采样。模型名带 Exp 后缀,属实验版本。304B 量级参数与 48 个权重分片对下载、存储与多卡部署有较高要求。
本地运行
仓库把提示编码(encoding/)与推理(inference/)分成两个目录,前者不依赖 PyTorch,因此可以在没有 GPU 的情况下先验证消息编码是否正确。
1. 获取代码与依赖
git lfs install git clone https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp cd DeepSeek-V4-Flash-Vision-Exp/inference python -m pip install -r requirements.txt
2. 转换权重为张量并行格式
export HF_CKPT_PATH=/path/to/DeepSeek-V4-Flash-Vision-Exp-HF export SAVE_PATH=/path/to/DeepSeek-V4-Flash-Vision-Exp-TP4 export MP=4 python convert.py \ --hf-ckpt-path "${HF_CKPT_PATH}" \ --save-path "${SAVE_PATH}" \ --n-experts 256 \ --model-parallel "${MP}" \ --expert-dtype fp4
--n-experts 与 --expert-dtype 需与 config.json 对齐。convert.py 会一并把 tokenizer.json、tokenizer_config.json 复制到目标目录;tokenizer 位于其他路径时用 --tokenizer-path 指定。
3. 运行图文示例
export CKPT_PATH=/path/to/DeepSeek-V4-Flash-Vision-Exp-TP4 export MP=4 INPUT_FILE=examples/example_vl.txt ./run.sh INPUT_FILE=examples/example_vl_harmony.json ./run.sh
两个示例表达的是同一个图文交错的双图 prompt,编码结果与 input token IDs 相同。仓库同时支持紧凑 TXT 记法(<image>path</image>)和 OpenAI 风格 JSON content blocks。
4. 交互式对话
torchrun --nproc-per-node "${MP}" generate.py \ --ckpt-path "${CKPT_PATH}" \ --config config.json \ --interactive \ --temperature 1.0
多机场景在 generate.py 前加 --nnodes、--node-rank、--master-addr、--master-port。
5. 先跑测试验证环境
python -m pytest -q \ encoding/test_encoding_dsv4.py \ inference/test_image_processor.py
在仓库根目录执行,可验证编码链路与图像预处理。建议在下完 168GB 权重之前先跑通这一步。
机器学习算法AI大数据技术
搜索公众号添加: datanlp
长按图片,识别二维码
阅读过本文的人还看了以下文章:
【模型高效部署】tensorrtx 深度解读,yolov11高性能推理实战案例
整理开源的中文大语言模型,以规模较小、可私有化部署、训练成本较低的模型为主
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx

