huggingface / huggingface/diffusers

AttentionModuleMixin.set_attention_slice references two attributes that do not exist

Offen
#14,729 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug models needs-env-info
Vorherrschende Sprache
Python
Sterne
34.5k
Forks
7.3k
Ø Merge
3 T. 3 Std.
Gemergte PRs (30 T.)
91

Beschreibung

### Describe the bug

`AttentionModuleMixin.set_attention_slice` in `src/diffusers/models/attention.py` refers to two attributes that do not exist anywhere in the codebase, so it raises `AttributeError` for every argument:

```python
if slice_size is not None:
processor = self._get_compatible_processor("sliced") # no such method anywhere in src/

if processor is None:
processor = self.default_processor_cls() # the attribute is `_default_processor_cls`
```

`grep -rn "_get_compatible_processor" src/` returns only that one call site, and `default_processor_cls` (without the underscore) is likewise only that one use. The class attribute defined on the mixin at line 122 is `_default_processor_cls`. Thirty-six files under `models/transformers`, `models/autoencoders` and `models/condition_embedders` define `AttentionModuleMixin` subclasses, so they all inherit this method.

I could not find a public entry point that routes into this method today. The models that recurse into submodule `set_attention_slice` (`unet_2d_condition`, `unet_3d_condition`, the three controlnets, `audioldm2`, `versatile_diffusion`) all hold `attention_processor.Attention` modules, which have their own working `set_attention_slice`. So this looks latent rather than something users are hitting. It stops being latent as soon as a model built on `AttentionModuleMixin` gets wired into that recursion, which the `# TODO: the following will not be required when everything is refactored to AttentionModuleMixin` comment in `modeling_utils.py` suggests is the direction.

I am reporting rather than sending a patch because only half of it is a typo. Renaming `default_processor_cls` to `_default_processor_cls` fixes the `slice_size=None` path, but the other branch needs `_get_compatible_processor` to exist, and what "a compatible sliced processor" should mean under the new mixin is a design call. None of the `_available_processors` lists in the tree contain a sliced processor, so there is nothing for it to return yet. Happy to send a PR for whichever shape you want.

### Reproduction

Since nothing routes into the method, the smallest failing thing is the method itself on a real attention module. `AnimaTextConditionerAttention` is one of the `AttentionModuleMixin` subclasses and is cheap to build:

```python
from diffusers.models.condition_embedders.condition_embedder_anima import AnimaTextConditionerAttention

attn = AnimaTextConditionerAttention(
query_dim=64, context_dim=64, num_attention_heads=4, attention_head_dim=16
)
print(attn._default_processor_cls.__name__) # AnimaTextConditionerAttnProcessor

for slice_size in (None, 1):
try:
attn.set_attention_slice(slice_size)
print(slice_size, "->", type(attn.processor).__name__)
except AttributeError as e:
print(slice_size, "->", e)
```

Any of the other subclasses behaves the same way, since both names are missing from the mixin itself:

```python
from diffusers.models.attention import AttentionModuleMixin

hasattr(AttentionModuleMixin, "_default_processor_cls") # True
hasattr(AttentionModuleMixin, "default_processor_cls") # False
hasattr(AttentionModuleMixin, "_get_compatible_processor") # False
```

### Logs

```shell
AnimaTextConditionerAttnProcessor
None -> 'AnimaTextConditionerAttention' object has no attribute 'default_processor_cls'
1 -> 'AnimaTextConditionerAttention' object has no attribute '_get_compatible_processor'
```

### System Info

- diffusers: `0.41.0.dev0`, `main` at `c5469b7`
- PyTorch: 2.11.0+cu130
- Python: 3.13.15
- Platform: Linux, CPU

The reproduction constructs a module directly and downloads nothing.

### Who can help?

@DN6 @yiyixuxu

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Start in src/diffusers/models/attention.py and reproduce the failure with AnimaTextConditionerAttention using the example in the issue. Inspect the mixin's _available_processors and related attention processor implementations, then clarify what a compatible sliced processor should mean with the maintainers. Done should leave both slice_size=None and a sliced call working without AttributeError.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python, pytorch
Bereich
machine-learning
Issue-Typ
Bug
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Aktiv
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.