Skip to content

Fix Flux 2 Klein dreambooth default text_encoder_out_layers#13509

Open
Ricardo-M-L wants to merge 1 commit intohuggingface:mainfrom
Ricardo-M-L:fix/flux2-klein-dreambooth-default-layers
Open

Fix Flux 2 Klein dreambooth default text_encoder_out_layers#13509
Ricardo-M-L wants to merge 1 commit intohuggingface:mainfrom
Ricardo-M-L:fix/flux2-klein-dreambooth-default-layers

Conversation

@Ricardo-M-L
Copy link
Copy Markdown
Contributor

What does this PR do?

Fixes the off-by-one in the `--text_encoder_out_layers` CLI default of `examples/dreambooth/train_dreambooth_lora_flux2_klein.py`: the script was defaulting to `[10, 20, 30]` (the Flux 2 non-Klein default, appropriate for its Mistral text encoder), but every Klein pipeline — `pipeline_flux2_klein.py`, `pipeline_flux2_klein_kv.py`, `pipeline_flux2_klein_inpaint.py` — expects `(9, 18, 27)` and uses that layer set on every call in the training loop.

The result is a silent mismatch whenever a user trains with the default flag value: Klein's internal `hidden_states_layers=(9, 18, 27)` is what the pipeline advertises, but the training script's default CLI flag suggests `[10, 20, 30]`, which produces the wrong embeddings if actually passed. The issue reporter lost ~72 GPU hours before catching it.

Change

One-line fix in `examples/dreambooth/train_dreambooth_lora_flux2_klein.py`: change the argparse default for `--text_encoder_out_layers` from `[10, 20, 30]` → `[9, 18, 27]` so it matches the layers Klein's pipelines already use.

The non-Klein Flux 2 training script (`train_dreambooth_lora_flux2.py`) stays on `[10, 20, 30]`, which is correct for the non-Klein pipeline.

Fixes #13445

Before submitting

  • Did you read the contributor guideline?
  • This PR fixes a bug (linked above).
  • Minimal, targeted change — no refactor.

Who can review?

cc @sayakpaul @yiyixuxu

Align the `--text_encoder_out_layers` CLI default in
`train_dreambooth_lora_flux2_klein.py` with the layers the Klein
pipeline actually consumes internally: `(9, 18, 27)` instead of
`(10, 20, 30)`.

The vanilla Flux 2 pipeline (`pipeline_flux2.py`) uses hidden states
`(10, 20, 30)` (Mistral text encoder), and its training script was
correctly set to that. The Klein script was copy-pasted from the
non-Klein one but the default was never adjusted, while Klein's
pipelines (`pipeline_flux2_klein*.py`) expect `(9, 18, 27)` — an
off-by-one that silently sends the training run to the wrong layers
unless the user overrides the flag on the CLI.

Fixes huggingface#13445
@github-actions github-actions Bot added examples size/S PR with diff < 50 LOC labels Apr 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

examples size/S PR with diff < 50 LOC

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wrong default layers for Flux 2 Klein

1 participant