菜单

权重转换

相关源文件

目的与范围

本文档描述了 DeepSeek-V3 推理管道中的权重转换过程。权重转换系统将模型检查点从 Hugging Face 格式转换为与 DeepSeek-V3 推理系统和各种部署框架兼容的格式。有关文本生成的信息,请参阅 文本生成,有关 FP8 到 BF16 转换的详细信息,请参阅 FP8 到 BF16 转换

概述

权重转换系统是连接模型训练和推理的关键组件。它负责参数重命名、模型并行化的张量分片以及混合专家 (MoE) 参数的正确分发。

来源: inference/convert.py33-96

权重名称映射

转换过程使用预定义的映射字典来将 Hugging Face 格式的参数名称转换为 DeepSeek-V3 格式。这确保了与优化的推理内核的兼容性。

Hugging Face 名称DeepSeek-V3 名称分片维度
embed_tokensembed0
input_layernormattn_norm
post_attention_layernormffn_norm
q_projwq0
q_a_projwq_a
q_a_layernormq_norm
q_b_projwq_b0
kv_a_proj_with_mqawkv_a
kv_a_layernormkv_norm
kv_b_projwkv_b0
o_projwo1
gategate
gate_projw10
down_projw21
up_projw30
normnorm
lm_headhead0
scalescale

来源: inference/convert.py11-30

转换过程

参数转换

转换过程包含多种转换

  1. 删除参数名称中的“model.”前缀
  2. 重命名关键组件(例如,“self_attn”为“attn”,“mlp”为“ffn”)
  3. 根据映射字典重新映射参数名称
  4. 处理权重缩放参数和 MoE 专家等特殊情况

来源: inference/convert.py50-76

模型并行和分片

转换过程通过将参数分片到多个分片来支持模型并行。对于需要分片的参数

  1. 系统检查指定维度是否可被模型并行因子整除
  2. 计算适当的分片大小
  3. 使用 narrow() 提取张量的相关部分
  4. 确保张量在内存中是连续的

来源: inference/convert.py72-76

MoE 专家分发

对于混合专家模型,系统将专家分发到多个模型分片

  1. 每个模型分片包含一部分专家
  2. 专家索引决定了它属于哪个模型分片
  3. 专家平均分发,其中 n_local_experts = n_experts // mp

来源: inference/convert.py68-71

用途

转换实用程序作为命令行工具提供,具有以下参数

参数描述
--hf-ckpt-path包含 Hugging Face 检查点文件的目录路径
--save-path将保存转换后的检查点文件的目录路径
--n-expertsMoE 模型中的总专家数
--model-parallel模型并行因子(分片数)

示例命令

python convert.py --hf-ckpt-path /path/to/hf/model --save-path /path/to/output --n-experts 128 --model-parallel 8

系统将验证专家数是否可被模型并行因子整除,然后继续进行转换。

来源: inference/convert.py88-96

输出格式

转换过程会生成多个输出文件

  1. safetensors 格式的模型参数文件,命名为 model{i}-mp{mp}.safetensors,其中
    • i 是分片索引 (0 到 mp-1)
    • mp 是模型并行因子
  2. 从源目录复制的分词器文件

此格式与 DeepSeek-V3 推理管道以及 SGLang、LMDeploy、TensorRT-LLM、vLLM 和 LightLLM 等各种部署框架兼容。

来源: inference/convert.py78-85

实际考量

在转换 DeepSeek-V3 模型权重时,请注意以下事项

  1. 该过程需要足够的磁盘空间来存放源检查点和转换后的检查点
  2. 内存需求随模型大小而增加
  3. 对于非常大的模型,请设置适当的线程限制以避免过度的内存使用
  4. 转换过程设置了 torch.set_num_threads(8) 来控制内存使用
  5. 层 61 有特殊处理,在当前实现中被跳过

来源: inference/convert.py46-54