Navers lab
← Task gallery
discrete graph diffusion

DiGress graph diffusion on QM9

Improve molecular generation on fixed QM9 without hydrogens

What the agent may check

validity_uniqueness_novelty higher is better · available throughout the four hours

What decides the score

nll lower is better · run afterwards, never visible to the agent

How this task ran

Shipped method
digress_discrete_graph_diffusion
Method source
cvignac/DiGress@780242b8d3e7d78316bb5cf90c639fb0cd4c6079
Training data
QM9 hydrogens-removed, pinned preprocessing revision
Agent budget
4 h on 1×B300
Retrain budget
12 h, 3 checkpoints kept, best valid of up to 3
Container
8 CPU · 64 GB RAM · no network

Across the 29 configurations that attempted it, the mean score is 0.089, the best single result is 0.129 (GPT-5.6 Sol at xhigh), and 16 configurations finished below the code the repository already shipped.

What is in the box

solution/ the agent may rewrite all of it

  • run.sh
  • train.py

harness/ frozen; runs outside the workspace

  • fast_eval.py
  • fast_eval.sh
  • final_eval.py
  • gpu_phase_lock.py
  • grade.py
  • timer.sh

environment/ the pinned image

  • assets.lock.yaml
  • check_image.py
  • Dockerfile
  • Dockerfile.base
  • lightning_gloo_fallback.py
  • patch_bounded_training.py
  • patch_preprocessed_only.py

Pinned assets

  • data/qm9_no_hQM9 hydrogens-removed, revision digress-qm9-noh-v1, pinned tree manifest in assets.lock.yaml
  • data/qm9_train_valderived train/validation-only tree; validation aliases the datamodule test filename

The instruction, as the agent received it

Improve molecular generation on the fixed QM9-without-hydrogens data. The shipped solution uses discrete graph diffusion; that implementation is the starting point rather than a prose-level algorithm restriction.

You have up to four hours for exploration. Do not run work only to consume time, but do not treat a submit-ready candidate as completion. Preserve each trustworthy candidate as a fallback and continue scientifically meaningful exploration while the remaining budget can support experiments whose results can be completed and interpreted.

Before submitting, check the remaining budget and the plausible directions that have not yet been tested. A candidate being better than the current reference, loadable, reproducible, or artifact-valid establishes that it is a fallback; none of those facts alone establishes that exploration is complete. The default action when substantial usable budget remains is to continue exploring, analyzing, or validating.

Early submission is appropriate only when no further meaningful experiment can be completed and interpreted within the remaining budget. Do not submit merely because the current candidate is good enough or has passed its validation checks.

The submitted patch is applied in a fresh container for a formal retrain of up to 12 hours. Formal retraining starts from fresh Hydra state and fixed data, not from an exploration checkpoint.

Your submission must encode a long-running recipe designed to make meaningful use of the formal training budget. It must not normally terminate early only because of a short fixed step or epoch limit.

Your formal recipe may decide when and how often to save complete and loadable checkpoints. Save each checkpoint under /out/checkpoints/checkpoint-<progress>/, where <progress> is numeric and increases with training or construction progress.

If more than three valid checkpoints are produced, only the three with the greatest <progress> values will be accepted. Every accepted checkpoint will be evaluated independently, and the run's official result is the best valid final score among them. The harness handles final artifact collection and final evaluation.

Each checkpoint directory must contain a complete model.ckpt loadable by the frozen DiGress evaluator.

Evaluation and data boundary

Exploration and retraining receive a derived train/validation-only asset. The pinned DiGress datamodule requires a test-named tensor during setup, so this asset contains a byte-identical alias of validation at the expected test filename; it does not contain the real test tensor or raw test data. Only the score phase mounts the complete frozen asset containing the real test split.

The headline fast metric is validity_uniqueness_novelty, the product of those three rates, and higher is better. Fast evaluation also reports validation NLL, where lower is better. The final metric is the upstream test nll, also lower-is-better. The fast headline and final metric are therefore not the same quantity; use validation NLL and molecule diagnostics to interpret a proxy result rather than treating the composite as a direct estimate of final NLL.

Sampling in the shipped implementation is not deterministic. Do not assume that setting a training seed makes two generated molecule sets identical; use the observed variability when deciding whether another comparison is informative. Formal scoring uses the frozen evaluator outside the submitted workspace. Do not import external molecule data or weights, reconstruct the real test tensor, access evaluator-only files during training, implement an evaluation-specific lookup, or change metric direction.

Shipped solution reference

The current shipped solution has the following B300 results under the declared upstream test-NLL protocol:

MeasurementResult
One-epoch training start, final test NLL78.05
Current shipped solution, final test NLL (lower is better)69.57
Change from training start-8.48 (10.86% lower)
Formal training time3305.81 s
Final scoring time2108.34 s
Sampled molecules in final scoring10,000
Validity / uniqueness / upstream novelty0.9805 / 0.9769 / 0.5190

Work surface

Read /workspace/run.sh, /workspace/train.py, the shipped configuration, datamodule, objective, and sampler. Everything under /workspace is editable, including row use and augmentation, architecture, transition or generation model, objective, batching, optimizer, schedule, checkpointing, and sampling implementation. These examples are illustrative, not exhaustive; they do not restrict any other change within the fixed task boundaries.

The available train/validation asset defines the training-data universe; a candidate may select, reweight, resample, augment, or otherwise use those rows. It must not infer or fabricate the real test split from the compatibility alias. The formal artifact only needs to be loadable by the frozen scoring interface and produce the declared upstream test NLL; candidate-authored algorithm labels or tensor-name heuristics should not determine validity.

Running experiments

Use a new output directory for every probe:

OUTPUT_DIR=/out/probe-name bash /workspace/run.sh
/opt/harness/fast_eval.sh /out/probe-name/checkpoint/last.ckpt
/opt/harness/timer.sh

Preserve optimizer and epoch counts, train and validation NLL, molecule diagnostics, examples per second, peak memory, resolved Hydra configuration, checkpoint hash, evaluator payload, and failures. Stop a failed candidate on non-finite NLL, OOM, fixed-data drift, evaluator-contract failure, or a missing or unloadable checkpoint. Stopping one candidate does not by itself end exploration.

Formal replay

Formal replay applies only candidate.patch, starts with fresh Hydra and output state, and invokes exactly:

bash /workspace/run.sh

Exploration checkpoints, generated molecules, caches, and environment-only overrides do not cross phases. The real test asset remains absent until the separate score phase.

Submission

A smoke or startup check proves only that the code can begin; it is not performance evidence.

Before ending exploration, wait for every training, evaluation, and background command and read its result, or stop it explicitly and record why. Preserve the best trustworthy candidate as a fallback while exploring other directions.

Before the final action, verify that the source is runnable and that the patch contains no generated data, checkpoint, cache, or evaluator artifact.

Before submitting, verify that the patch encodes the long formal recipe and checkpoint-saving policy described above.

When no further meaningful experiment can be completed and interpreted within the remaining budget, verify the final source and artifacts, then run /opt/harness/submit.sh as the final action. If no candidate is trustworthy, use /opt/harness/no_candidate.sh "reason". Deadline capture is recovery only and is not a normal submission path.