模型架构
会员专享从 bento_29m.yaml 读懂 BentoLM 的结构和参数规模
BentoLM-29M 不是为了追求大,而是为了让单卡也能完成完整训练链路。小模型的好处是反馈快:配置写错、数据路径不对、loss 异常、checkpoint 保存失败,都能在较短时间内暴露。
29M 这个数字也不是随手定的。参数量主要由三项决定:embedding(vocab_size × hidden_size)、每层的 attention 与 FFN 权重、以及输出头。当 vocab_size 只有 8192、hidden_size 取 512 时,embedding 只占约 4M,剩下的预算才能分给 8 层 Transformer。这个比例很关键,因为如果 embedding 占比过高,模型就把容量花在了记词表而不是学结构上,这是小模型最常见的浪费。
下面的配置文件里,每个字段都对应一处这样的权衡。
关键配置
model:
model_config:
vocab_size: 8192
hidden_size: 512
num_hidden_layers: 8
max_position_embeddings: 512
rms_norm_eps: 1e-5
rope_theta: 10000.0
tie_word_embeddings: true
dropout: 0.0
learning_rate: 3e-4
weight_decay: 0.1
betas: [0.8, 0.95]
warmup_ratio: 0.0
warmdown_ratio: 0.5其中 head_dim 没有写在 YAML 里,代码默认是 128。因此:
num_attention_heads = hidden_size / head_dim = 512 / 128 = 4
intermediate_size = 4 * hidden_size = 2048| 参数 | 含义 |
|---|---|
vocab_size | tokenizer 词表大小,必须和 tokens/metadata.json 对齐 |
hidden_size | residual stream 的宽度 |
num_hidden_layers | Transformer block 层数 |
max_position_embeddings | 预训练样例的最大上下文长度 |
rope_theta | RoPE 频率基底 |
tie_word_embeddings | 输入 embedding 和输出 LM head 是否共享权重 |
登录以继续阅读
这是一篇付费内容,请登录您的账户以访问完整内容。
CookLLM文档