mirror of
https://github.com/vladmandic/automatic
synced 2026-09-06 13:00:44 +02:00
3302e78af6
Replace the six closure hijacks stacked in devices.set_sdpa_params with a registry of declarative backends and one router installed in their place. Each backend declares the constraints its closure carried as a predicate, a priority matching its old stacking position, and a prepare step that imports and configures the implementation; the router walks the prepared entries by priority and hands declined calls to the terminal backend (dynamic, flex) or the original sdpa, so fallback is the router's job rather than each closure's. - parity held: gates transcribed literally, the same kernel kwargs, enable_gqa passed to the original only when set, torch_info keeps the last prepared backend, the dynamic pin still set - a backend enabled on a platform without it warns instead of silently doing nothing - the legacy set_* entry points are gone; devices.py installs the router - test/test-attention-router.py checks every override subset against the old stacking order, gate parity over 16,000 shape cases, dispatch, terminal handoff and prepare isolation, offline
11 lines
400 B
Python
11 lines
400 B
Python
"""Built-in backends, registered in ascending priority."""
|
|
from modules.attention.registry import registry
|
|
from modules.attention.backends import dynamic, flex, triton_amd, flash_ck, sage, sdnq
|
|
|
|
registry.register(dynamic.backend)
|
|
registry.register(flex.backend)
|
|
registry.register(triton_amd.backend)
|
|
registry.register(flash_ck.backend)
|
|
registry.register(sage.backend)
|
|
registry.register(sdnq.backend)
|