LykosAI/StabilityMatrix · error · InvalidOperationException

No Windows ROCm multi-arch device extra is available for

Error message

No Windows ROCm multi-arch device extra is available for '{state.RuntimeGfxArch ?? "unknown"}'.

What it means

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.

Solutions

  1. Check state.RuntimeGfxArch - if null/'unknown', fix arch detection (drivers, rocminfo equivalent) before installing
  2. Confirm the GPU's arch is in the helper's supported arch-to-extra mapping; if not, use an alternate install flow (ZLUDA/CPU)
  3. Update Stability Matrix so its mapping includes newly released gfx architectures
  4. Manually install torch from the correct multi-arch index if you know the device extra for your GPU

Example fix

// before
await rocmHelper.InstallWindowsNativeTorchAsync(venvRunner, ...); // arch unmapped
// after
var state = await rocmHelper.GetMachineStateAsync();
if (string.IsNullOrWhiteSpace(state.MultiArchDeviceExtra))
{
    ui.ShowMessage($"No ROCm wheel set for arch '{state.RuntimeGfxArch}' - use ZLUDA build instead.");
    return;
}
await rocmHelper.InstallWindowsNativeTorchAsync(venvRunner, ...);
Defensive patterns

Strategy: validation

Validate before calling

var state = await rocmHelper.GetMachineStateAsync();
if (string.IsNullOrWhiteSpace(state.MultiArchDeviceExtra))
{
    ShowMessage($"No ROCm wheel set for arch '{state.RuntimeGfxArch ?? "unknown"}'.");
    return;
}

Type guard

bool HasDeviceExtra(RocmMachineState s) =>
    !string.IsNullOrWhiteSpace(s.MultiArchDeviceExtra);

Try / catch

try { await rocmHelper.InstallWindowsNativeTorchAsync(venvRunner, ...); }
catch (InvalidOperationException ex) when (ex.Message.Contains("multi-arch device extra"))
{
    // fall back to ZLUDA or generic torch flow
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Understand the failure class

Background: "missing required config value" errors: why libraries refuse to start when a configuration key is empty, unset, or blank — this error's family across 48 libraries.

Related errors


AI-assisted analysis of LykosAI/StabilityMatrix@af93d6ef57 (2026-09-12). Data as JSON: /api/errors/2755ac4fc0a4f1df. Report an issue: GitHub.

Appendix: source

Thrown at StabilityMatrix.Core/Services/Rocm/RocmPackageHelper.cs:247

        RocmPackageProfile profile,
        IProgress<ProgressReport>? progress = null,
        Action<ProcessOutput>? onConsoleOutput = null,
        CancellationToken cancellationToken = default
    )
    {
        var state = machineState.Value;
        if (!state.IsCompatible)
        {
            throw new InvalidOperationException(
                state.FailureReason ?? "Windows ROCm installation is not supported for the current machine."
            );
        }

        var multiArchDeviceExtra = state.MultiArchDeviceExtra;

        if (string.IsNullOrWhiteSpace(multiArchDeviceExtra))
        {
            throw new InvalidOperationException(
                $"No Windows ROCm multi-arch device extra is available for '{state.RuntimeGfxArch ?? "unknown"}'."
            );
        }

        progress?.Report(new ProgressReport(-1f, "Installing ROCm torch...", isIndeterminate: true));

        var installConfig = profile.InstallConfig;
        var multiArchPythonPackageIndexUrl = WindowsRocmSupport.GetMultiArchPythonPackageIndexUrl(
            state.RuntimeGfxArch
        );
        var torchArgs = new PipInstallArgs()
            .AddKeyedArgs("--index-url", ["--index-url", multiArchPythonPackageIndexUrl])
            .AddArgs(
                new Argument($"torch[{multiArchDeviceExtra}]"),
                new Argument($"torchvision[{multiArchDeviceExtra}]"),
                new Argument("torchaudio")
            );

View on GitHub (pinned to af93d6ef57)