DeepSeek-V3 提供灵活的配置选项,允许您自定义模型行为、性能特征和硬件兼容性。本指南解释了如何理解、修改和创建自定义配置文件,以优化模型以适应您的特定用例。
配置文件结构
DeepSeek-V3 使用 JSON 配置文件来定义模型参数。这些文件位于 inference/configs/
目录中,并根据模型大小命名(例如,config_16B.json
,config_236B.json
和 config_671B.json
)。
{
"vocab_size": 102400,
"dim": 2048,
"inter_dim": 10944,
"moe_inter_dim": 1408,
"n_layers": 27,
...
}
配置文件在模型初始化期间加载,并传递给 ModelArgs
数据类,该数据类为任何未指定的参数提供默认值。
核心配置参数
DeepSeek-V3 配置组织成几个逻辑组。下表描述了定义模型架构的核心参数:
参数 | 描述 | 默认值 | 示例值 |
---|---|---|---|
vocab_size | 词汇表大小 | 102400 | 102400 (16B/236B), 129280 (671B) |
dim | 模型隐藏维度 | 2048 | 2048 (16B), 5120 (236B), 7168 (671B) |
n_layers | 变换器层数 | 27 | 27 (16B), 60 (236B), 61 (671B) |
n_heads | 注意力头数 | 16 | 16 (16B), 128 (236B/671B) |
n_dense_layers | 密集层数 | 1 | 1 (16B/236B), 3 (671B) |
dtype | 计算数据类型 | "bf16" | "bf16" (16B/236B), "fp8" (671B) |
这些参数直接影响模型大小、计算需求和性能特征。
来源:config_16B.json,config_236B.json,config_671B.json
专家混合 (MoE) 配置
DeepSeek-V3 使用专家混合架构以实现高效的扩展。以下参数控制 MoE 行为:
参数 | 描述 | 默认值 | 备注 |
---|---|---|---|
inter_dim | MLP 层的中间维度 | 变化 | 10944 (16B), 12288 (236B), 18432 (671B) |
moe_inter_dim | MoE 层的中间维度 | 变化 | 1408 (16B), 1536 (236B), 2048 (671B) |
n_routed_experts | 专家总数 | 变化 | 64 (16B), 160 (236B), 256 (671B) |
n_shared_experts | 共享专家数 | 变化 | 2 (16B/236B), 1 (671B) |
n_activated_experts | 每个标记激活的专家数 | 6 | 6 (16B/236B), 8 (671B) |
n_expert_groups | 专家组数 | 1 | 1 (16B), 8 (236B/671B) |
n_limited_groups | 路由组数 | 1 | 1 (16B), 3 (236B), 4 (671B) |
route_scale | 路由分数的缩放因子 | 1.0 | 1.0 (16B), 16.0 (236B), 2.5 (671B) |
score_func | 路由评分函数 | "softmax" | "softmax" (16B/236B), "sigmoid" (671B) |
这些参数决定了模型如何通过不同的专家网络路由输入,这可能会显著影响性能和生成质量。
多头潜在注意力 (MLA) 配置
多头潜在注意力是 DeepSeek-V3 的一个关键创新。这些参数控制注意力机制:
参数 | 描述 | 默认值 | 示例值 |
---|---|---|---|
q_lora_rank | 查询投影的 LoRA 级别 | 0 | 0 (16B), 1536 (236B/671B) |
kv_lora_rank | 键值投影的 LoRA 级别 | 512 | 512 (所有模型) |
qk_nope_head_dim | 无位置嵌入的查询键维度 | 128 | 128 (所有模型) |
qk_rope_head_dim | 带旋转嵌入的查询键维度 | 64 | 64 (所有模型) |
v_head_dim | 值投影的维度 | 128 | 128 (所有模型) |
这些参数影响注意力的计算以及模型处理序列信息的效率。
来源:model.py
序列长度扩展参数
DeepSeek-V3 包括控制序列长度适应的参数:
参数 | 描述 | 默认值 | 备注 |
---|---|---|---|
max_seq_len | 最大序列长度 | 4096 * 4 | 在 ModelArgs 中设置 |
original_seq_len | 原始训练序列长度 | 4096 | 用于 RoPE 计算 |
rope_theta | 旋转位置编码的基数 | 10000.0 | 影响位置编码 |
rope_factor | 扩展序列的缩放因子 | 40 | 更高值改善扩展上下文 |
beta_fast | 快速 β 校正因子 | 32 | 用于长度外推 |
beta_slow | 慢速 β 校正因子 | 1 | 用于长度外推 |
mscale | 扩展注意力的缩放因子 | 1.0 | 调整较长序列的注意力 |
这些参数在处理比模型原始训练时更长的上下文时尤为重要。
来源:model.py
创建自定义配置文件
要创建自定义配置文件:
- 从现有配置文件作为模板开始
- 根据需要修改参数
- 使用描述性名称保存文件(例如,
config_custom.json
)
以下是一个为具有扩展序列上下文的 16B 模型自定义配置文件的示例:
{
"vocab_size": 102400,
"dim": 2048,
"inter_dim": 10944,
"moe_inter_dim": 1408,
"n_layers": 27,
"n_dense_layers": 1,
"n_heads": 16,
"n_routed_experts": 64,
"n_shared_experts": 2,
"n_activated_experts": 6,
"route_scale": 1.0,
"q_lora_rank": 0,
"kv_lora_rank": 512,
"qk_nope_head_dim": 128,
"qk_rope_head_dim": 64,
"v_head_dim": 128,
"max_seq_len": 32768,
"original_seq_len": 4096,
"rope_factor": 64,
"mscale": 0.9
}
此示例增加了最大序列长度,并调整了 RoPE 缩放参数以提高较长上下文的性能。
来源:model.py
应用自定义配置
要使用自定义配置文件与模型,请在运行 generate.py
时指定您的配置文件路径:
python inference/generate.py --ckpt-path /path/to/model --config /path/to/custom_config.json --interactive
配置权衡和建议
在自定义配置时,考虑以下权衡:
内存与性能
- 更高维度(
dim
,inter_dim
):更好的质量,更高的内存使用 - 更多层(
n_layers
):更好的推理,更高的内存使用 - 精度(
dtype
):"fp8" 使用更少内存,但与 "bf16" 相比可能降低质量
MoE 设置
- 更多激活专家(
n_activated_experts
):更好的质量,更高的计算 - 路由缩放(
route_scale
):更高值增加专家专业化 - 评分函数(
score_func
):"sigmoid" 对较大模型可能更稳定
序列长度
- 扩展上下文(
max_seq_len
):线性增加内存使用 - RoPE 因子(
rope_factor
,mscale
):需要仔细调整以获得最佳长上下文性能
对于大多数用户,我们建议从提供的配置之一开始,并进行最小更改以适应您的特定需求。
来源:model.py
高级:多 GPU 配置
在多个 GPU 上运行时,模型将自动跨可用设备分配专家和注意力头。世界大小在运行时检测并用于分区模型。
无需额外配置,但请注意某些参数应能被 GPU 数量整除:
n_routed_experts
必须能被 world_size 整除n_heads
理想情况下应能被 world_size 整除vocab_size
必须能被 world_size 整除