Model or dataset
pengzhangzhi/Open-dLLM avatar
pengzhangzhi/Open-dLLM

Open-dLLM: a diffusion code model that ships the pretraining pipeline, not just the weights

Open diffusion language model for code generation — releasing pretraining, evaluation, inference, and checkpoints.

654 stars50 forksPythonApache-2.0

At a glance

What is it?
The repository releases data, training code, evaluation and checkpoints for a 0.5B diffusion language model for code. The interesting part is the full stack; the caveat is that almost nothing here is validated outside the authors' own configs.
Who is it for?
Adopt Open-dLLM if you are researching diffusion decoding for code and need training code plus a 0.5B checkpoint to modify, rather than a model to put behind an API. Skip it if you need a production code assistant today: the released checkpoint is 0.5B, the install pins CUDA 12.3, torch 2.6.0 and flash-attn 2.7.4.post1, and the README's own benchmark table does not yet show an Open-dCoder row.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 57 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap Open-dLLM is aimed at: diffusion LLM repos that publish weights only

The README makes a direct claim about the field it sits in. Most diffusion LLM repositories, it says, release inference scripts and weights and nothing else, which makes the published numbers hard to reproduce. The comparison table in the README lists LLaDA and Dream as having inference and weights but no data and no training code, and marks their evaluation as limited. Gemini-Diffusion, Seed Diffusion and Mercury are listed as API-only with nothing released. Open-dLLM positions itself as the row where data, training code, inference, evaluation and weights are all present. That framing is the project's whole argument, and it is a reasonable one: if you want to change how the diffusion process schedules token unmasking, weights alone are useless to you. The audience is therefore narrow and specific. It is people who intend to retrain, fine-tune or re-evaluate a diffusion model for code, not people shopping for a code completion endpoint. The released model is named Open-dCoder at 0.5B parameters, which tells you the intended use is experimentation at a scale that fits on one GPU rather than a competitive coding assistant.

Masked diffusion generation: what diffusion_generate actually does at inference

The quickstart shows the mechanism more clearly than the prose does. The model class is imported from veomni.models.transformers.qwen2.modeling_qwen2 as Qwen2ForCausalLM, so the architecture underneath is Qwen2. Diffusion behaviour is added through a separate generation path: MDMGenerationConfig, imported from veomni.models.transformers.qwen2.generation_utils, and a method called diffusion_generate on the model. The config carries max_new_tokens, steps and temperature. The steps parameter is the tell. An autoregressive decoder emits one token per forward pass; a masked diffusion decoder runs a fixed number of denoising steps over a sequence of masked positions, so steps=200 with max_new_tokens=128 means the model revisits the whole output block many times before committing. That is the source of the parallel-decoding behaviour the project is built around, and it is also where the cost sits: you are trading a large number of forward passes for the ability to fill positions in any order. The README also documents representation alignment, described as a way to adapt autoregressive LMs into diffusion LMs with a claimed 4x speedup, pointing to a paper titled Don't Retrain, Align and a tutorial at docs/representation_alignment.md. That path matters because it means you can start from an existing autoregressive checkpoint instead of pretraining from scratch, which is the difference between a project you can run on a workstation and one you cannot.

Installing Open-dLLM: pinned CUDA, pinned torch, pinned flash-attn

The install instructions are unusually specific and that specificity is a constraint, not a convenience. The README uses micromamba and installs the CUDA toolkit from the nvidia/label/cuda-12.3.0 channel, then torch==2.6.0 from the cu121 index, then flash-attn==2.7.4.post1 from the flash-attention release index. The remaining dependency list is long and pinned where it matters: transformers==4.54.1, liger-kernel==0.5.8, triton>=3.1.0, pyarrow>=15.0.0, plus tensordict, torchdata, accelerate, datasets, peft, hf-transfer, codetiming, hydra-core, wandb and ninja. Hydra-core in that list implies config-driven training, which lines up with the README's claim of transparent configs for reproducibility. Two install steps are easy to miss: pip install -e . installs the local package, and pip install lm-evaluation-harness/ human-eval-infilling/ installs vendored directories as packages, which means the evaluation harness is a submodule in the repository rather than a PyPI dependency. If you clone without submodules, those two commands fail. The version pinning across CUDA 12.3, torch 2.6.0 and flash-attn 2.7.4.post1 is the kind of combination that breaks quietly on a different driver, so treat this as a recipe to follow literally rather than a list of suggestions.

The evaluation suite covers infilling, which most code benchmarks ignore

The benchmarks listed are HumanEval, HumanEval+, MBPP, MBPP+, HumanEval-Infill and SantaCoder-FIM, run through lm-eval-harness plus custom metrics. The infilling pair is the part worth noting. Fill-in-the-middle is a natural fit for a masked diffusion model, since the model already works by predicting masked positions rather than by continuing a prefix, and the README frames the evaluation suite as covering both standard generation and infilling. The published results table includes LLaDA at 8B, Dream at 7B, Mask DFM at 1.3B and Edit Flow at 1.3B across Pass@1 and Pass@10 for the four generation benchmarks. What the table does not contain, in the material available, is a completed Open-dCoder row. The model is demonstrated through a QuickSort generation example and a video, not through a benchmark line. That is the single most important thing to check before you build anything on this: the evaluation code is released, but the headline numbers for the released 0.5B checkpoint are not shown alongside it. A 0.5B model should not be expected to sit near an 8B one, and the README does not claim it does.

Where Open-dLLM is the wrong tool

The 0.5B parameter count is the first limit. For code completion inside an editor, where latency and suggestion quality both matter, a half-billion-parameter diffusion model with a multi-step denoising loop is not a drop-in replacement for a small autoregressive model, and the README offers no latency numbers for diffusion_generate. The steps parameter makes this worse in a way you control: fewer steps means faster and worse, more steps means slower and better, and there is no published curve telling you where that trade sits. The second limit is the sampling path itself. The quickstart loads the model with trust_remote_code=True, which means you are executing model code from the Hugging Face repository, and it imports Qwen2ForCausalLM and MDMGenerationConfig from the local veomni package rather than from transformers. That coupling means the model ID and the installed package version have to agree; upgrading transformers past 4.54.1 is not obviously safe. The third limit is scope. This is a code model. The benchmarks are all Python code tasks, the demo is a sorting algorithm, and nothing in the material suggests general chat or non-code generation is a target. If you need a general-purpose diffusion LLM, LLaDA or Dream are the names the README itself points at, and both are larger.

Open-dLLM against LLaDA and Dream: full stack versus usable weights

The honest comparison is not about benchmark scores, because the README's table shows LLaDA at 8B and Dream at 7B beating a 1.3B Mask DFM by wide margins on HumanEval, and Open-dCoder at 0.5B is smaller still. The comparison is about what you can do with the repository. LLaDA and Dream, as described in the README's own table, give you inference and weights: you can run them and read their numbers, and their evaluation is marked limited. Open-dLLM gives you the pretraining pipeline, the datasets, the evaluation suite and the checkpoints. The difference in practice is that with LLaDA or Dream, changing the noise schedule or the unmasking order means writing that code yourself and hoping your reimplementation matches theirs. With Open-dLLM, that code is in the repository. The trade is scale against control. If your goal is the best pass rate on HumanEval today, the larger models in the table are the ones with published numbers. If your goal is to understand or modify how a diffusion code model is trained and scored, the smaller model with the full pipeline is the more useful artifact.

Licence, maintenance and what upgrading costs you

The repository is Apache-2.0, which permits commercial use and modification and includes a patent grant. That is a permissive choice and it applies to the code. It does not automatically settle the status of the released checkpoints or the training data, and the README does not state which datasets are used or under what terms, so if you plan to redistribute a fine-tuned derivative, check the model card on Hugging Face and the dataset provenance separately. This is a description of what the licence text covers, not legal advice. On maintenance, the repository is not archived and the last push recorded is 2026-07-20, with a v1.0 release carrying a DOI published on 2026-03-01. A DOI matters here: it means the release is meant to be citable as a fixed artifact, which is a signal that the authors care about reproducibility over rapid iteration. The practical upgrade cost is the pinning. transformers==4.54.1, torch==2.6.0, flash-attn==2.7.4.post1 and liger-kernel==0.5.8 form a tested set, and moving any one of them means re-validating the custom model code loaded through trust_remote_code. Budget for that before you plan a dependency refresh.

Editorial conclusion

Adopt Open-dLLM if you are researching diffusion decoding for code and need training code plus a 0.5B checkpoint to modify, rather than a model to put behind an API. Skip it if you need a production code assistant today: the released checkpoint is 0.5B, the install pins CUDA 12.3, torch 2.6.0 and flash-attn 2.7.4.post1, and the README's own benchmark table does not yet show an Open-dCoder row. Before committing, verify three things yourself: that fredzzp/open-dcoder-0.5B loads with trust_remote_code=True under your transformers version, that lm-evaluation-harness and human-eval-infilling install as vendored submodules, and that MDMGenerationConfig accepts the steps and temperature values you intend to sweep.

Official sources

  1. License: Apache-2.0
  2. pengzhangzhi/Open-dLLM on GitHub
  3. Project website
  4. README
  5. Releases
Community notes

Community notes