mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-04 20:02:07 +00:00
fix(oci): offer what the AMD GPU can run without warning about ROCm support
This commit is contained in:
@@ -962,15 +962,14 @@ def _ask_immich_acceleration(ui, rootfs_storage: str | None = None) -> tuple[str
|
||||
return software
|
||||
# Recognition on an AMD GPU depends on ROCm: it is offered when the host
|
||||
# can run it, marked as experimental on a GPU ROCm does not support
|
||||
# officially, and left out, with the reason, when it cannot.
|
||||
# officially, and left out when it cannot. A GPU of a generation ROCm does
|
||||
# not run is simply not offered; what the host can fix is explained.
|
||||
amd_blocker = host.rocm_blocker(rootfs_storage) if found["amd"] else None
|
||||
amd_experimental = (found["amd"] and not amd_blocker
|
||||
and host.rocm_support(found.get("amd_gfx_target")) == "experimental")
|
||||
if amd_blocker:
|
||||
if amd_blocker in ("kfd", "space"):
|
||||
reason = (translate("The AMD driver does not offer its compute interface (/dev/kfd) on this host.")
|
||||
if amd_blocker == "kfd" else
|
||||
f"{translate('The ROCm image has no support for the AMD GPU of this host:')} {host.amd_gpu_name()}."
|
||||
if amd_blocker == "generation" else
|
||||
translate("The storage has less than 40 GB free for the ROCm image."))
|
||||
real.message(f"{reason}\n\n{translate('Recognition is not offered on the AMD GPU; video transcoding is.')}")
|
||||
mark = f" — {translate('experimental on this GPU')}" if amd_experimental else ""
|
||||
@@ -1916,11 +1915,6 @@ def configure_acceleration(installer_profile, environment, unprivileged, ui, mod
|
||||
found.get("amd_gfx_target"), tuple(item["amd_gfx_targets"])) == "experimental"}
|
||||
options = [(item["id"], item["label"]) for item in usable]
|
||||
asked = advanced or not installer_profile.get("selkies")
|
||||
if asked and found["amd"] and any(item.get("amd_gfx_targets") and item not in usable and host.rocm_support(
|
||||
found.get("amd_gfx_target"), tuple(item["amd_gfx_targets"])) is None for item in profiles):
|
||||
# Its owner may expect the GPU to be offered: say why it is not.
|
||||
ui.message(f"{translate('The ROCm image of this application has no support for the AMD GPU of this host:')} "
|
||||
f"{host.amd_gpu_name()}. {translate('Its ROCm profile is not offered.')}")
|
||||
if asked and len(usable) < len(profiles) and len(usable) == 1:
|
||||
# Nothing but the CPU is left: say why there is nothing to choose.
|
||||
ui.message(translate("No usable GPU was found on this host. The application will be installed "
|
||||
|
||||
@@ -191,8 +191,10 @@ class FrigateExperimentalRocmTests(unittest.TestCase):
|
||||
self.assertEqual(plan["hardware_profile"], "vaapi")
|
||||
self.assertEqual(self.override(plan), [])
|
||||
|
||||
def test_a_gpu_the_image_cannot_use_is_not_offered_and_the_reason_is_said(self, *_):
|
||||
def test_a_gpu_the_image_cannot_use_is_simply_not_offered(self, *_):
|
||||
# The menu offers what works on the GPU; it does not explain ROCm.
|
||||
with patch("proxmenux_oci.installer.host.amd_gpu_name", return_value="Lucienne (gfx90c)"):
|
||||
ui, plan = self.build(90012, {})
|
||||
self.assertNotIn("rocm", ui.labels[PROMPT])
|
||||
self.assertTrue(any("Lucienne (gfx90c)" in message and "not offered" in message for message in ui.messages))
|
||||
self.assertIn("vaapi", ui.labels[PROMPT])
|
||||
self.assertFalse(any("ROCm" in message for message in ui.messages))
|
||||
|
||||
@@ -92,16 +92,21 @@ class ImmichAccelerationTests(unittest.TestCase):
|
||||
self.assertIn("No usable GPU", ui.messages[0])
|
||||
self.assertEqual(result, ("cpu", "cpu"), mode)
|
||||
|
||||
def test_an_amd_host_that_cannot_run_rocm_offers_video_only_and_says_why(self, *_):
|
||||
for blocker, text in (("kfd", "/dev/kfd"), ("space", "40 GB"), ("generation", "no support for the AMD GPU")):
|
||||
def test_an_amd_host_that_cannot_run_rocm_offers_video_only(self, *_):
|
||||
# What the host can fix is said; a GPU generation ROCm does not run is not.
|
||||
for blocker, text in (("kfd", "/dev/kfd"), ("space", "40 GB"), ("generation", None)):
|
||||
with patch("proxmenux_oci.installer.host.rocm_blocker", return_value=blocker), \
|
||||
patch("proxmenux_oci.installer.host.amd_gpu_name", return_value="Lucienne (gfx90c)"):
|
||||
ui, result, _ = self.plan(AMD, DEFAULT_MODE)
|
||||
self.assertEqual(ui.options[PROMPT], ["cpu", "amd-video"], blocker)
|
||||
self.assertEqual(ui.defaults[PROMPT], "amd-video", blocker)
|
||||
self.assertEqual(result, ("vaapi", "cpu"), blocker)
|
||||
self.assertTrue(any(text in message and "Recognition is not offered" in message
|
||||
for message in ui.messages), blocker)
|
||||
if text:
|
||||
self.assertTrue(any(text in message and "Recognition is not offered" in message
|
||||
for message in ui.messages), blocker)
|
||||
else:
|
||||
self.assertFalse(any("ROCm" in message or "Recognition" in message
|
||||
for message in ui.messages), blocker)
|
||||
|
||||
def test_a_gpu_rocm_supports_is_proposed_whole(self, *_):
|
||||
for target in (100300, 110501, None):
|
||||
|
||||
Reference in New Issue
Block a user