Skip to content

BNR (NVIDIA AFX): RTX 50-series / Blackwell sm_120 passes the GPU gate but no sm_120 pack exists → Download 404s with no fallback (worked via the old container) #3933

Description

@skerker

What happened

On a Blackwell / RTX 50-series GPU, the BNR panel offers the NVIDIA AFX denoiser and its Download button, but the download never completes — nothing lands in the cache and there's no clear error in the UI ("not sure if it's working"). The app detects the GPU arch as sm_120 and tries to fetch a sm_120 AFX pack that doesn't exist in the afx-bits-2.1.0 release (only sm_89 is published), so the fetch 404s.

Net effect: BNR is advertised as available on RTX 50-series but can never install, with no graceful "unsupported / use DFNR" fallback.

Environment

  • AetherSDR: built from source, main @ 9e7009c1, Linux x86_64, -DENABLE_NVIDIA_AFX=ON, Qt 6.8.3
  • OS: Ubuntu 24.04
  • GPU: NVIDIA GeForce RTX 5060 Laptop GPUBlackwell, compute capability 12.0 (sm_120), 8 GB, driver 595.71.05 (CUDA 13.2), PCI 10de:2d59. (Optimus laptop; Intel Raptor Lake iGPU alongside.)

Steps to reproduce

  1. On a sm_120 (RTX 50-series) machine, enable BNR in the AetherDSP panel.
  2. Accept the NVIDIA license, click Download.
  3. Observe: the download dead-ends; ~/.local/share/AetherSDR/nvidia-afx/ stays empty; no clear failure message.

Root cause

The GPU gate accepts the card, but no matching pack is published, and the URL is built unconditionally from the detected arch:

  • NvidiaAfxPack::hasSupportedGpu() gates on cc >= 89 (src/core/NvidiaAfxPack.cpp:152), so sm_120 (cc 120) passes → the panel offers BNR + Download.
  • NvidiaAfxPack::manifest() (src/core/NvidiaAfxPack.cpp:200) builds the AFX-bits URL as
    .../releases/download/afx-bits-2.1.0/afx-bits-2.1.0-linux-x86_64-<arch>.tar.zst
    with arch = sm_120 (:204-205).
  • Release afx-bits-2.1.0 only publishes sm_89 (Linux) — no sm_120 (nor sm_100) Linux asset. So the fetch 404s.
  • The pack-build script only recognizes sm_75 / sm_86 / sm_89 / sm_100 (scripts/build/build-afx-bits-windows.ps1:56) — consumer Blackwell sm_120 isn't a buildable target, and the per-arch denoiser model is pulled from NGC (denoiser_48k.trtpkg), so an sm_120 NGC Maxine model has to exist upstream first.

Verification

$ curl -s -o /dev/null -w "%{http_code}" -L \
  https://github.com/aethersdr/AetherSDR/releases/download/afx-bits-2.1.0/afx-bits-2.1.0-linux-x86_64-sm_120.tar.zst
404

Release afx-bits-2.1.0 assets: …-linux-x86_64-sm_89.tar.zst, …-windows-x86_64-sm_89.zip, …-windows-x86_64-tensorrt-10.9.0.34.zip. No sm_120.

Impact

Every RTX 50-series (consumer Blackwell, sm_120) owner: BNR looks supported, Download silently fails, and there's no message telling them it isn't available for their GPU or steering them to DFNR.

This is a GPU-coverage regression on this hardware. The previous container ("Service (NIM)") backend worked on this exact RTX 5060 (confirmed end-to-end: audible denoising, RTX utilization rising) — because the NIM shipped a full Triton/TensorRT/CUDA stack that built/adapted the denoiser engine for the GPU present at runtime, so it was architecture-portable to new cards. The in-process AFX path instead loads a pre-serialized, arch-locked denoiser_48k.trtpkg from NGC (no on-device build, no PTX JIT), so it only runs on the specific compute capabilities NVIDIA has pre-published — which excludes consumer Blackwell (sm_120) today. So dropping the container (reasonable for the no-container UX win) silently removed BNR support for RTX 50-series until an sm_120 pack ships.

Suggested fixes

  1. Graceful handling regardless of NVIDIA timeline (client-side): don't advertise BNR as installable for an arch with no published pack. Gate on the set of archs actually shipped (or HEAD-check the asset), and when the detected arch has no pack, show a clear message ("No BNR pack for your GPU (sm_120) yet — using DFNR") instead of a dead-end Download. This is the part fully in AetherSDR's control.
  2. Publish an sm_120 pack once NVIDIA has a consumer-Blackwell Maxine AFX denoiser model on NGC — then add sm_120 to the build script's ValidateSet + arch→NGC-tag map and upload afx-bits-…-sm_120 (linux + windows) to the release.
  3. Minor: surface the actual download error (404 / no-pack) in the panel + log so the failure isn't silent.
  4. Optional hybrid fallback (heavier, more complex): since the removed container (NIM) backend did work on this GPU by building the engine on-device, an opt-in "Service (NIM)" path could be retained/offered specifically for GPUs the AFX packs don't yet cover (e.g. sm_120), with in-process AFX remaining the default where a pack exists. This reintroduces the container dependency the rewrite intentionally dropped, so it'd be an advanced opt-in, not the default — but it would restore BNR coverage on bleeding-edge cards without waiting on an NGC sm_120 model.

Notes

  • Verified the GPU identity is genuinely sm_120 (not a detection error): nvidia-smi reports "RTX 5060 Laptop GPU", Product Architecture "Blackwell", compute_cap 12.0.
  • Not urgent for me personally — happy to test an sm_120 pack whenever one is built. Filing so Blackwell owners aren't left with a silently-failing BNR button.

Metadata

Metadata

Assignees

No one assigned

    Labels

    GUIUser interfaceaudioAudio engine and streamingbugSomething isn't workingmaintainer-reviewRequires maintainer review before any action is takenpriority: mediumMedium priority

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions