unsloth/tests
Daniel Han b972214210 CI(consolidated): matrix over (transformers, trl) combos + aggressive CUDA spoof
Two enhancements:

1) Matrix over (transformers, trl) version combos
The single-cell job becomes a 3-cell matrix:
  - "T 4.57.6 + TRL <1": pinned transformers==4.57.6 with the latest TRL
    in the 0.x line (resolves to 0.29.1 today). The just-before-5.x baseline.
  - "T latest 5.x + TRL latest 1.x": absolute upstream tip on both. Today
    that resolves to transformers 5.8.0 + trl 1.3.0 -- both BEYOND
    unsloth/unsloth_zoo's <=5.5.0 / <=0.24.0 caps. The cell exists
    explicitly to surface drift signal.
  - "pyproject.toml pins (dynamic)": resolves the spec from pyproject.toml's
    [project.optional-dependencies][huggingfacenotorch] (where unsloth
    actually pins transformers + trl; top-level [project.dependencies]
    is just typer/pydantic). Resolves to:
      transformers>=4.51.3,!=4.52.{0,1,2,3},!=4.53.0,!=4.54.0,!=4.55.{0,1},!=4.57.{0,4,5},!=5.0.0,!=5.1.0,<=5.5.0
      trl>=0.18.2,!=0.19.0,<=0.24.0

`fail-fast: false` so each cell runs independently. Pinned `pytest==9.0.3`
across cells avoids collection-behavior drift.

2) Aggressive CUDA spoof helper
New file tests/_zoo_aggressive_cuda_spoof.py extends tests/conftest.py:84-141's
import-time harness with deeper patches:
  - Device topology: device_count, current_device, get_device_name,
    get_device_properties (SimpleNamespace-style, A100-shaped: cap=(8,0),
    80 GiB), is_initialized, set_device, synchronize, empty_cache.
  - cudart() wrapper: cudaMemGetInfo / cudaGetDeviceCount / cudaSetDevice.
  - memory module: mem_get_info, memory_stats, memory_allocated,
    max_memory_allocated, memory_reserved, max_memory_reserved,
    reset_peak_memory_stats.
  - nvtx: range_push / range_pop / mark no-op stub.
  - random API: cuda.manual_seed{,_all}, get_rng_state{,_all},
    set_rng_state{,_all} routed to torch CPU RNG.
  - Stream / Event no-op classes.
  - pin_memory drop: torch.{empty,zeros,ones,empty_like,zeros_like,
    ones_like,rand,randn,randint} wrappers strip pin_memory=True kwarg
    (CUDA-host fast-copy has no meaning on a CPU runner; downgrading
    silently is the right behavior here). Tensor.pin_memory() / is_pinned
    no-op.
  - amp.GradScaler stub if torch.cuda.amp doesn't import.

Locally validated effect on the runtime patch_* check:
  - Without spoof: 50 OK / 6 FAIL  (run #7 ledger)
  - With aggressive spoof: 51 OK / 3 FAIL
The 3 remaining failures are real source bugs not CUDA-related:
  - unsloth.models._utils.patch_fast_lora -> NameError 'fast_lora_forward'
  - unsloth.models._utils.patch_linear_scaling -> bare AssertionError
  - unsloth.models._utils.patch_llama_rope_scaling -> bare AssertionError

The three shim test files (_zoo_apply_fused_lm_head_shim.py,
_runtime_patch_check_shim.py, _tiled_mlp_check_shim.py) now import the
spoof helper before any unsloth_zoo import.

Drop `pip show … | head -2` from the post-install version printout in
favor of bare `pip show` (head -2 closes the pipe early under pipefail
and emits exit 120, see the run-#5 fix).
2026-05-07 05:30:52 +00:00
..
python Add Studio PR-time CI: pin enforcement, frontend, backend, wheel smoke (#5298) 2026-05-06 04:41:57 -07:00
qlora Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks" 2025-12-01 07:24:58 -08:00
saving chore: fix typo cleanup across tests and backend strings (#5152) 2026-04-24 12:51:27 +01:00
sh Default Studio host to 127.0.0.1 and prompt before auto-start (#5267) 2026-05-04 13:03:16 +04:00
studio [pre-commit.ci] auto fixes from pre-commit.com hooks 2026-05-07 05:19:53 +00:00
utils feat: Add cactus QAT scheme support (#4679) 2026-04-15 07:40:03 -07:00
__init__.py Qwen 3, Bug Fixes (#2445) 2025-04-30 22:38:39 -07:00
_zoo_aggressive_cuda_spoof.py CI(consolidated): matrix over (transformers, trl) combos + aggressive CUDA spoof 2026-05-07 05:30:52 +00:00
conftest.py Add Studio PR-time CI: pin enforcement, frontend, backend, wheel smoke (#5298) 2026-05-06 04:41:57 -07:00
run_all.sh fix: add tokenizers to no-torch deps and TORCH_CONSTRAINT for arm64 macOS py313+ (#4748) 2026-04-01 06:12:17 -07:00
test_cli_export_unpacking.py studio: stream export worker output into the export dialog (#4897) 2026-04-14 08:55:43 -07:00
test_gemma4_chat_template.py update gema4 chat templates (#5116) 2026-04-22 09:04:08 -07:00
test_get_model_name.py feat: Add support for OLMo-3 model (#4678) 2026-04-15 07:39:11 -07:00
test_loader_glob_skip.py Add unit tests for HfFileSystem glob skip guard (#4854) 2026-04-06 08:54:36 -07:00
test_model_registry.py Revert "[FIX] Vllm guided decoding params (#3662)" 2025-12-01 05:43:45 -08:00
test_peft_weight_converter_compat.py Patch checkpoint reload init functions to strip unsupported args (#5167) 2026-04-29 02:50:49 -07:00
test_raw_text.py Add Studio PR-time CI: pin enforcement, frontend, backend, wheel smoke (#5298) 2026-05-06 04:41:57 -07:00
test_resolve_model_class.py fix: guard resolve_model_class fallback against unresolvable transformers AutoModel entries (#5155) 2026-04-24 05:59:17 -07:00
test_studio_install_workspace_guard.py install: support STUDIO_HOME / UNSLOTH_STUDIO_HOME for custom install paths (#5190) 2026-05-05 23:17:40 -07:00
test_studio_root_resilience.py install: support STUDIO_HOME / UNSLOTH_STUDIO_HOME for custom install paths (#5190) 2026-05-05 23:17:40 -07:00