LoadingâŠ
LoadingâŠ
English summary. A 4-step, CFG-free adapter for OpenMOSS-Team/MOSS-Image-SFT
(50 steps à 2 forwards with CFG 3). It continues lodestones/MOSS-Image-SFT-8-steps-dmd
(data-space DMD, arXiv 2610.12102) restricted to 4 iterations, trained with DMAD (arXiv 2610.02188): a LoRA critic on the
frozen teacher separates teacher samples from student samples, and the student minimises the negative critic logit.
DiT time per 1024² image on one H100: 16.2 s (teacher) â 0.81 s. Compared with the lodestones checkpoint run for 4 steps,
images have more detail and livelier composition, with some regressions (see Results). Same file format and sampler as the
lodestones checkpoint; inference.py runs it with the release pipeline. Training code is in code/.
MOSS-Image-SFT(50 ã¹ãããã»CFG 3 ã§ 1 æ 100 åã® DiT èšç®)ãã4 åã®èšç®ã»CFG ãªãã§ç»åãåºããããã«ããé«éåã¢ããã¿ã§ãã lodestones ã® 8 ã¹ãããç(data-space DMDãupdate 2600)ãåºçºç¹ã«ã4 ã¹ãããã«çµã£ãŠ DMAD ã§è¿œå åŠç¿ããŸããã
| DiT æé / 1024² 1 æ(H100) | DiT ã®èšç®åæ° | |
|---|---|---|
| MOSS-Image-SFT(50 stepãCFG 3ãè² åŽ block 22 skip) | 16.2 s | 100 |
| lodestones 8 step | 1.54 s | 8 |
| ãã®ã¢ããã¿(4 step) | 0.81 s | 4 |
(DiT ã®ã¿ã®èšæž¬ãããã¹ããšã³ã³ãŒããš VAE ã¯å«ãŸãªããå®è£
㯠code/rapid_moss/model.pyã)
pip install "diffusers>=0.38" "transformers>=5.3" accelerate safetensors huggingface_hub pillow
python inference.py --prompt "an anime girl in a yellow raincoat at a rainy bus stop at night" --width 1024 --height 1024 --out out.png
ãã¡ã€ã«ã¯ lodestones ãšåã圢åŒã§ãã
| ãã¡ã€ã« | äžèº« |
|---|---|
lora.safetensors |
fp32 LoRAãrank 128 / alpha 128ãå
š 42 ãããã¯ã® proj.{q,k,v,o,ffn_up_gate,ffn_down}ãkohya 圢åŒã®ããŒ(diffusion_model.<module>.lora_down.weight / lora_up.weight / alpha) |
time_embedding.safetensors |
fp32 ã® time_embedding.* ãš shared_block_modulation.bias / video_head_modulation.bias ã®çœ®ãæã |
dataspace.safetensors |
latent_mix.Q [128, 128] ãš step_codes [1000, 968, 926, 871] |
ãµã³ãã©ãŒ(ãã€ãºã®åæ³šå ¥ãã¿ã€ã ã¹ãããã®ã¹ã±ãžã¥ãŒã«ããªããåã z ã䜿ãç¶ãã):
x0 = torch.zeros_like(z) # z: fp32 noise [1, 128, H/16, W/16]
for r in range(4): # 1ã3 åã§æ¢ããŠãç»åã«ãªã(åæ®µéãåŠç¿ããŠãã)
x = z + torch.einsum("oc,bchw->bohw", Q, x0)
x0 = z - transformer(x, codes[r], prompt_embeds, prompt_mask).sample.float()
# x0 ã release ã® VAE ã§ãã³ãŒã(BN ã®éæ£èŠå + 2x2 unpatchify)
LoRA ã®é©ç𿹿³ãCFGãè§£å床ãªã©ã®æ±ºãŸãã¯ãäžã®ã泚æç¹ããèªãã§ãã ããã
ã«ã¹ã¿ã ããŒã comfyui/rapid-moss/ ã忢±ããŠããŸããComfyUI æšæºã® LoraLoaderModelOnly 㯠LoRA ãéã¿ã«ããŒãžããã®ã§ããã®ã¢ããã¿ã«ã¯äœ¿ããŸããããã®ããŒãã䜿ã£ãŠãã ããã
comfyui/moss-image/)ãå
¥ããŸããcomfyui/rapid-moss/ ã ComfyUI/custom_nodes/rapid-moss/ ã«ã³ããŒããŸããComfyUI/models/rapid_moss/rapid-moss-4step/ ã«çœ®ããŸããcomfyui/rapid-moss/example_workflows/rapid-moss-4step.json ãç»é¢ã«ãã©ãã°&ããããããHF Loader ã® model_path ã MOSS-Image-SFT ã®ãã©ã«ãã«ããŠå®è¡ããŸããããŒã MOSS-Image Few-Step Adapter (rapid-moss) ã¯ã次ã®åŠçãã㊠MODEL ãšãå°çšã® SAMPLERã»SIGMAS ãè¿ããŸãã
ããã BasicGuider(CFG ãªã)ãš SamplerCustomAdvanced ã«ã€ãªããŸããlodestones ã® 8 ã¹ãããçããåã 3 ãã¡ã€ã«ãå¥ãã©ã«ãã«çœ®ãã°åãããŒãã§äœ¿ããŸãã
詳ããæé ãšæ³šæç¹ã¯ comfyui/rapid-moss/README.md ã«ãããŸããGPU ã§ã®åäœç¢ºèªã§ã¯ãåŠç¿ã³ãŒãã§äœã£ãç»åãšã»ãŒåãçµµã«ãªããŸãã(äžã®å³)ã1024² 1 æã¯ 4.5ã6.9 ç§(RTX PRO 6000ãããã¹ããšã³ã³ãŒãã»VAE 蟌ã¿)ã§ãã
LoraLoaderModelOnlyãdiffusers ã® fuse_loraãããŒãžæžã¿ã® bf16 éã¿ãæžãåºãããŒã«ãªã©ãããã«åœãããŸããinference.py ããComfyUI ã®ã«ã¹ã¿ã ããŒã(comfyui/rapid-moss/)ã䜿ã£ãŠãã ãããtime_embedding.safetensors ã® 3 ã¢ãžã¥ãŒã«ã眮ãæããfp32 ã§èšç®ããŸããx = z + Q·x0ãx0 = z â v ã 4 åç¹°ãè¿ããtimestep ã«ã¯ step_codes ãæž¡ããŸãã"..." ã§å²ã¿ãŸããtorch.randn(fp32)ã§ããinference.py ãš ComfyUI ã®ããŒãã¯ãåã seed ãªãåããã€ãºã«ãªããŸããå·Šãã teacher(50 step)/ lodestones 8 step çã 4 step ã§äœ¿ã£ããã® / ãã®ã¢ããã¿(4 step)ãåã seedãè©äŸ¡çš 17 ããã³ãã(eval/eval_prompts.jsonlãåŠç¿ã«ã¯æªäœ¿çš)ã
lodestones ã® 4 step ãšæ¯ã¹ãæèŠ(ç®èŠã®ã¿ãæ°å€ææšã§ã¯è©äŸ¡ããŠããŸãã):
çµè«ãšããŠã现éšã¯è¯ããªã£ããäžé·äžçã§ãã
| init(lodestones) | 300 it | 500 it(å ¬éç) | 800 it |
|---|---|---|---|
1girl, solo ãªã®ã« 2 人)ãšæåã厩ããŠãããŸããã841ã850 it ã§ NaN ã«ãªããåŠç¿ãæ¢ããŸãããteacher ãµã³ãã«ã«éæéå€ã¯ãªããåå ã¯ç¹å®ã§ããŠããŸãããçŸåšã®ã³ãŒãã¯éæéã®åŸé
ã§æŽæ°ãé£ã°ããŸããlodestones ã®åœ¢åŒãã®ãŸãŸã§ããx = z + Q·x0, v = net(x, code_r), x0 â z â vã
softplus(âd(teacher ãµã³ãã«)) + softplus(d(çåŸã®åºå))ããã€ãºéã¯ Ï = 5u / (1 + 4u)ãu ~ U[0.02, 0.98] ã§ãteacher ãšçåŸã®çµã§åã Ï ã䜿ããŸããâd(ãã€ãºãè¶³ããçåŸã® x0)ãteacher ã® CFG æšè«ã fake score ããåŠç¿äžã¯äœ¿ããŸããã| é ç® | å€ |
|---|---|
| ããã | 16(8 GPU à 2ã1 ãµã³ãã«ãã€é ã«åŠç) |
| çæåš | AdamW lr 2e-5ãbetas (0, 0.99)ãweight decay 0ãEMA 0.998 |
| critic | AdamW lr 4e-5ãbetas (0, 0.99)ãweight decay 0.01ãçæåšãæŽæ°ããªã 50 it ã®ãŠã©ãŒã ã¢ãã |
| å埩 | 500 it(çæåšã®æŽæ° 450 å)ã1 it çŽ 5.7 ç§ |
| èšç®æ© | RunPod 8ÃH100 SXMãteacher ãµã³ãã«çæçŽ 1.9 æéãåŠç¿ 500 it çŽ 47 å |
| è²»çš | 詊éè»¢ãšæ¯èŒå®éšãå«ããŠèšçŽ $126 |
24,000 ä»¶(åé åžã¯ããŠããŸãã)ãããteacher ãµã³ãã«ãäœã£ã 3,199 ä»¶ãåŠç¿ã«äœ¿ããŸããã
| çš®é¡ | åºå ž(ã©ã€ã»ã³ã¹) |
|---|---|
| ã¢ãã¡ã®èªç¶æãã£ãã·ã§ã³ | BootsofLagrangian/danbooru-multitier-captions-202606(CC-BY-4.0ãGiyeong Oh)ãCaptionEmporium/anime-caption-danbooru-2021-sfw-5m-hq(CC-BY-SA-4.0) |
| ã¿ã°å | äžèšã® Danbooru ã¿ã°ãFredZhang7/anime-prompts-180K(CreativeML OpenRAIL-M)ã絵垫åã¯é€å» |
| äžè¬ | ProGamerGov/synthetic-dataset-1m-dalle3-high-quality-captions(MIT)ãdata-is-better-together/open-image-preferences-v1(Apache-2.0)ãnateraw/parti-prompts(Apache-2.0) |
| æåæç»(æ¥ 60% / è± 25% / äž 15%)ãJSON ã¬ã€ã¢ãŠããçæ | ãã³ãã¬ãŒãããçæ |
æå㯠DMDX(arXiv 2507.18569)ã® ADM ã data-space DMD ã«è¶³ãèšç»ã§ãããADM ã¯ãçæåšã®åºåã«ãã€ãºããããåã x_Ï ãããteacher(CFG ãã)ãš fake score ã® ODE ã Ît = 1/64 ã ãé²ãããã® 2 ã€ãèå¥åšã«èŠåããããæ¹åŒã§ãã
logs/probe_adm_discriminator.jsonl)ã2 ã€ã®å
¥åã®å·®ã¯ Ît·(v_real â v_fake) ã ãã§ã1 æãã€ã®å€å®ã§ã¯ã»ãŒèŠåããããŸãããlogs/probe_teacher_discriminator.jsonl)ãOpenMOSS-Team/MOSS-Image-SFT