unsloth/tests/studio/install
Daniel Han 96b9e4659b fix(studio/rocm): multi-GPU selection, Strix sibling handling, defensive cleanups
Round 4 robustness pass based on 5 parallel Opus reviewers of head 21773215.
Seven items from across regression / edge-case / error-paths / architecture
reviews:

1. studio/backend/main.py BNB gate: aligned with the broad ROCm check used
   everywhere else in this PR (torch.version.hip OR 'rocm' in __version__).
   AMD SDK / Radeon Linux wheels do not always populate torch.version.hip;
   without this, main.py would silently skip BNB_ROCM_VERSION while worker.py
   set it.

2. studio/install_python_stack.py _install_bnb_windows_rocm: init _ok = False
   before the try block. Without this, if pip_install_try itself raises
   (e.g. OSError on uv binary missing), the finally block restored env vars
   correctly but the subsequent `if not _ok:` raised UnboundLocalError,
   masking the original exception.

3. studio/install_python_stack.py _detect_windows_gfx_arch:
   - Rewrote to use re.findall (not re.search) on both hipinfo and amd-smi
     output, dedup tokens preserving order, and select via new
     _pick_visible_index() helper.
   - HIP_VISIBLE_DEVICES / ROCR_VISIBLE_DEVICES (first comma entry, integer)
     now picks the right GPU on multi-AMD-GPU hosts. Out-of-range or non-int
     values fall back to the first GPU (matches detect_host behaviour in
     install_llama_prebuilt.py).

4. studio/install_python_stack.py Strix override now consults the runtime
   target before flipping:
   - Previous behaviour intersected gfx_codes with {gfx1151, gfx1150} and
     picked the first Strix arch, ignoring whether HIP_VISIBLE_DEVICES
     selected a non-Strix sibling (e.g. discrete RX 7900 in a mixed APU+dGPU
     box). Could install Strix-specific wheels onto a gfx1100 dGPU.
   - Now resolves the runtime gfx via _pick_visible_index() and only
     overrides when that runtime target is in the Strix set.

5. studio/backend/main.py + studio/backend/core/training/worker.py: ROCm
   version dir scan no longer sorts lexically. Previous sort placed "10.0"
   before "7.0" alphabetically, which would mis-prioritise ROCm 10.x bin
   dirs once AMD ships them. New _ver_key() splits on "." and sorts
   numerically with a string fallback.

6. install.sh Strix override URL: replaced ${var%/} (strips one trailing
   slash) with a while-loop that strips all trailing slashes, matching
   Python's .rstrip("/"). A user setting UNSLOTH_AMD_ROCM_MIRROR with
   "http://corp/whl///" no longer ends up with "http://corp/whl///gfx1151/"
   which strict pip proxies (artifactory, sonatype) 404 on.

7. studio/install_python_stack.py: bumped torch import probe timeout from
   30s to 90s. PyTorch's lazy .so loading can take 60-90s on cold NFS or
   USB-backed venvs. The shorter timeout was producing a false "torch
   missing" classification and reinstalling a working ROCm torch.

Tests: 231 passed, 1 skipped. sim_5301 30 cases pass (added 7 new sims for
multi-GPU detection, Strix sibling handling, and _ok-init regression).
2026-05-19 10:54:19 +00:00
..
conftest.py tests: add coverage for Windows ROCm install paths and worker patches 2026-05-15 01:21:29 -05:00
smoke_test_llama_prebuilt.py Add installer test coverage for prebuilt llama.cpp changes (#4756) 2026-04-01 06:06:29 -07:00
smoke_test_parallel_studio_home.py tests/studio/install: parallel UNSLOTH_STUDIO_HOME smoke test (#5306) 2026-05-07 02:26:58 -07:00
test_install_llama_prebuilt_logic.py Fix Linux prebuilt installs for branch-based llama.cpp releases (#5493) 2026-05-17 07:16:55 -07:00
test_llama_pr_force_and_source.py tests: raise pwsh/bash subprocess timeout from 10s to 60s (#5463) 2026-05-15 14:18:04 -07:00
test_pr4562_bugfixes.py Update test_pr4562_bugfixes.py for simplified install policy (#4817) 2026-04-03 04:06:14 -07:00
test_rocm_support.py fix(studio/rocm): multi-GPU selection, Strix sibling handling, defensive cleanups 2026-05-19 10:54:19 +00:00
test_selection_logic.py Studio: download paired cudart bundle on Windows CUDA installs (#5322) 2026-05-11 05:42:05 -07:00