• Stefy Lanza (nextime / spora )'s avatar
    ui/gpu: explicit "Split — <card> first" options; auto = single GPU; confine non-split models · 0490e2c9
    Stefy Lanza (nextime / spora ) authored
    The per-model engine selector was confusing: "Auto" implied single-card (correct)
    but the only split choice was a generic "All GPUs". Replace with hardware-named,
    ordered choices:
      - "Auto (single GPU — by capability / free VRAM)"  → one card (unchanged)
      - "<engine> (single card)"                         → pin to that card
      - "Split — <engine> first"                         → pool across all GPUs with
        that engine's card leading (main_gpu / larger share). Generated per engine, so
        on a 3090+Radeon box you get "Split — nvidia first" and "Split — radeon first".
    Saving a split option sets gpu_split + pins engine=<lead>; the weight-ratio field
    (blank = auto by free VRAM) shows only for a split choice.
    
    Make per-model split actually function:
    - engine_supervisor: expose every GPU to engines (allow_cross) when the global
      toggle OR ANY model entry has gpu_split — otherwise the lead engine couldn't see
      the foreign card.
    - vulkan.py: when an engine sees BOTH backends' cards but THIS model isn't a split,
      confine it to its own backend (zero the foreign devices in tensor_split) so it
      can't accidentally spread — while same-backend multi-card split still works. Split
      models pool across all visible devices (lead card = device 0 = main_gpu).
    Co-Authored-By: 's avatarClaude Opus 4.8 <noreply@anthropic.com>
    0490e2c9
engine_supervisor.py 32.6 KB