Skip to content

feat: add CAFUNE-mini experiment foundation - #8

Merged
Rukafuu merged 3 commits into
mainfrom
feature/cafune-mini
Sep 2, 2026
Merged

feat: add CAFUNE-mini experiment foundation#8
Rukafuu merged 3 commits into
mainfrom
feature/cafune-mini

Conversation

@Rukafuu

@Rukafuu Rukafuu commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • add an isolated 7.07M CAFUNE-mini configuration for controlled ablations
  • validate every branch push and run the mini sanity training in CI
  • document collaboration and experiment-record conventions

Validation

  • GitHub Actions: Python contracts and Julia smoke + mini sanity training passed before this documentation update.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 85a3253003

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread julia/main_training.jl
Comment on lines +101 to +102
config_path = ARGS[index + 1]
normpath(isabspath(config_path) ? config_path : joinpath(pwd(), config_path))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Honor data paths from the selected experiment config

When a tokenizer or dataset ablation is passed through --config, only its [model] table affects training: SPM_CONFIG, SPM_TOKENS, and DATA_SPLITS remain hard-coded at lines 109–111. Such a run is therefore labeled and checkpointed as the custom experiment while silently training on the canonical tokenizer, dataset, and splits, invalidating the comparison; derive these paths from the selected TOML and validate the corresponding split manifest.

AGENTS.md reference: AGENTS.md:L20-L23

Useful? React with 👍 / 👎.

Comment thread julia/main_training.jl
const CKPT_DIR = BITNET_MODE ? joinpath(SCRIPT_DIR, "checkpoints", SANITY_MODE ? "sanity" : "", "bitnet") :
(SANITY_MODE ? joinpath(SCRIPT_DIR, "checkpoints", "sanity") : joinpath(SCRIPT_DIR, "checkpoints"))
const VARIANT_DIR = BITNET_MODE ? "bitnet" : EXPERIMENT_NAME
const CKPT_DIR = BITNET_MODE ? joinpath(SCRIPT_DIR, "checkpoints", SANITY_MODE ? "sanity" : "", EXPERIMENT_NAME, "bitnet") :

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the existing BitNet checkpoint paths

With the default config and --bitnet, EXPERIMENT_NAME is baseline, so normal and sanity runs now write under checkpoints/baseline/bitnet and checkpoints/sanity/baseline/bitnet. Existing checkpoints under checkpoints/bitnet are no longer resumed, and julia/bitnet_inference_smoke.jl still looks for checkpoints/sanity/bitnet, causing the documented sanity-to-inference flow to fail.

Useful? React with 👍 / 👎.

Comment thread .github/workflows/ci.yml
Comment on lines +44 to +45
- name: Run CAFUNE-mini training sanity check
run: julia --project=julia julia/main_training.jl --config config/experiments/cafune-mini.toml --sanity

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep training out of the verification workflow

Every push and pull-request verification now invokes main_training.jl --sanity; that path calls train!, performs optimizer updates, evaluates the result, and writes checkpoints rather than merely checking syntax or a forward/backward primitive. This directly turns CI verification into a training run despite the repository's explicit verification contract.

AGENTS.md reference: AGENTS.md:L44-L44

Useful? React with 👍 / 👎.

Comment thread julia/main_training.jl
Comment on lines +114 to +115
SANITY_MODE ? (EXPERIMENT_NAME == "baseline" ? joinpath(SCRIPT_DIR, "checkpoints", "sanity") : joinpath(SCRIPT_DIR, "checkpoints", "sanity", EXPERIMENT_NAME)) :
EXPERIMENT_NAME == "baseline" ? joinpath(SCRIPT_DIR, "checkpoints") : joinpath(SCRIPT_DIR, "checkpoints", EXPERIMENT_NAME)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Isolate the training log for each experiment

Although custom checkpoints are routed into an experiment-specific directory here, every non-sanity run still appends to the shared julia/training_log.jsonl without recording an experiment identifier. Running CAFUNE-mini and the baseline therefore interleaves incompatible epoch and validation-loss series, which python/dashboard.py and python/wandb_logger.py consume as one continuous run; route the log alongside the experiment checkpoint or add an experiment discriminator.

Useful? React with 👍 / 👎.

@Rukafuu
Rukafuu merged commit 0b7ccff into main Sep 2, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant