DeepSeek V4导出ONNX需绕过官方封装,可通过四种路径实现:一、Hugging Face标准导出(需transformers≥4.45.2);二、手动建模+权重注入;三、ONNX Graph Surgeon图修复;四、DeepSeek官方export工具链(v4.1+)。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您拥有 DeepSeek V4 模型并希望将其导出为 ONNX 格式以支持跨平台推理(包括 Windows DirectML 加速),则需绕过官方未直接开放的 PyTorch 原生权重封装方式,通过模型结构重建与权重加载机制完成导出。以下是实现此目标的多种可行路径:
一、基于 Hugging Face Transformers + torch.onnx.export 的标准导出
该方法适用于 DeepSeek V4 已被社区适配至 transformers 库(如通过 transformers>=4.45.0 及对应 modeling_deepseek 模块),可复用标准导出接口,兼容 DirectML Runtime 的 ONNX 输入约束(如要求所有张量维度静态或声明 dynamic_axes)。
1、安装适配版本:执行 pip install transformers==4.45.2 accelerate onnx onnxruntime-directml,确保包含 DirectML 后端支持。
2、加载模型与分词器:使用 AutoModelForCausalLM.from_pretrained("deepseek-ai/DeepSeek-V4") 加载模型,并设置 torch_dtype=torch.float32(DirectML 当前不支持 FP16 输入)。
3、构造示例输入:生成 shape 为 (1, 256) 的 input_ids 张量及对应 attention_mask,调用 model.prepare_inputs_for_generation() 获取完整 forward 所需参数。
4、执行导出:调用 torch.onnx.export(),指定 opset_version=18(DirectML 要求 ≥17),并显式声明 dynamic_axes={"input_ids": {0: "batch", 1: "seq"}, "attention_mask": {0: "batch", 1: "seq"}}。
二、手动构建模型图并绑定权重的底层导出
当 transformers 未提供 DeepSeek V4 官方支持时,需依据公开架构文档(如 RoPE 配置、Qwen-style RMSNorm、GQA 分组查询注意力)手动实现模型类,再注入已知权重文件(如 safetensors 格式的 model.safetensors),从而获得可控的计算图导出入口。
1、解析权重文件:使用 safetensors.torch.load_file("model.safetensors") 加载全部参数,按命名规则映射至自定义模块(如 self.q_proj.weight → q_proj.weight)。
2、禁用梯度与启用 eval 模式:执行 model.eval().requires_grad_(False),确保导出图不含训练相关节点(如 Dropout)。
3、定义 dummy_input:构造 torch.randint(0, 32000, (1, 128)) 作为 input_ids,并同步生成 position_ids 和 attention_mask,满足 RotaryEmbedding 输入要求。
4、导出时启用 tracing:使用 torch.jit.trace(model, (input_ids, position_ids, attention_mask)) 获取 ScriptModule,再传入 torch.onnx.export() 进行转换。
Qwen 视频智能分析基础客户端(免费版),基于 Qwen 3.5 Plus 多模态模型对本地视频进行内容分析,支持场景描述与基础内容理解,采用默认抽帧频率和提示词,适合快速概览视频,API Key 读取自 ~/.skill-platform/skill-platform.json 的 skills 配置。
三、通过 ONNX Graph Surgeon 修改已有 ONNX 模型以适配 DirectML
若已存在非 DirectML 兼容的 ONNX 模型(例如含 unsupported op: 'SoftmaxCrossEntropyLoss' 或动态 batch 维度未对齐),可利用 onnx-graphsurgeon 工具进行图级修复,避免重新导出耗时过程。
1、加载原始 ONNX 模型:使用 gs.import_onnx(onnx.load("deepseek_v4_raw.onnx")) 构建可编辑计算图。
2、替换不支持算子:定位所有 LayerNormalization 节点,将其替换为 ReduceMean + Sub + Pow + ReduceMean + Add + Sqrt + Div 等等效子图(DirectML 对原生 LayerNorm 支持有限)。
3、固定输入维度:将 input_ids 的第一个维度由 -1 改为 1,并在 model.graph.input[0].type.tensor_type.shape.dim[0].dim_value = 1 中显式赋值。
4、保存修复后模型:执行 onnx.save(gs.export_onnx(graph), "deepseek_v4_directml.onnx"),验证输出节点名与 shape 是否匹配预期。
四、使用 DeepSeek 官方 export 工具链(v4.1+ SDK 内置)
DeepSeek 自 v4.1 版本起在 deepseek-export CLI 工具中集成 ONNX 导出通道,该工具自动处理 RoPE 编码位置偏移、KV Cache 初始化逻辑及 FlashAttention 替换策略,输出模型默认启用 --use-directml-compatible 标志。
1、安装专用工具:运行 pip install deepseek-export==4.1.3,确认其依赖项包含 onnx==1.16.0 与 onnxruntime-directml==1.19.0。
2、准备配置文件:创建 export_config.json,指定 "model_path": "./deepseek-v4-checkpoint"、"max_seq_len": 2048、"dtype": "fp32"。
3、触发导出命令:执行 deepseek-export onnx --config export_config.json --output deepseek_v4_dm.onnx,工具将自动插入 IOBinding 兼容占位符节点。
4、校验模型属性:使用 onnxruntime.DirectSession("deepseek_v4_dm.onnx") 初始化会话,检查是否报错 "No provider available for node type"。










