端到端多模态模型。输出:统一 lm_head(文本/Agent)+ 连续 image/audio 生成(flow)+ 可训 codec。
- 数据组织(唯一规范) — 目录、manifest、mixture、训练入口
- Tokenizer / 词表建议 — 多语语料清单、ByteLevel BPE、65K/128K、下载与混合
- 模型设计 — 含 20M→10B 档位与参数对齐说明
- 训练蓝图
- 早期数据计划
查看配置真实参数量(默认 meta,不占权重内存):
PYTHONPATH=src python scripts/model_summary.py --config configs/model/ling_156m.json --breakdown
# 大模型勿加 --materialize;小模型调试才需要| 路径 | 标记 | Loss |
|---|---|---|
| 理解图/声 | <|image_start|> / <|audio_start|> + image_path(s) / audio_path(s) |
loss_codec + text CE |
| 生成图/声 | <|image_gen_start|> / <|audio_gen_start|> + image_gen_path(s) |
loss_image_flow / loss_audio_flow |
| 纯文本 | 无模态标记 | text CE |
- 多样本多图:同一条里可有多对 marker,配
image_paths/image_gen_paths列表。 - continuous 默认跳过
image_codes(需像素路径)。 - Flow 只打在 gen 槽;理解不做 flow。
block_size截断后会同步裁剪pixel_values,避免无效 encode。- 图像几何:
slots=(H/patch)×(W/patch),预算默认max_image_slots=10000。
详见 docs/tokenizer.md。默认 多语言 ByteLevel BPE + NFC + 逐位数字切分;正式语料下载与混合见该文档 §4。
PYTHONPATH=src python scripts/train_tokenizer.py \
--input data/corpus/tokenizer_mix.jsonl \
--output-dir outputs/tokenizer-ling-v0 \
--vocab-size 65536 --digit-mode individual
PYTHONPATH=src python scripts/check_tokenizer.py --tokenizer outputs/tokenizer-ling-v0# 样例多模态布局(含 text/understand/gen 分片 + gen 加权 mixture)
PYTHONPATH=src python scripts/prepare_mm_sample.py --output examples/mm_data --hidden 384
# tokenizer(样例语料仅够 smoke;正式请换大语料,见 docs/tokenizer.md)
PYTHONPATH=src python scripts/train_tokenizer.py \
--input examples/mm_data/manifests/train.jsonl \
--output-dir outputs/tokenizer-ling-v0 --vocab-size 512
# 开训前自检(数据流 + understand≠flow + 梯度)
PYTHONPATH=src python scripts/check_train_ready.py
# 联合预训练(默认 TensorBoard;自定义 loss/batch 指标会写入 dashboard)
PYTHONPATH=src python scripts/train.py \
--stage pretrain \
--model-config configs/model/ling_40m.json \
--tokenizer outputs/tokenizer-ling-v0 \
--data-root examples/mm_data \
--mixture-config examples/mm_data/mixture.json \
--train-config configs/train/pretrain.json \
--output-dir outputs/ling-20m-mm \
--block-size 256 --max-steps 5 --no-pack-documents \
--dataloader-num-workers 0 \
--report-to tensorboard \
--run-name ling-20m-mm-smoke真实数据按 docs/data-layout.md 放 manifests/ + raw/;用 mixture / 样本 weight 提高 gen 占比,盯 loss_text ≈ loss_*_flow。
接入点在 scripts/train.py → HF TrainingArguments.report_to + Trainer.log()。
| 方式 | 命令 / 配置 |
|---|---|
| TensorBoard(默认) | --report-to tensorboard 或 train-config "report_to": ["tensorboard"] |
| W&B | --report-to wandb --wandb-project ling-model --run-name my-run |
| 两者 | --report-to tensorboard wandb |
| 关闭 | --report-to none |
pip install -e ".[monitor]" # tensorboard + wandb
tensorboard --logdir outputs/ling-20m-mm/tb
# W&B: 先 wandb login,再 --report-to wandb会打到 dashboard 的自定义指标(除 HF 自带 loss / learning_rate / grad_norm):
train/loss_*:loss_text、loss_image_flow、loss_audio_flow、loss_codec、总losstrain/n_*:各 head 有效 token/slot 数train/ratio_*_over_text:flow/codec 相对 text CE 的量级比(失衡会 stdout WARNING)train/share_text_tokens/share_mm_tokensbatch/*:本 step 是否有 pixel/gen_pixel/audio、slot 数、bsz
pip install -e ".[dev,perc,monitor]" # perc=VGG-LPIPS;monitor=TB/W&B
PYTHONPATH=src python -m pytest
PYTHONPATH=src python scripts/verify_model.py