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)的产物:
| 内容 | 说明 |
|---|---|
iter_0004385 / iter_0008770 / iter_0013154 / iter_0017539 / iter_0021923 | 5 个 DCP 检查点,对应 4B / 8B / 12B / 16B / 20B token(每约 15 GB) |
eval/token_000000000000 ~ token_020000000000 | 全部 10 个 2B 间隔检查点的评测产物(2B ~ 20B) |
logs/ | rank0 完整训练日志(逐 step)+ 各节点启动日志 + 评测 watcher 日志 |
assets/ | 训练 loss 曲线与速度统计图 |
集群上另有 2B/6B/10B/14B/18B 五个中间检查点未上传本仓库。
1. 模型结构
| 模块 | 参数量 | 说明 |
|---|---|---|
language_model.embed_tokens | 155.58M | 词嵌入,vocab 151,936 × 1024 |
language_model.layers(×28 层 × 双专家) | 881.16M | MoT 双专家:每层 understanding 与 generation(*_moe_gen)两套完整参数(attention + MLP 逐层复制),token 级路由,每 token 只过一个专家;单专家 440.58M |
language_model.lm_head | 155.58M | 与 embed_tokens 同源初始化(tie_word_embeddings),运行时为独立参数 |
latent_pos_embed | 130.02M | latent 3D sincos 位置表(126,976 × 1024),冻结不训练 |
connector | 3.15M | LanceVisionConnector(fc1-GELU-fc2),ViT 特征 2048 → LLM 1024 |
vae2llm / llm2vae / time_embedder | 0.20M / 0.20M / 1.31M | latent↔LLM 桥接与 flow-matching 时间嵌入 |
| 合计(物化) | 1.33B | 可训练 1.20B(除冻结的 latent_pos_embed) |
- 语言骨干配置(Qwen3-0.6B):hidden 1024,28 层,16 注意力头 / 8 KV 头(GQA),head_dim 128,FFN 3072,RMSNorm eps 1e-6,RoPE theta 1e6,MRoPE 三轴 (T,H,W)=(16,24,24),max_position_embeddings 40960,effective_vocab 151,669。
- 生成侧:Wan2.2 48 通道 3D VAE 的 latent 作为生成目标(VAE 冻结,离线预编码),latent patch 1×2×2,patch_latent_dim 192,max_latent_size 64(patch 网格),max_num_frames 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):
| 子集 | 说明 |
|---|---|
| BLIP3o | 网络图 + 短 caption(约 27~116 字符),官方约 5M 对 |
| JourneyDB | Midjourney 高清图 + 英文描述,官方约 4M 对 |
- 选片: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. 训练配置
| 项 | 值 |
|---|---|
| 硬件 | 8 节点 × 8 Ascend 910B3(共 64 NPU),容器 mindspeed-mm |
| 框架 | MindSpeed-MM Lance 原生训练分支(commit da816a7a,分支 codex/lance-native-mindspeed-training) |
| 并行 | FSDP2 fully_shard,TP=1,64 路分片;param_dtype bf16,reduce_dtype fp32 |
| 显存策略(planA) | 关闭梯度重计算、reshard_after_forward=false(用 HBM 换速度,前后向各一次 all-gather),fwd/bwd prefetch 1 |
| 优化器 | AdamW(fused),β=(0.9, 0.95),eps=1e-15,weight_decay=0,grad clip 1.0 |
| 学习率 | 1e-4 恒定,2500 步线性 warmup(0 起) |
| batch | micro_batch 1 × 64 rank × grad_accum 1 = 64 packed 序列/步 ≈ 912K token/步 |
| 调度 | 按 token 存盘:每 2B token 一个检查点;先跑 6B 目标,后扩展为 20B 断点续训 |
| 其他 | seed 2025,EMA 关闭,log_interval 1(每步全量日志) |
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):
| token | iter | 总 loss | CE | MSE |
|---|---|---|---|---|
| 0.1B | 100 | 5.02 | 7.16 | 2.89 |
| 0.5B | 500 | 1.67 | 2.30 | 1.04 |
| 2B | 2193 | 0.83 | 1.25 | 0.42 |
| 4B | 4385 | 0.51 | 0.69 | 0.34 |
| 6B | 6577 | 0.33 | 0.35 | 0.31 |
| 8B | 8770 | 0.25 | 0.19 | 0.30 |
| 10B | 10962 | 0.21 | 0.12 | 0.30 |
| 12B | 13154 | 0.20 | 0.11 | 0.30 |
| 14B | 15347 | 0.21 | 0.12 | 0.29 |
| 16B | 17539 | 0.20 | 0.10 | 0.29 |
| 18B | 19731 | 0.19 | 0.09 | 0.29 |
| 20B | 21923 | 0.18 | 0.08 | 0.28 |
- 首 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. 速度统计

| 指标 | 值 |
|---|---|
| 单步耗时(排除前 50 步热身) | p50 2.656 s,均值 2.777 s,p90 3.261 s,p99 3.831 s,max 13.0 s |
| 吞吐 | 328.7K token/s(≈ 1.183B token/小时),1297 步/小时 |
| phase 1 / resume p50 | 2.673 s / 2.644 s(两阶段稳定一致) |
| 有效计算时长 | 21,923 步 × 平均 2.78 s ≈ 16.9 h(墙钟约 21.8 h,含 4h45m 目标扩展停机) |
| 等效算力(6N 近似,N=1.17B 全矩阵参数) | ≈ 2.31 PFLOPS(64 NPU 合计)≈ 36 TFLOPS/NPU |
| MoT 路由有效算力(每 token 单专家 ~0.45B 活跃参数) | ≈ 0.88 PFLOPS ≈ 14 TFLOPS/NPU |
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(cfg_interval [0.4, 1.0],global renorm),timestep_shift 3.5,逐 prompt seed 2025~2034; - I2T / T2T:各 10 条,greedy 解码,raw 预训练续写格式(无 chat template),
text_results.json含生成文本、token ids 与参考 caption。
I2T 参考.caption 精确复现率(10 条中逐字命中数;18 epoch 重复下的记忆化趋势):
| token | 2B | 4B | 6B | 8B | 10B | 12B | 14B | 16B | 18B | 20B |
|---|---|---|---|---|---|---|---|---|---|---|
| 命中/10 | 0 | 1 | 2 | 3 | 8 | 8 | 9 | 8 | 9 | 8 |
目录: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、max_latent_size 64、max_num_frames 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.