Skip to content
Merged
4 changes: 2 additions & 2 deletions install.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -5636,9 +5636,9 @@ exit 0
@{ P = "RX 7800|RX 7700(?!S)|PRO W7700|PRO V710"; A = "gfx1101" } # RDNA 3 (Navi 32)
@{ P = "RX 7600|RX 7700S|RX 7650|PRO W7600|PRO W7500"; A = "gfx1102" } # RDNA 3 (Navi 33)
@{ P = "780M|760M|740M|Phoenix|Hawk Point|Z1 Extreme|Z2 Extreme"; A = "gfx1103" } # RDNA 3 iGPU (Phoenix / Hawk Point)
@{ P = "RX 6900|RX 6800|RX 6750|RX 6700|PRO W6800|PRO W6900"; A = "gfx1030" } # RDNA 2 (Navi 21) -- gfx103X family
@{ P = "RX 6950|RX 6900|RX 6850|RX 6800|RX 6750|RX 6700|PRO W6800|PRO W6900"; A = "gfx1030" } # RDNA 2 (Navi 21) -- gfx103X family
@{ P = "RX 6650|RX 6600|PRO W6600|PRO W6650"; A = "gfx1032" } # RDNA 2 (Navi 23) -- gfx103X family
@{ P = "RX 6500|RX 6400|RX 6300|PRO W6400|PRO W6500"; A = "gfx1034" } # RDNA 2 (Navi 24) -- gfx103X family
@{ P = "RX 6550|RX 6500|RX 6450|RX 6400|RX 6300|PRO W6400|PRO W6500|PRO W6300"; A = "gfx1034" } # RDNA 2 (Navi 24) -- gfx103X family
)
foreach ($row in $nameArchTable) {
if ($ROCmGpuLabel -match $row.P) {
Expand Down
8 changes: 4 additions & 4 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3426,9 +3426,9 @@ _infer_amd_gfx_arch_from_gpu_name() {
*"RX 7800"*|*"RX 7700"*|*"PRO W7700"*|*"PRO V710"*) echo gfx1101 ;;
*"RX 7900"*|*"PRO W7900"*|*"PRO W7800"*) echo gfx1100 ;;
*"780M"*|*"760M"*|*"740M"*|*"Phoenix"*|*"Hawk Point"*|*"Z1 Extreme"*|*"Z2 Extreme"*) echo gfx1103 ;;
*"RX 6900"*|*"RX 6800"*|*"RX 6750"*|*"RX 6700"*|*"PRO W6800"*|*"PRO W6900"*) echo gfx1030 ;;
*"RX 6950"*|*"RX 6900"*|*"RX 6850"*|*"RX 6800"*|*"RX 6750"*|*"RX 6700"*|*"PRO W6800"*|*"PRO W6900"*) echo gfx1030 ;;
*"RX 6650"*|*"RX 6600"*|*"PRO W6600"*|*"PRO W6650"*) echo gfx1032 ;;
*"RX 6500"*|*"RX 6400"*|*"RX 6300"*|*"PRO W6400"*|*"PRO W6500"*) echo gfx1034 ;;
*"RX 6550"*|*"RX 6500"*|*"RX 6450"*|*"RX 6400"*|*"RX 6300"*|*"PRO W6400"*|*"PRO W6500"*|*"PRO W6300"*) echo gfx1034 ;;
*) return 1 ;;
esac
}
Expand Down Expand Up @@ -4946,9 +4946,9 @@ elif case "$TORCH_INDEX_URL" in */rocm*|*/gfx*) true ;; *) false ;; esac; then
*"RX 7800"*|*"RX 7700"*|*"PRO W7700"*|*"PRO V710"*) _gpu_disp_gfx="gfx1101" ;; # RDNA 3 (Navi 32)
*"RX 7900"*|*"PRO W7900"*|*"PRO W7800"*) _gpu_disp_gfx="gfx1100" ;; # RDNA 3 desktop / workstation (Navi 31)
*"780M"*|*"760M"*|*"740M"*|*"Phoenix"*|*"Hawk Point"*|*"Z1 Extreme"*|*"Z2 Extreme"*) _gpu_disp_gfx="gfx1103" ;; # RDNA 3 iGPU (Phoenix / Hawk Point)
*"RX 6900"*|*"RX 6800"*|*"RX 6750"*|*"RX 6700"*|*"PRO W6800"*|*"PRO W6900"*) _gpu_disp_gfx="gfx1030" ;; # RDNA 2 (Navi 21)
*"RX 6950"*|*"RX 6900"*|*"RX 6850"*|*"RX 6800"*|*"RX 6750"*|*"RX 6700"*|*"PRO W6800"*|*"PRO W6900"*) _gpu_disp_gfx="gfx1030" ;; # RDNA 2 (Navi 21)
*"RX 6650"*|*"RX 6600"*|*"PRO W6600"*|*"PRO W6650"*) _gpu_disp_gfx="gfx1032" ;; # RDNA 2 (Navi 23)
*"RX 6500"*|*"RX 6400"*|*"RX 6300"*|*"PRO W6400"*|*"PRO W6500"*) _gpu_disp_gfx="gfx1034" ;; # RDNA 2 (Navi 24)
*"RX 6550"*|*"RX 6500"*|*"RX 6450"*|*"RX 6400"*|*"RX 6300"*|*"PRO W6400"*|*"PRO W6500"*|*"PRO W6300"*) _gpu_disp_gfx="gfx1034" ;; # RDNA 2 (Navi 24)
esac
if [ -n "$_gpu_disp_gfx" ]; then
substep "gfx arch inferred from GPU name: $_gpu_disp_gfx"
Expand Down
24 changes: 24 additions & 0 deletions studio/backend/tests/test_torch_cpu_build_on_nvidia_host.py
Original file line number Diff line number Diff line change
Expand Up @@ -1179,6 +1179,30 @@ def test_an_ordinary_intel_igpu_does_not_establish_a_mismatch(monkeypatch, tmp_p
assert hw._devices_that_can_establish_a_mismatch(others) == others


def test_an_amd_card_named_only_by_its_marketing_string_establishes_a_mismatch(
monkeypatch, tmp_path
):
"""With no AdapterFamily from the driver, the name is the only arch source, and a
gap in the name table costs both the wheel and the "No visible GPU" panel (#10468).
"""
_shared_setup_1(monkeypatch, tmp_path)
monkeypatch.setattr(hw, "_linux_kfd_reports_an_amd_gpu", lambda: False)

covered = [
{"vendor": "amd", "name": "AMD Radeon RX 6950 XT", "index": 0, "gfx_candidates": []},
{"vendor": "amd", "name": "AMD Radeon RX 6850M XT", "index": 0, "gfx_candidates": []},
{"vendor": "amd", "name": "AMD Radeon RX 6550M", "index": 0, "gfx_candidates": []},
]
for device in covered:
assert hw._devices_that_can_establish_a_mismatch([device]) == [device], device["name"]

# RDNA 1 is declined on purpose: a repair here would reinstall the same CPU wheel.
declined = [
{"vendor": "amd", "name": "AMD Radeon RX 5700 XT", "index": 0, "gfx_candidates": []}
]
assert hw._devices_that_can_establish_a_mismatch(declined) == []


def test_a_nameless_intel_card_counts_once_xpu_was_actually_chosen(monkeypatch, tmp_path):
sys = _shared_setup_1(monkeypatch, tmp_path)
monkeypatch.delenv("UNSLOTH_TORCH_INDEX_URL", raising = False)
Expand Down
4 changes: 2 additions & 2 deletions studio/backend/utils/hardware/hardware.py
Original file line number Diff line number Diff line change
Expand Up @@ -942,9 +942,9 @@ def _torch_reports_a_hip_runtime() -> bool:
(r"RX 7800|RX 7700(?!S)|PRO W7700|PRO V710", "gfx1101"),
(r"RX 7600|RX 7700S|RX 7650|PRO W7600|PRO W7500", "gfx1102"),
(r"780M|760M|740M|Phoenix|Hawk Point|Z1 Extreme|Z2 Extreme", "gfx1103"),
(r"RX 6900|RX 6800|RX 6750|RX 6700|PRO W6800|PRO W6900", "gfx1030"),
(r"RX 6950|RX 6900|RX 6850|RX 6800|RX 6750|RX 6700|PRO W6800|PRO W6900", "gfx1030"),
(r"RX 6650|RX 6600|PRO W6600|PRO W6650", "gfx1032"),
(r"RX 6500|RX 6400|RX 6300|PRO W6400|PRO W6500", "gfx1034"),
(r"RX 6550|RX 6500|RX 6450|RX 6400|RX 6300|PRO W6400|PRO W6500|PRO W6300", "gfx1034"),
]


Expand Down
9 changes: 7 additions & 2 deletions studio/install_python_stack.py
Original file line number Diff line number Diff line change
Expand Up @@ -1922,9 +1922,14 @@ def _dedup_pick(
(r"RX 7600|RX 7700S|RX 7650|PRO W7600|PRO W7500", "gfx1102"), # Navi 33
# RDNA 3 iGPU (Phoenix / Hawk Point)
(r"780M|760M|740M|Phoenix|Hawk Point|Z1 Extreme|Z2 Extreme", "gfx1103"),
(r"RX 6900|RX 6800|RX 6750|RX 6700|PRO W6800|PRO W6900", "gfx1030"), # Navi 21
# RDNA 2 refresh numbers (6950 / 6850M / 6550M) matched nothing and took CPU torch (#10468).
# 6850M XT is Navi 22, filed here like 6750 / 6700: every RDNA 2 row resolves to gfx103X-all.
(r"RX 6950|RX 6900|RX 6850|RX 6800|RX 6750|RX 6700|PRO W6800|PRO W6900", "gfx1030"), # Navi 21
(r"RX 6650|RX 6600|PRO W6600|PRO W6650", "gfx1032"), # Navi 23
(r"RX 6500|RX 6400|RX 6300|PRO W6400|PRO W6500", "gfx1034"), # Navi 24
(
r"RX 6550|RX 6500|RX 6450|RX 6400|RX 6300|PRO W6400|PRO W6500|PRO W6300",
"gfx1034",
), # Navi 24
]


Expand Down
4 changes: 2 additions & 2 deletions studio/setup.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -2749,9 +2749,9 @@ if (-not $HasNvidiaSmi) {
@{ P = "RX 7800|RX 7700(?!S)|PRO W7700|PRO V710"; A = "gfx1101" } # RDNA 3 (Navi 32)
@{ P = "RX 7600|RX 7700S|RX 7650|PRO W7600|PRO W7500"; A = "gfx1102" } # RDNA 3 (Navi 33)
@{ P = "780M|760M|740M|Phoenix|Hawk Point|Z1 Extreme|Z2 Extreme"; A = "gfx1103" } # RDNA 3 iGPU (Phoenix / Hawk Point)
@{ P = "RX 6900|RX 6800|RX 6750|RX 6700|PRO W6800|PRO W6900"; A = "gfx1030" } # RDNA 2 (Navi 21) -- gfx103X family
@{ P = "RX 6950|RX 6900|RX 6850|RX 6800|RX 6750|RX 6700|PRO W6800|PRO W6900"; A = "gfx1030" } # RDNA 2 (Navi 21) -- gfx103X family
@{ P = "RX 6650|RX 6600|PRO W6600|PRO W6650"; A = "gfx1032" } # RDNA 2 (Navi 23) -- gfx103X family
@{ P = "RX 6500|RX 6400|RX 6300|PRO W6400|PRO W6500"; A = "gfx1034" } # RDNA 2 (Navi 24) -- gfx103X family
@{ P = "RX 6550|RX 6500|RX 6450|RX 6400|RX 6300|PRO W6400|PRO W6500|PRO W6300"; A = "gfx1034" } # RDNA 2 (Navi 24) -- gfx103X family
)
function Get-GfxArchFromGpuName {
param([AllowNull()][string]$Name, [object[]]$Table)
Expand Down
4 changes: 2 additions & 2 deletions studio/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2882,9 +2882,9 @@ _setup_supported_gfx_from_name() {
*"RX 7800"*|*"RX 7700"*|*"PRO W7700"*|*"PRO V710"*) _sup_gfx_out="gfx1101" ;; # RDNA 3 (Navi 32)
*"RX 7900"*|*"PRO W7900"*|*"PRO W7800"*) _sup_gfx_out="gfx1100" ;; # RDNA 3 desktop / workstation (Navi 31)
*"780M"*|*"760M"*|*"740M"*|*"Phoenix"*|*"Hawk Point"*|*"Z1 Extreme"*|*"Z2 Extreme"*) _sup_gfx_out="gfx1103" ;; # RDNA 3 iGPU (Phoenix / Hawk Point)
*"RX 6900"*|*"RX 6800"*|*"RX 6750"*|*"RX 6700"*|*"PRO W6800"*|*"PRO W6900"*) _sup_gfx_out="gfx1030" ;; # RDNA 2 (Navi 21)
*"RX 6950"*|*"RX 6900"*|*"RX 6850"*|*"RX 6800"*|*"RX 6750"*|*"RX 6700"*|*"PRO W6800"*|*"PRO W6900"*) _sup_gfx_out="gfx1030" ;; # RDNA 2 (Navi 21)
*"RX 6650"*|*"RX 6600"*|*"PRO W6600"*|*"PRO W6650"*) _sup_gfx_out="gfx1032" ;; # RDNA 2 (Navi 23)
*"RX 6500"*|*"RX 6400"*|*"RX 6300"*|*"PRO W6400"*|*"PRO W6500"*) _sup_gfx_out="gfx1034" ;; # RDNA 2 (Navi 24)
*"RX 6550"*|*"RX 6500"*|*"RX 6450"*|*"RX 6400"*|*"RX 6300"*|*"PRO W6400"*|*"PRO W6500"*|*"PRO W6300"*) _sup_gfx_out="gfx1034" ;; # RDNA 2 (Navi 24)
esac
[ -n "$_sup_gfx_out" ] || return 1
printf '%s\n' "$_sup_gfx_out"
Expand Down
7 changes: 7 additions & 0 deletions tests/studio/install/test_rocm_arch_table_parity.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,13 @@ def _match_ps(rows: list[tuple[str, str]], gpu_name: str) -> str | None:
("AMD Radeon RX 6700 XT", "gfx103X-all"),
("AMD Radeon RX 6600 XT", "gfx103X-all"),
("AMD Radeon RX 6500 XT", "gfx103X-all"),
# RDNA 2 refresh numbers: matched nothing in all seven copies, took CPU torch (#10468).
("AMD Radeon RX 6950 XT", "gfx103X-all"),
("AMD Radeon RX 6850M XT", "gfx103X-all"),
("AMD Radeon RX 6550M", "gfx103X-all"),
# The rest of Navi 24, from the shipped RDNA 2 SKU list.
("AMD Radeon RX 6450M", "gfx103X-all"),
("AMD Radeon PRO W6300", "gfx103X-all"),
]

# Exact gfx ids, transcribed from AMD's ROCm compatibility matrix (the "Radeon GPU" list at
Expand Down
6 changes: 6 additions & 0 deletions tests/studio/test_amd_name_arch_r9700.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,12 @@ $otherNames = @(
@{ N = "AMD Radeon RX 6900 XT"; A = "gfx1030" },
@{ N = "AMD Radeon RX 6600 XT"; A = "gfx1032" },
@{ N = "AMD Radeon RX 6500 XT"; A = "gfx1034" },
# RDNA 2 refresh numbers, not covered by the arms above (#10468).
@{ N = "AMD Radeon RX 6950 XT"; A = "gfx1030" },
@{ N = "AMD Radeon RX 6850M XT"; A = "gfx1030" },
@{ N = "AMD Radeon RX 6550M"; A = "gfx1034" },
@{ N = "AMD Radeon RX 6450M"; A = "gfx1034" },
@{ N = "AMD Radeon PRO W6300"; A = "gfx1034" },
@{ N = "ATI Radeon 9700 PRO"; A = $null },
@{ N = "ATI Radeon 9800 PRO"; A = $null },
@{ N = "AMD Radeon R9 Fury X"; A = $null },
Expand Down
Loading