unsloth/.github/workflows
Daniel Han 0e1ed88bb8
version-compat CI: fake CPU training runs for SFT/GRPO/DPO (#6965)
* version-compat CI: fake CPU training runs for SFT/GRPO/DPO

Adds a runtime layer on top of the patch-run canary: actually runs
trainer.train() for a couple of steps on a CPU-only runner under the CUDA
spoof, wrapping a plain tiny HF model in the Unsloth-patched trainer. Exercises
the real train() loop (collation, generation, the injected
_get_per_token_logps_and_entropies, loss, backward, optimizer) so a TRL or
transformers change that breaks the loop at runtime -- not just the source
structure -- surfaces here. No GPU, no meaningful numerics.

Needs a chain of small CPU shims (eager torch.compile, dynamo suppress, cuda
tensor-alloc redirect to CPU, model.for_training/for_inference equivalents)
documented inline. Does not exercise Unsloth's Triton/GPU kernels (CPU can't).

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* cpu fake-train: force adamw_torch + disable dynamo for CPU runner

On a real CPU-build torch runner (GitHub CI) two things bit that a CUDA-build
torch with GPUs hidden masked locally:

- The default optimizer is adamw_8bit (bitsandbytes), whose is_on_gpu() check
  dies on CPU tensors. Force optim=adamw_torch in all three configs.
- import unsloth reinstalls the real torch.compile over the eager passthrough,
  so the GRPO hot path (chunked_selective_log_softmax) actually compiles and
  inductor picks the spoofed CUDA device, crashing on device props
  (gcnArchName). Re-apply the eager passthrough after import and flip
  torch._dynamo.config.disable so every @torch.compile runs eager at call time.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* cpu fake-train: write checkpoints under pytest tmp_path

Use pytest's tmp_path for each trainer's output_dir instead of a hardcoded
relative temp/ci_* path, so a local pytest run does not leave untracked dirs in
the repo tree and the tests are CWD-independent.

* version-compat CI: disable dynamo at process level for the fake-run job

Set TORCHDYNAMO_DISABLE / TORCH_COMPILE_DISABLE in the fake-run step env so
dynamo/inductor is off before conftest.py's early import unsloth, not only via
the per-test runtime shim. Defense in depth on the GPU-less runner: the GRPO
hot path never compiles regardless of when its functions were decorated.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-07-08 04:06:28 -07:00
..
consolidated-tests-ci.yml Auto Xet to HTTP download fallback in from_pretrained; share Studio's fallback via unsloth_zoo (#6638) 2026-07-06 05:13:25 -07:00
cross-platform-parity-ci.yml Run cross-platform parity test on Windows and macOS in CI (#6241) 2026-06-12 03:40:50 -07:00
lint-ci.yml Lint CI: diff import-hoist check against the PR merge-base, not the base tip (#6190) 2026-06-11 04:23:41 -07:00
local-agent-guides-ci.yml CLI: Rename unsloth connect to unsloth start (#6613) 2026-07-03 08:17:27 -07:00
lockfile-audit.yml CI: pin lockfile-audit actions to commit SHAs (#6902) 2026-07-06 07:11:33 -07:00
mlx-ci.yml CI: add PyPI extra-index to CPU torch installs to fix sympy resolution (#6660) 2026-06-29 17:35:26 -03:00
notebooks-ci.yml CI: add PyPI extra-index to CPU torch installs to fix sympy resolution (#6660) 2026-06-29 17:35:26 -03:00
ossf.yml Create ossf.yml (#6952) 2026-07-07 17:10:01 -07:00
release-desktop.yml Verify linuxdeploy AppImage digest before use in desktop release (#6673) 2026-06-25 20:45:24 -07:00
security-audit.yml Package scanners: cut false positives and make the CI gate blocking (#6355) 2026-06-16 01:46:15 -07:00
stale.yml CI: scope GITHUB_TOKEN permissions, add MLX CI, unblock ~60 skipped tests (#5312) 2026-05-11 03:19:13 -07:00
studio-api-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-backend-ci.yml [Studio] Add --with-llama-cpp-dir installer flag to reuse a local llama.cpp (#6472) 2026-07-02 22:11:20 +01:00
studio-export-capability-ci.yml Studio: multi-select export formats, portable FP8/INT8, GGUF LoRA, and source parity (#6767) 2026-07-03 08:25:10 -07:00
studio-frontend-ci.yml Frontend CI: hard-fail unreviewed npm install scripts (#6139) 2026-06-10 06:10:16 -07:00
studio-inference-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-load-orchestrator-ci.yml studio: unblock /load event loop on detect_audio_type (#5642, #5635) (#5669) 2026-05-22 05:47:58 -07:00
studio-mac-api-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-mac-inference-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-mac-install-matrix.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-mac-ui-smoke.yml Harden flaky Studio CI: retry VS-hide rename and tolerate same-URL nav interrupt (#6713) 2026-06-26 19:45:46 -07:00
studio-mac-update-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-tauri-smoke.yml Fix Linux AppImage packaging (#6657) 2026-06-24 19:40:00 -07:00
studio-ui-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-update-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-windows-api-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-windows-inference-smoke.yml Harden Windows Pester install against missing PSGallery (#6892) 2026-07-05 20:25:41 -07:00
studio-windows-ui-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
studio-windows-update-smoke.yml Withhold HF_TOKEN from pull_request CI runs (#6600) 2026-06-23 03:59:12 -07:00
version-compat-ci.yml version-compat CI: fake CPU training runs for SFT/GRPO/DPO (#6965) 2026-07-08 04:06:28 -07:00
wheel-smoke.yml ci: drop cache: 'npm' from setup-node (silent abort on Windows) (#5474) 2026-05-15 20:49:05 -07:00