{"record":{"id":"2755ac4fc0a4f1df","repo":"LykosAI/StabilityMatrix","slug":"no-windows-rocm-multi-arch-device-extra-is-available-for","errorCode":null,"errorMessage":"No Windows ROCm multi-arch device extra is available for '{state.RuntimeGfxArch ?? \"unknown\"}'.","messagePattern":"No Windows ROCm multi-arch device extra is available for '(.+?)'\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"StabilityMatrix.Core/Services/Rocm/RocmPackageHelper.cs","lineNumber":247,"sourceCode":"        RocmPackageProfile profile,\n        IProgress<ProgressReport>? progress = null,\n        Action<ProcessOutput>? onConsoleOutput = null,\n        CancellationToken cancellationToken = default\n    )\n    {\n        var state = machineState.Value;\n        if (!state.IsCompatible)\n        {\n            throw new InvalidOperationException(\n                state.FailureReason ?? \"Windows ROCm installation is not supported for the current machine.\"\n            );\n        }\n\n        var multiArchDeviceExtra = state.MultiArchDeviceExtra;\n\n        if (string.IsNullOrWhiteSpace(multiArchDeviceExtra))\n        {\n            throw new InvalidOperationException(\n                $\"No Windows ROCm multi-arch device extra is available for '{state.RuntimeGfxArch ?? \"unknown\"}'.\"\n            );\n        }\n\n        progress?.Report(new ProgressReport(-1f, \"Installing ROCm torch...\", isIndeterminate: true));\n\n        var installConfig = profile.InstallConfig;\n        var multiArchPythonPackageIndexUrl = WindowsRocmSupport.GetMultiArchPythonPackageIndexUrl(\n            state.RuntimeGfxArch\n        );\n        var torchArgs = new PipInstallArgs()\n            .AddKeyedArgs(\"--index-url\", [\"--index-url\", multiArchPythonPackageIndexUrl])\n            .AddArgs(\n                new Argument($\"torch[{multiArchDeviceExtra}]\"),\n                new Argument($\"torchvision[{multiArchDeviceExtra}]\"),\n                new Argument(\"torchaudio\")\n            );\n","sourceCodeStart":229,"sourceCodeEnd":265,"githubUrl":"https://github.com/LykosAI/StabilityMatrix/blob/af93d6ef57c01cd890d7e0ad0a9ea8c9fcda3002/StabilityMatrix.Core/Services/Rocm/RocmPackageHelper.cs#L229-L265","documentation":"After compatibility passes, InstallWindowsNativeTorchAsync needs state.MultiArchDeviceExtra - the pip extra-index segment (e.g. 'gfx110X-dgpu') identifying which ROCm multi-arch wheel set to use for the GPU's runtime gfx arch. If it is null or whitespace, the runtime arch could not be mapped to a known Windows ROCm wheel category, so the install cannot proceed and it throws with the detected (or 'unknown') arch.","triggerScenarios":"Calling InstallWindowsNativeTorchAsync when the machine state was computed for a GPU whose RuntimeGfxArch has no mapping in the helper's arch-to-multi-arch-extra table, or when the arch detection failed leaving RuntimeGfxArch null.","commonSituations":"Very new or very old AMD GPU whose arch isn't yet in the mapping table; gfx detection script failed so RuntimeGfxArch is null; iGPU architectures not covered by the Windows ROCm multi-arch index.","solutions":["Check state.RuntimeGfxArch - if null/'unknown', fix arch detection (drivers, rocminfo equivalent) before installing","Confirm the GPU's arch is in the helper's supported arch-to-extra mapping; if not, use an alternate install flow (ZLUDA/CPU)","Update Stability Matrix so its mapping includes newly released gfx architectures","Manually install torch from the correct multi-arch index if you know the device extra for your GPU"],"exampleFix":"// before\nawait rocmHelper.InstallWindowsNativeTorchAsync(venvRunner, ...); // arch unmapped\n// after\nvar state = await rocmHelper.GetMachineStateAsync();\nif (string.IsNullOrWhiteSpace(state.MultiArchDeviceExtra))\n{\n    ui.ShowMessage($\"No ROCm wheel set for arch '{state.RuntimeGfxArch}' - use ZLUDA build instead.\");\n    return;\n}\nawait rocmHelper.InstallWindowsNativeTorchAsync(venvRunner, ...);","handlingStrategy":"validation","validationCode":"var state = await rocmHelper.GetMachineStateAsync();\nif (string.IsNullOrWhiteSpace(state.MultiArchDeviceExtra))\n{\n    ShowMessage($\"No ROCm wheel set for arch '{state.RuntimeGfxArch ?? \"unknown\"}'.\");\n    return;\n}","typeGuard":"bool HasDeviceExtra(RocmMachineState s) =>\n    !string.IsNullOrWhiteSpace(s.MultiArchDeviceExtra);","tryCatchPattern":"try { await rocmHelper.InstallWindowsNativeTorchAsync(venvRunner, ...); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"multi-arch device extra\"))\n{\n    // fall back to ZLUDA or generic torch flow\n}","preventionTips":["Verify GPU arch detection succeeds (RuntimeGfxArch non-null) before install","Only offer Windows ROCm install for arches in the supported mapping table","Update the app when new gfx architectures ship"],"tags":["rocm","gpu","arch-detection","windows"],"backgroundTag":"missing-config-value","analyzedSha":"af93d6ef57c01cd890d7e0ad0a9ea8c9fcda3002","analyzedAt":"2026-09-12T19:02:43.389Z","contentChangedAt":"2026-09-12T19:02:43.389Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}