--- license: apache-2.0 language: [en] tags: [masked-diffusion, mdlm, text-diffusion, quentin-dlm] --- # mdlm-owt-diff1 — summary-conditioned MDLM (DIFF_1), 100k steps **DIFF_1** from the `quentin-dlm` cascade: a masked-diffusion LM finetuned from [`kuleshov-group/mdlm-owt`](https://huggingface.co/kuleshov-group/mdlm-owt) to generate OpenWebText documents conditioned on a coarse summary prefix. - Layout `[summary 256 | text 768]` @ L1024; prefix always revealed (never masked); masked-CE NELBO on the text region only. `time_conditioning=False`. - 169.6M vendored Duo DiT backbone, GPT-2 tokenizer, vocab 50258 (`[MASK]`=50257, pad=eos=50256). - Data: [`EER6/openwebtext-coarse`](https://huggingface.co/datasets/EER6/openwebtext-coarse) (doc_idx >= 2048; first 2048 held out). - Recipe: 100k steps, global batch 384 (8x GH200 DDP), lr 3e-4 cosine (warmup 500), AdamW(0.9, 0.95), wd 0, bf16, EMA 0.99. - **These are the EMA weights of checkpoint-100000** (DiT backbone state_dict, same layout as mdlm-owt: `model.safetensors` at repo root). Results / caveats: held-out val NELBO 2.996 (ppl 20.0) vs trash-prefix control 3.293 (26.9) — strong conditioning (samples reproduce ~44% of summary content words, 5.5x the shuffled baseline). NOTE: the hot 100k finetune degraded *sampling* fluency (gen-PPL ~207 @512 steps vs ~59 for the base model); see RESULTS_MDLM_100K.md in the project repo for the full diagnosis (earlier checkpoints sample better; remasking samplers recommended). Load (project code): `duo_core.load_model("EER6/mdlm-owt-diff1", 1024, 50258, device)` or as `--init_ckpt EER6/mdlm-owt-diff1` in `train/train_big_mdlm.py`. Companion control: [`EER6/mdlm-owt-trash`](https://huggingface.co/EER6/mdlm-owt-trash).