【免费下载链接】BLS-Mini-Code-1.0
BLS-Mini-Code-1.0(North Mini Code)是 Cohere 开源的 30B-A3B 稀疏 MoE 代码模型。打开它的仓库,最核心的文件就是 config.json——这个不到百行的 JSON 文件,完整定义了模型的层数、专家数、注意力模式与词表规模。本文将 config.json 中的每个字段逐一拆解,帮你快速读懂这份稀疏MoE模型配置,并附上一份可直接收藏的参数含义清单 📋。
三分钟上手:如何阅读这份MoE配置文件
阅读 config.json 建议按"身份 → 规模 → 注意力 → 专家路由 → 词表"五步走:
- 看身份:
model_type和architectures决定用哪个推理框架加载它; - 看规模:
num_hidden_layers、num_experts等决定显存占用; - 看注意力:
layer_types数组决定了 256K 长上下文的秘密; - 看路由:
expert_selection_fn等字段解释"3B 激活参数"从哪来; - 看词表:
vocab_size与特殊 token 对应 tokenizer.json。
💡 一个冷知识:仓库里还有 generation_config.json,其中的
bos_token_id、eos_token_id等字段直接继承自 config.json(_from_model_config: true),所以读懂前者就能读懂后者。
第1步:确认模型身份——model_type 与 architectures
| 字段 | 值 | 含义 |
|---|---|---|
model_type | cohere2_moe | 模型家族名,推理框架据此选择对应的建模代码 |
architectures | Cohere2MoeForCausalLM | 具体类名:因果语言模型(decoder-only) |
dtype | bfloat16 | 权重存储精度,bf16 是 MoE 大模型的常见选择 |
transformers_version | 5.8.0 | 生成该配置的框架版本,加载时版本过低可能不兼容 |
这 4 个字段出现在 config.json 开头,是加载模型前最先需要核对的信息。
第2步:核心维度——hidden_size 决定模型"宽度"
| 字段 | 值 | 含义 |
|---|---|---|
hidden_size | 2048 | 每个 token 的隐藏向量维度,即模型主干宽度 |
num_hidden_layers | 49 | Transformer 层数,与layer_types数组长度严格一致 |
intermediate_size | 768 | 每个 MoE 专家内部 FFN 的中间维度(单专家较小) |
prefix_dense_intermediate_size | 3072 | 前置稠密层 FFN 的中间维度,比单专家更宽 |
head_dim | 128 | 每个注意力头的维度 |
num_attention_heads | 32 | Query 头数量,32 × 128 = 4096 的 QKV 投影宽度 |
num_key_value_heads | 4 | KV 头数量,远小于 Q 头,说明采用了GQA(分组注意力) |
📌GQA 的含义:32 个 Q 头共享 4 组 KV,显著降低长上下文下的 KV Cache 显存——这对 256K 上下文模型至关重要。你可以通过num_attention_heads / num_key_value_heads = 32 / 4 = 8验证每 8 个 Q 头共享一组 KV。
配套的稳定性参数:
attention_bias: false:线性层不加偏置(现代 Transformer 的惯例);attention_dropout: 0.0:推理时不丢弃注意力权重;layer_norm_eps: 1e-05与rms_norm_eps: 1e-06:归一化层的数值稳定性常数,一般无需改动;initializer_range: 0.02:预训练时的权重初始化标准差,推理阶段无实际作用。
第3步:注意力策略——layer_types 与滑动窗口
这是整份配置里最容易被忽略、却最影响性能的部分。config.json 中layer_types是一个 49 元素的数组,模式非常规整:
full_attention, sliding_attention, sliding_attention, sliding_attention, ...full_attention:全局注意力,能看到全部上下文;sliding_attention:滑动窗口注意力,只看最近sliding_window = 4096个 token。
统计下来正好是1 : 3 的全局/滑动交替比例(12 层 full + 37 层 sliding)。这样设计的好处是:绝大多数层只处理局部 4K 窗口,计算量和显存大幅下降;而每隔 4 层插一层全局注意力,负责跨段信息聚合。配合max_position_embeddings: 500000的位置上限,模型官方支持 256K 上下文与 64K 输出。
相关字段一览:
| 字段 | 值 | 含义 |
|---|---|---|
sliding_window | 4096 | 滑动窗口注意力每层可见的 token 数 |
prefix_dense_sliding_window_pattern | 1 | 前置稠密区滑动窗口的排布模式系数 |
use_parallel_block | true | 注意力与 FFN 并行分支(如 Mixtral 式 Parallel Block),加速前向 |
use_parallel_embedding | false | 首尾嵌入层不与第一/最后一层并行共享 |
use_qk_norm | false | 不启用 Q/K 归一化 |
第4步:稀疏MoE的心脏——128专家与sigmoid路由
MoE(Mixture of Experts,混合专家)是"30B 总参、仅 3B 激活"的关键:每个 token 只经过少数专家,而不是全部。
| 字段 | 值 | 含义 |
|---|---|---|
num_experts | 128 | 每层 MoE 块中的专家总数 |
num_experts_per_tok | 8 | 每个 token 激活的专家数(top-8) |
num_shared_experts | 0 | 没有"共享专家",全部走路由选择 |
expert_selection_fn | sigmoid | 路由器用 sigmoid 给 128 个专家独立打分,再取 top-8 |
norm_topk_prob | false | 不对 top-8 的路由概率重新归一化 |
first_k_dense_replace | 1 | 前 1 层(即第 0 层)用稠密 FFN 代替 MoE |
use_gated_activation | true | 专家 FFN 使用门控激活(SwiGLU) |
hidden_act | silu | 激活函数名,SwiGLU 正是基于 SiLU |
shared_expert_combination_strategy | average | 共享专家输出合并策略(本模型共享专家数为 0,该字段为兼容保留) |
✅用权重索引交叉验证:打开 model.safetensors.index.json 可以发现——model.layers.0.mlp只有gate_proj / up_proj / down_proj三个稠密权重;而从model.layers.1开始,每层出现experts.0到experts.127共128 组专家权重,与上面num_experts: 128、first_k_dense_replace: 1完全吻合。该索引文件还显示模型总参数约304.8 亿(total_parameters: 30484303872),权重切分为 49 个 safetensors 分片。
🧮激活参数从哪来:每 token 每层激活 8/128 的专家。49 层中 48 层是 MoE,粗略一算,激活部分正好落在 3B 量级——这就是"30B-A3B"命名的由来。
第5步:位置编码与词表——支撑长上下文的地基
| 字段 | 值 | 含义 |
|---|---|---|
rope_theta | 50000 | RoPE 旋转位置编码的基频,配合滑动窗口注意力使用 |
rope_scaling | null | 未启用位置插值/外推缩放 |
max_position_embeddings | 500000 | 位置编码支持的最大序列长度上限(官方标注 256K 上下文) |
vocab_size | 262144 | 词表大小,恰好是 2¹⁸,为 256K 词表预留了整数量级 |
logit_scale | 1.0 | 输出 logit 的缩放系数 |
262144 的词表里,绝大多数位置被 BPE 子词占用,末尾 255000~255031 区间则集中放了一组特殊 token(详见下节)。
第6步:特殊 token 与生成配置
| 字段 | 值 | 对应 token |
|---|---|---|
bos_token_id | 2 | <BOS_TOKEN>,句子起始符 |
eos_token_id | 255001 | <\|END_OF_TURN_TOKEN\|>,对话回合结束符 |
pad_token_id | 0 | <PAD>,批处理填充符 |
use_cache | true | 开启 KV Cache,逐 token 生成时必需 |
这些 token 的完整定义可以在 tokenizer_config.json 的added_tokens_decoder中逐一对照,比如255000是<|START_OF_TURN_TOKEN|>、255010/255011是思考标记<|START_THINKING|>与<|END_THINKING|>。对话时它们会由 chat_template.jinja 自动组装,无需手动拼写。
⚠️新手提醒:eos_token_id = 255001而不是常见的 2 或 0。如果你自己写生成代码,务必以 generation_config.json 中的值为准,否则模型可能不知道何时停止输出。
第7步:其余"看起来没看懂"的字段
剩下几个字段属于框架层或训练遗留配置,理解概念即可:
model.safetensors.index.json:不是配置,而是权重分片索引,说明每个张量存在哪个model-0000X-of-00049.safetensors文件里;attention_bias: false+attention_dropout: 0.0:组合起来表示标准无偏置、无丢弃的注意力;layer_norm_epsvsrms_norm_eps:分别对应不同归一化层(LayerNorm / RMSNorm)的 eps,数值不同是正常的。
附:config.json 参数含义速查清单
| 字段 | 值 | 一句话含义 |
|---|---|---|
architectures | Cohere2MoeForCausalLM | 加载用的模型类 |
model_type | cohere2_moe | 模型家族标识 |
dtype | bfloat16 | 权重精度 |
hidden_size | 2048 | 主干隐藏维度 |
num_hidden_layers | 49 | Transformer 层数 |
intermediate_size | 768 | 单专家 FFN 中间维度 |
prefix_dense_intermediate_size | 3072 | 稠密层 FFN 中间维度 |
head_dim | 128 | 注意力头维度 |
num_attention_heads | 32 | Q 头数量 |
num_key_value_heads | 4 | KV 头数量(GQA) |
layer_types | 49 项数组 | 每层全量/滑动注意力排布 |
sliding_window | 4096 | 滑动窗口长度 |
max_position_embeddings | 500000 | 位置编码上限 |
rope_theta/rope_scaling | 50000 / null | RoPE 基频 / 无外推缩放 |
num_experts | 128 | 每层专家总数 |
num_experts_per_tok | 8 | 每 token 激活专家数 |
num_shared_experts | 0 | 共享专家数(无) |
expert_selection_fn | sigmoid | 路由打分函数 |
norm_topk_prob | false | top-k 概率不归一化 |
first_k_dense_replace | 1 | 首层为稠密 FFN |
use_gated_activation | true | SwiGLU 门控激活 |
hidden_act | silu | 激活函数 |
use_parallel_block | true | 注意力/FFN 并行分支 |
use_parallel_embedding | false | 嵌入层不并行共享 |
use_qk_norm | false | 无 QK 归一化 |
attention_bias/attention_dropout | false / 0.0 | 无偏置、无注意力丢弃 |
layer_norm_eps/rms_norm_eps | 1e-05 / 1e-06 | 归一化数值稳定项 |
initializer_range | 0.02 | 权重初始化标准差 |
vocab_size | 262144 | 词表大小 |
bos/eos/pad_token_id | 2 / 255001 / 0 | 特殊 token 编号 |
logit_scale | 1.0 | logit 缩放 |
use_cache | true | 启用 KV Cache |
shared_expert_combination_strategy | average | 共享专家合并策略(兼容保留) |
prefix_dense_sliding_window_pattern | 1 | 稠密区窗口模式系数 |
transformers_version | 5.8.0 | 生成配置的框架版本 |
结语:从配置到运行的最后一步
读到这里,config.json 已经没有秘密了:49 层、128 专家 top-8 路由、1:3 交替的滑动窗口注意力、256K 词表、bf16 精度——这些数字拼起来就是"30B 总参数、3B 激活、面向智能体编程"的完整画像。实际部署时,官方推荐的采样参数是temperature=1.0, top_p=0.95(见 README.md 的 Usage 部分),配合本文明确的 token 与上下文配置,就能把这份稀疏 MoE 模型跑起来了 🚀。
【免费下载链接】BLS-Mini-Code-1.0
相关推荐
SmolDataEnvs数据集字段清单:一行读懂question、answer、reward_mode全字段含义
SmolDataEnvs数据集字段清单:一行读懂question、answer、reward_mode全字段含义 SmolDataEnvs 是一个面向数据分析的
数据集强化学习人工智能数据分析Gemma-4 E2B 决策模型配置全参考:config.json、joint_head 与 optiq_metadata 逐字段清单
Gemma 4 E2B 决策模型配置全参考:config.json、joint_head 与 optiq_metadata 逐字段清单 本文带你逐字段读懂 ge
大模型微调模型量化ASMv2 config.json全解:逐参数读懂多模态大模型的架构配置
ASMv2 config.json全解:逐参数读懂多模态大模型的架构配置 ASMv2 是 OpenGVLab 开源的 多模态大模型 (LLaVA 架构),能够"
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考