LogoCookLLM文档
LogoCookLLM文档
首页CookLLM

原理精讲

词元化
Tokenization 基础BPE 算法详解GPT 系列 TokenizerBPE 训练工程化
模型架构
Transformer LM
从 token ids 到 logitsEmbedding 与 LM Head
Attention 机制
Self-Attention 到 GQAAttention Sink
位置编码
位置编码基础RoPE 数学推导RoPE 代码实现长度外推
GPU 编程基础
GPU 架构基础张量布局Triton 入门:向量加法
FlashAttention
Flash Attention 原理详解从朴素实现到 Auto-TuningBlock Pointer 与多维支持Causal Masking 优化Grouped Query Attention反向传播实现
分布式训练
数据并行ZeRO 优化器全分片数据并行张量并行流水线并行多维混合并行
推理优化
KV CacheContinuous BatchingPagedAttention

动手训练

概述
预训练
预训练数据Tokenizer 训练模型架构数据流水线训练循环监控与验证
X (Twitter)
预训练

模型架构

会员专享

从 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 占比过高,模型就把容量花在了记词表而不是学结构上,这是小模型最常见的浪费。

下面的配置文件里,每个字段都对应一处这样的权衡。

关键配置

configs/model/bento_29m.yaml
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。因此:

由 hidden_size 和 head_dim 推导
num_attention_heads = hidden_size / head_dim = 512 / 128 = 4
intermediate_size = 4 * hidden_size = 2048
参数含义
vocab_sizetokenizer 词表大小,必须和 tokens/metadata.json 对齐
hidden_sizeresidual stream 的宽度
num_hidden_layersTransformer block 层数
max_position_embeddings预训练样例的最大上下文长度
rope_thetaRoPE 频率基底
tie_word_embeddings输入 embedding 和输出 LM head 是否共享权重

登录以继续阅读

这是一篇付费内容,请登录您的账户以访问完整内容。

Tokenizer 训练

使用 RustBPE 训练 BPE tokenizer,并导出 tiktoken 编码

数据流水线

理解 Parquet shard 如何变成 input_ids、labels 和 attention_mask

目录

关键配置
模型前向流程
BentoLM 用到的现代技巧
为什么先用 29M