ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepSeek-V4.1-Flash 最小推理参考实现:从权重转换、示例运行到自测的完整指南

DeepSeek-V4.1-Flash 最小推理参考实现:从权重转换、示例运行到自测的完整指南 人工智能大模型多模态【免费下载链接】DeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家MoE模型拥有 5520 亿骨干参数并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入并以自回归方式生成文本项目地址https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-V4.1-Flash点击查看免费下载本文是围绕仓库中 inference/README.md 展开的实战指南讲解如何在本仓库的inference/目录下安装依赖、将 Hugging Face 格式权重转换为按张量并行TP分片的检查点、以 TXT/JSON 两种等价形式运行多模态示例、启动交互式对话以及执行模型自测。读完本文你将掌握 DeepSeek-V4.1-Flash 参考推理栈的完整使用链路并理解其底层架构组件视觉编码器、压缩稀疏注意力、Engram、MoE、Hyper-Connections、DSpark在源码中的具体落点。概览这是一套“可读的参考实现”而非生产推理引擎inference/目录提供的是一套以可读性为优先的参考实现reference implementation设计目标不是替代生产级 serving 引擎而是把 DeepSeek-V4.1-Flash 的核心前向路径完整、透明地呈现出来。根据 inference/README.md 的定位模型代码覆盖以下组件视觉编码器与对齐器vision encoder aligner将图像编码为 LLM 可消费的视觉 token滑窗 压缩稀疏注意力及两级索引器sliding-window plus compressed sparse attention with its two-level indexer对应模型的长上下文压缩注意力机制Engram n-gram 查询engram n-gram lookups基于 token 的哈希式记忆查询MoE混合专家路由专家与共享专家的前向计算Hyper-Connections残差流的并行多副本混合结构DSpark 前向路径DSpark forward path半自回归草稿生成的前向实现。生成过程本身则是普通的自回归采样plain autoregressive sampling不包含生产引擎常见的批处理调度、KV cache 管理优化等服务化特性。安装依赖运行推理前先在inference/目录下安装依赖python -m pip install -r requirements.txtinference/requirements.txt 中声明的依赖如下其中值得特别注意的是依赖版本约束说明torch2.10.0深度学习框架要求较新版本以支持 fp8/fp4 相关数据类型与算子transformers无加载分词器AutoTokenizer与权重索引tokenizers无分词器底层库safetensors0.7.0安全格式的权重读写safe_open/save_file/load_modelnumpy无数值计算sympy无符号计算Engram 哈希相关工具Pillow无图像加载与预处理tilelang0.1.8精确锁定版本kernel.py中的 fp8/fp4 GEMM、稀疏注意力、Sinkhorn 等算子均由 tilelang 编写tqdm无进度条tilelang被精确固定为0.1.8这与 inference/kernel.py 中通过T.prim_func定义的fp8_gemm_kernel、fp4_gemm_kernel、sparse_attn_kernel、hc_split_sinkhorn_kernel等算子强相关升级或降级该版本可能导致算子编译失败。转换 Hugging Face 权重按张量并行秩分片运行时需要为每个张量并行tensor-parallel, TP秩准备一个转换后的检查点文件。从inference/目录执行转换export HF_CKPT_PATH/path/to/DeepSeek-V4.1-Flash-HF export SAVE_PATH/path/to/DeepSeek-V4.1-Flash-TP8 export MP8 python convert.py \ --hf-ckpt-path ${HF_CKPT_PATH} \ --save-path ${SAVE_PATH} \ --model-parallel ${MP} \ --expert-dtype fp4 \ --tokenizer-path ${HF_CKPT_PATH}关键参数说明参数必填说明--hf-ckpt-path是原始 Hugging Face 格式检查点目录需包含model.safetensors.index.json或*.safetensors权重文件--save-path是转换输出目录会生成model0-mp{MP}.safetensors~model{MP-1}-mp{MP}.safetensors共 MP 个分片--model-parallel是张量并行度 MP仓库模型权重按 8 路分片为model-00001-of-00048.safetensors~model-00048-of-00048.safetensors官方示例使用MP8--expert-dtype否专家权重的存储精度可选fp8或fp4默认为fp4对应发布模型的 E2M1 FP4 专家权重--tokenizer-path否存放tokenizer.json与tokenizer_config.json的目录不传时回退到--hf-ckpt-path源码级细节专家数自动推断、FP4 转换与分片策略专家数从权重名自动推断无需手工传入。inference/convert.py 中的infer_num_experts通过正则(?:mlp|ffn)\.experts\.(\d)\.扫描权重名分别统计骨干网络backbone与 MTP 层中的路由专家数量并断言二者都能被 MP 整除。FP4 专家权重的无损转换。发布模型以e2m1fnint8 打包的 FP4存储专家权重运行时若选择--expert-dtype fp4inference/convert.py 直接将其 view 为torch.float4_e2m1fn_x2若选择fp8则调用cast_e2m1fn_to_e4m3fninference/convert.py做无损升格——把每个 4-bit 值按 [0, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0] 及其负值表映射回浮点、乘上块内 offset 缩放后转为e4m3fn同时输出新的e8m0fnu块缩放。转换器还断言 fp8 块大小为 32×32并验证MAX_OFFSET_BITS 6的约束6.0 * 2^6 384 448恰好落在 e4m3fn 的最大值内。权重名映射与分片。inference/convert.py 定义了embed、wq_b、wo_a、wo_b、head、attn_sink、weights_proj等张量的维度映射dim0或dim1转换时按对应维度做narrow切分路由专家按n_local_experts n_experts // MP均匀分到各秩inference/convert.pyEngram 嵌入表则按行分片并对最后一块不足部分做 paddinginference/convert.py。wo_a权重会与 scale 合并展开为 bfloat16inference/convert.pyMTP 层与骨干共享的embed.weight/head.weight被跳过以免重复存储inference/convert.py。分词器复制。--tokenizer-path指向的目录中若存在tokenizer.json和tokenizer_config.json会被复制进转换后的检查点目录inference/convert.py因此运行时可直接用--ckpt-path加载分词器。运行 TXT 与 JSON 示例同一条多模态提示的两种等价表达转换完成后用 inference/run.sh 一键运行示例export CKPT_PATH/path/to/DeepSeek-V4.1-Flash-TP8 export MP8 INPUT_FILEexamples/example.txt ./run.sh INPUT_FILEexamples/example_harmony.json ./run.sh两个文件表达的是同一条交织双图提示interleaved two-image prompt因此编码出的 prompt 与输入 token ID 完全一致。这一点在 inference/README.md 中明确说明并受到encoding/测试的验证见下文。TXT 格式紧凑的image标记inference/examples/example.txt 使用空行分隔多个 prompt图像用image路径/image标签内联中国的首都是哪里 列出100以内的所有素数。 DeepSeek是做什么的公司 请按“第一张、第二张”的顺序回答第一张图imageexamples/images/carrots.jpeg/image和第二张图imageexamples/images/corn.jpeg/image中分别是什么食材它们通常食用的部位分别是什么生成代码通过parse_tagged_text把这种紧凑写法解析为标准内容块见 encoding/README.md 中的“Compact TXT notation”它只是一个输入便捷层不是第二套编码实现。JSON 格式OpenAI 兼容的多用例输入inference/examples/example_harmony.json 是“Harmony 输入”一个 JSON 数组每个元素是一个 OpenAI 格式的 case{messages: [...], tools: [...]}或裸消息列表。其中第一个 case 与 TXT 文件的最后一条提示完全等价——同样以文本块 两张image_urlexamples/images/carrots.jpeg、examples/images/corn.jpeg的交织方式提问其余 case 覆盖了 system 提示、function 工具定义get_weather以及含多轮 assistant/system 消息的对话。inference/generate.py 对两种输入的处理路径分别为.json走load_casesto_json编码纯文本则按\n\n切分、经parse_tagged_text构造 case。加载的 case 会先经过encode_case与prepare_vl_inputs统一编码为 token。图像如何变成 token图像预处理管线对于带图像的 promptinference/image_processor.py 会通过load_image_bytesinference/image_processor.py从本地路径、data:URL、http(s) URL 或 base64 数据加载图像字节用plan_image_grid/solve_resize_ratioinference/image_processor.py做保比例的尺寸规划保证视觉 token 数不超过vision_max_n_token配置中为 1024将图像切成n_vit_h × n_vit_w的 patch 网格送入 ViT再经 3×3 aligner 降采样成n_llm_h × n_llm_w的 LLM token 网格布局为[IMAGE_START] ([IMAGE] * n_llm_w [IMAGE_NEW_LINE]) * n_llm_h [IMAGE_END]见 inference/image_processor.py 的模块 docstring。这些视觉 token 在input_ids中统一携带image_token_id配置中为 129264仅靠 token 类型区分且必须全部落在首个 prefill 块内inference/generate.py 会断言图像跨度不超过最短 prompt因此多模态 prompt 会被逐个单独生成inference/generate.py。交互式对话torchrun 启动torchrun --nproc-per-node ${MP} generate.py \ --ckpt-path ${CKPT_PATH} \ --config config.json \ --interactive \ --temperature 0.6交互模式会打印提示符循环读取输入并支持两条内建命令/exit退出、/clear清空对话历史inference/generate.py。在交互模式下args.max_batch_size被设为 1、args.max_seq_len被设为 64Kinference/generate.py。generate.py 全部命令行参数参数默认值说明--ckpt-path必填转换后的检查点目录--config必填模型配置文件如config.json用于构造ModelArgs--input-file批处理模式的输入文件TXT 或 JSON与--interactive二选一源码断言二者至少指定其一--interactive否store_true启用交互式对话--max-new-tokens200每轮最多生成的新 token 数注意main()内部默认参数为 100CLI 层为 200--temperature1.0采样温度--thinking-modechat可选chat或thinking决定是否输出think.../think推理块采样在 inference/model.py 的sample函数中完成温度为 0 时取 argmax否则用 Gumbel-max trick等价于多项式采样但避免 GPU-CPU 同步。多节点执行多节点运行只需在generate.py之前追加torchrun的常规参数torchrun --nnodes 节点数 --node-rank 节点秩 \ --master-addr 主节点地址 --master-port 主节点端口 \ --nproc-per-node ${MP} generate.py \ --ckpt-path ${CKPT_PATH} \ --config config.json \ --interactiveinference/generate.py 根据WORLD_SIZE/RANK/LOCAL_RANK环境变量判断是否调用dist.init_process_group(nccl)非 0 秩的进程会静默 print交互输入经dist.broadcast_object_list广播到各秩inference/generate.py。自测python model.pypython model.pyinference/model.py 的__main__块会用ModelArgs的默认值构建一个小模型dspark_block_size6、dspark_target_layer_ids(3, 4)输入 2×150 的随机 token先做 128 token 的 prefill再逐 token 解码 22 步并同步调用forward_spec走 MTP 草稿前向。由于权重未初始化自测验证的是张量形状与 kernel 装配是否正确而非数值正确性——但它真实调用了稠密 fp8 / MoE fp4 内核fp8_gemm、fp4_gemm、sparse_attn等是验证依赖与编译环境的最快方式。配置参数速查从config.json理解模型形状运行时通过--config config.json传入 inference/config.json其字段名与ModelArgsinference/model.py一一对应。以下是与推理最相关的几组参数分组关键参数配置值含义骨干形状vocab_size129280、dim5120、n_layers40、n_heads64、head_dim512、q_lora_rank1280、o_groups8、o_lora_rank1024Transformer 主干尺寸与 MLA 式潜变量注意力投影MoEn_routed_experts384、n_shared_experts1、n_activated_experts6、moe_inter_dim2304、score_funcsqrtsoftplus、route_scale1.5、swiglu_limit10.0每 token 激活 6 个路由专家 1 个共享专家稀疏注意力window_size128、kv_source_layers[2,8,14,20]、index_source_layers[2,8,14,20,24,28,32,36]、compress_ratios42 项、index_n_heads32、index_head_dim128、index_topk512滑窗 128压缩 KV 与索引器的层级共享方案每查询保留 512 个压缩位置候选预过滤candidate_source_layer20、candidate_topk_blocks2048、candidate_block_size8由第 20 层构造候选池限制后续索引层开销与上下文长度解耦RoPE 与长上下文original_seq_len65536、rope_theta10000、rope_factor16、beta_fast32、beta_slow1、compress_rope_theta160000YaRN 外推压缩 KV 使用独立 theta一个潜向量代表多个 token位置间隔更远Engramengram_layer_ids[1,14]、engram_vocab_size16000000、engram_num_embeddings[384006168, 384016682]、engram_max_ngram_size4、engram_n_heads8、engram_head_dim256、engram_pad_id2、engram_compressed_vocab_size99092n-gram 哈希记忆查询仅在少量层注入残差流DSparkdspark_block_size5、dspark_noise_token_id128799、dspark_target_layer_ids[37,38,39]、dspark_markov_rank256、dspark_n_routed_experts128、dspark_n_activated_experts3半自回归草稿头块大小 5目标层为最后 3 层MTPn_mtp_layers3骨干之后追加的草稿层数用于forward_spec视觉vision_n_layers32、vision_dim1024、vision_n_heads16、vision_inter_dim2816、vision_patch_size14、vision_downsample_ratio3、vision_max_n_token1024、vision_min_pixels295936、image_token_id129264、vision_rope_theta10000DeepSeek-ViT2D-RoPE 3×3 pixel-unshuffle 降采样与图像 token 参数数值格式dtypefp8、expert_dtypefp4、norm_eps1e-20稠密层 FP8每 32×32 块一个 scale、专家 FP4每 32 个 K 元素一个 scale见 inference/model.py从 inference/model.py 的forward可以看到这些配置的装配顺序先算 Engram 哈希与文本嵌入、合并图像嵌入再展开为hc_mult份副本进入 Hyper-Connections逐层执行含 Engram 注入、滑窗/压缩注意力、MoE、Sinkhorn 混合最后经norm与head输出 logits 并采样。这套链路与 inference/README.md 列出的架构组件一一对应也是理解整个推理过程的源码级入口。附与编码层的衔接批处理模式下prompt 编码复用encoding/目录的参考实现inference/generate.py 将../encoding加入sys.path支持多轮对话、工具调用、thinking 模式、1–100 数值推理预算、会话中系统消息与交织图像详见 encoding/README.md。TXT 与 JSON 示例编码一致性由 encoding/test_encoding.py 的配对用例tests/test_input_*.json与tests/test_output_*.txt保证可直接用python -m pytest -q test_encoding.py验证。赞分享人工智能大模型多模态【免费下载链接】DeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家MoE模型拥有 5520 亿骨干参数并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入并以自回归方式生成文本项目地址https://ai.gitcode.com/hf_mirrors/deepseek-ai/DeepSeek-V4.1-Flash点击查看免费下载相关推荐RIOT XiPFS 最小示例实践从 Flash 直接执行 FAE 程序的完整指南RIOT XiPFS 最小示例实践从 Flash 直接执行 FAE 程序的完整指南 本篇技术指南围绕 RIOT 仓库中的 xipfs_minimal_exam物联网嵌入式操作系统实时系统DeepSeek-V3权重转换指南FP8到BF16完整流程DeepSeek V3权重转换指南FP8到BF16完整流程 引言为什么需要权重转换 DeepSeek V3作为当前最强大的开源混合专家模型Mixture基础模型大模型NLPDeepSeek在 React 中集成 G6从最小可运行示例到 React 自定义节点的完整实战指南在 React 中集成 G6从最小可运行示例到 React 自定义节点的完整实战指南 导读 本篇指南以 react snippet.md https://li数据可视化前端图表库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表