Commit graph

1 commit

Author SHA1 Message Date
Daniel Han
1942e58171 tests/studio: comprehensive hardware dispatch matrix
Drives every supported hardware profile from a single test host by
spoofing platform, torch.cuda, torch.xpu, torch.version.hip, and
sys.modules['mlx'] so we can exercise the CUDA, ROCm, XPU, MLX, and CPU
dispatch paths deterministically without owning the actual hardware.

Profiles covered (parametrized; add a row to PROFILES to extend):

  nvidia_cuda           Linux x86_64 + cuda available, hip=None
  amd_rocm              Linux x86_64 + cuda available, hip="6.1"
                        (PyTorch ROCm aliases torch.cuda over HIP)
  intel_xpu             Linux x86_64 + cuda off, xpu available
  apple_silicon_mlx     Darwin arm64 + cuda/xpu off + mlx in sys.modules
  apple_silicon_no_mlx  Darwin arm64 + everything off (Mac chat-only fallback)
  linux_arm64_with_mlx  Linux arm64 + mlx in sys.modules -- canary that the
                        system check still guards against accidental hijack
  cpu_only              Linux x86_64 + nothing -- pure CPU fallback

For each profile the suite asserts:

  1. unsloth._IS_MLX (re-evaluated under the spoof) matches expectation.
  2. utils.hardware.detect_hardware() returns the right DeviceType and
     IS_ROCM flag.
  3. utils.hardware.is_apple_silicon() agrees with the platform spoof.

Plus two negative-space canaries:

  test_cuda_takes_priority_over_mlx_when_both_available
      With CUDA AND MLX both present, dispatch must pick CUDA.
      Protects existing GPU users from a future refactor that
      reorders the dispatch.
  test_xpu_takes_priority_over_mlx_when_both_available
      Same canary for Intel/XPU vs MLX.

All 23 tests pass on Linux+CUDA in 1.8s with no real hardware required.
Future regressions in either the unsloth _IS_MLX gate or Studio's
detect_hardware priority order will fail loudly here.
2026-05-06 10:32:00 +00:00