Chillilly88/EXP01-AnyHaidass-0920-0.6B
EXP01-AnyHaidass-0920-0.6B
haidass 系列 EXP01 实验:基于 Lance 架构(Mixture-of-Transformers 统一理解 + 生成)的原生多模态预训练,语言基座 Qwen3-0.6B,训练规模 20B token,硬件 8 节点 × 8 昇腾 Ascend 910B3(64 NPU),训练时间 2026-09-20 ~ 09-21(纯计算约 16.9 小时)。
本仓库收录 planA run(集群输出目录 lance-mobile-o-small-pt-6b-8node-planA)的产物:
集群上另有 2B/6B/10B/14B/18B 五个中间检查点未上传本仓库。
1. 模型结构
- 语言骨干配置(Qwen3-0.6B):hidden 1024,28 层,16 注意力头 / 8 KV 头(GQA),headdim 128,FFN 3072,RMSNorm eps 1e-6,RoPE theta 1e6,MRoPE 三轴 (T,H,W)=(16,24,24),maxpositionembeddings 40960,effectivevocab 151,669。
- 生成侧:Wan2.2 48 通道 3D VAE 的 latent 作为生成目标(VAE 冻结,离线预编码),latent patch 1×2×2,patchlatentdim 192,maxlatentsize 64(patch 网格),maxnumframes 121,时间下采样 4。
- 理解侧:Qwen2.5-VL ViT(冻结,离线预编码)提取视觉特征,经 connector 进 LLM。
- 损失:
loss = 0.5 × CE + 0.5 × MSE。CE 为 i2t caption 答案 token 的交叉熵;MSE 为 t2i latent 上 flow-matching 速度回归(t ~ sigmoid(N(0,1)) 重采样,timestep_shift 1.0)。 - 注意力:packed 序列块状稀疏注意力(LancePackedSequence),文本段因果、图像段全注意力。
- 初始化:自
lance-qwen3-06b-init-dcp——Qwen3-0.6B 权重直载 311 张量、generation 专家复制 393 张量、Qwen3 无 attention bias 的 84 个 bias 零初始化。
检查点不包含冻结的 ViT / VAE / tokenizer;推理需另备 Qwen2.5-VL-3B-Instruct(ViT)、Wan2.2_VAE.pth、Qwen3-0.6B(tokenizer)。
2. 训练数据
来源:Amshaker/Mobile-O-Pre-Train(webdataset 格式,全库 2250 tar / 3.96 TB):
- 选片:253 个 tar 分片 ≈ 98 万对(BLIP3o 约 55 万 + JourneyDB 约 43 万,样本配比 1.28 ≈ 官方 1.25)。
- 双任务:每对图-文同时产出 t2i(caption → 图,MSE 监督 latent)与 i2t(图 → caption,CE 监督)两个样本;t2i 有 10% caption 条件 dropout(CFG 式无条件分支)。
- 格式:raw 预训练格式(无 chat template),文档 =
<|im_start|>+ conditioning + completion +<|im_end|>。 - 预编码(离线、冻结编码器):t2i 用 Wan2.2 VAE(存 posterior mean + logvar),i2t 用 Qwen2.5-VL ViT;tokenizer 为 Qwen3-0.6B。
- 分辨率:6 档长宽比桶(21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16),t2i 目标面积 768²(边对齐 32 px),i2t 目标面积 616²(对齐 28 px);LANCZOS 缩放 + 中心裁剪。768² 下每图约 582 个 latent token,616² 下每图约 484 个 ViT token。
- 打包:76,250 条 packed 序列,每条期望 14K / 上限 16K token(单卡单步一条),平均 14,254 token,数据集总量 1.087B token。
- 训练消耗:20.0B token ≈ 18.4 epoch(随机重排);每步 64 条序列 ≈ 912,285 token(区间 878K~919K),约 830 个 t2i + 830 个 i2t 样本;逐步 token 构成平均:MSE(生成 latent)52.5%、ViT + 条件文本约 45.5%、CE(理解答案)2.1%。
3. 训练配置
4. 训练过程与 loss 曲线
时间线(2026-09-20 ~ 09-21):
- 02:52 从 init DCP 全新启动;phase 1:iter 1~6577(0 → 6.0B token),08:02 干净收尾存
iter_0006577; - 08:02 ~ 12:46 停机(训练目标由 6B 扩至 20B);
- 12:46 resume:iter 6578~21923(6.0 → 20.0B token),09-21 00:40 存最终
iter_0021923(累计 20,000,020,572 token,1,403,072 个 packed 序列)后结束。
里程碑 loss(EMA,α=0.02;总 loss = 0.5·CE + 0.5·MSE):
- 首 step loss 11.19(CE 15.26 / MSE 7.13);grad norm 从 205 降至 <1。
- CE(理解)在 6B 后持续快速下降(0.35 → 0.08)——数据约 18 epoch 重复,caption 逐步记忆化(见 §6 I2T 匹配率);
- MSE(生成)在 6B 后进入 ~0.29 平台,20B 时 0.28,改善趋缓。
5. 速度统计
TFLOPS 按 6 × N × token吞吐 估算(前向+反向),未计 attention 的 O(L²) 项;MoT 下每 token 只过单一专家,故给出稠密等价与路由有效两个口径。planA 关闭梯度重计算与 reshard,是该 run 的速度优化选择(对照组沿用重计算配置,分片拓扑不变)。6. 评测
协议:每 2B token 检查点各评一次(训练期由独立 watcher 在空闲 NPU 上执行,后期检查点为训练结束后并行补评):
- T2I:10 条训练集 caption(固定 prompt 集,GT 参考图/文见
references/)→ 768×768 生成图;flow-matching Euler 采样,20 步,CFG text scale 4.0(cfginterval [0.4, 1.0],global renorm),timestepshift 3.5,逐 prompt seed 2025~2034; - I2T / T2T:各 10 条,greedy 解码,raw 预训练续写格式(无 chat template),
text_results.json含生成文本、token ids 与参考 caption。
I2T 参考.caption 精确复现率(10 条中逐字命中数;18 epoch 重复下的记忆化趋势):
目录:eval/token_XXXXXXXXXXXX/ 下——eval.log(运行日志)、text_results.json(20 条 I2T/T2T 生成)、t2i/(10 张 PNG + lance_native_inference.json 采样配置与几何;references/ 仅 2B/4B 目录有 GT)。
7. 仓库结构
EXP01-AnyHaidass-0920-0.6B/
├── README.md
├── assets/ # loss 曲线 + 速度统计图
├── eval/ # 10 个 token 里程碑的评测产物(85 MB)
│ └── token_002000000000 ... token_020000000000/
├── logs/
│ ├── node0.log # phase1 rank0 完整训练日志(每步 loss/ce/mse/耗时)
│ ├── node0-resume20b.log # resume 段 rank0 完整日志
│ ├── node1~7.log / node1~7-resume20b.log # 其余节点启动日志(rank0 之外无逐步输出)
│ ├── eval_watcher.log # 训练期评测 watcher 日志
│ └── latest_checkpointed_iteration.txt
├── iter_0004385/ # 4.000B token
├── iter_0008770/ # 8.001B token
├── iter_0013154/ # 12.000B token
├── iter_0017539/ # 16.000B token
└── iter_0021923/ # 20.000B token(最终)检查点格式(每个目录 ≈ 15 GB):PyTorch Distributed Checkpoint(DCP)
__<rank>_<shard>.distcp× 1024:64 rank × 16 分片;.metadata:DCP 索引(801 个模型张量 + 800 组优化器状态);extra_state/extra_state_rank_*.pt× 64:各 rank 训练状态(迭代号、消耗 token 数等);lance_checkpoint.json:摘要,如最终检查点{"iteration": 21923, "consumed_train_tokens": 20000020572, "consumed_train_samples": 1403072, "ema": false, "status": "completed"};- 内容 = bf16 模型参数 + fp32 AdamW 双动量(FSDP2 分片),非 HF safetensors 格式。
各检查点对应 token 数(lance_checkpoint.json 实测):4385→4,000,292,859;8770→8,000,735,817;13154→12,000,135,175;17539→16,000,413,390;21923→20,000,020,572。
8. 检查点加载与复现
- 代码:MindSpeed-MM 仓库,分支
codex/lance-native-mindspeed-training,commitda816a7a; - 加载:按上述分支构建 Lance 模型后用
torch.distributed.checkpoint加载(或走仓库内inference_lance_native.py/scripts/check_lance_native_artifacts.py路线); - 推理外部依赖:Qwen2.5-VL-3B-Instruct(ViT 权重)、
Wan2.2_VAE.pth、Qwen3-0.6B(tokenizer); - 训练编排(集群路径):
examples/lance/config/train_local/launch_lance_mobile_o_small_20b_8node.sh(prepare/launch/status)→pretrain_lance_mobile_o_small_20b_8node.sh→scripts/pretrain_lance_native.sh,配置fsdp2_pt_mobile_o_small_20b_8node.yaml; - 数据管线:tar→parquet→双任务预编码→16K 打包,见
scripts/prepare_lance_native_data.py/scripts/pack_lance_native_data.py(几何契约:latent patch 1×2×2、maxlatentsize 64、maxnumframes 121,打包 expected 14K / max 16K)。
9. 数据与许可
- 训练数据权利归上游:BLIP3o 与 JourneyDB 各自遵循其原始许可(Amshaker/Mobile-O-Pre-Train);
- 初始化权重:Qwen3-0.6B(Apache-2.0);离线编码器:Qwen2.5-VL(Apache-2.0)、Wan2.2 VAE(Apache-2.0);
- 本仓库为实验记录用途发布,不构成可用产品承诺;请遵守上述上游许可后再分发。
Generated 2026-09-23, from cluster artifacts of run `lance-mobile-o-small-pt-6b-8node-planA`.
