Krea 2 Turbo β€” 2-Step Distillation LoRA

🚧 Work in progress. This page is the live account of the project β€” what the adapter is meant to do, how it is being trained, and where it stands. It is updated as the recipe changes. There are no shipped files yet; the samples and side-by-side comparisons will be added when there is a candidate worth showing.

A LoRA for Krea 2 Turbo that takes the model from its usual 8 steps down to 2 β€” Turbo's own weights and its own two sigmas, guidance 0.0, a quarter of the denoising passes β€” with the aim of matching what the 4-step LoRA delivers today, at every resolution it delivers it at.

  • 🎯 The bar β€” the 4-step LoRA's output quality, across the same 12 resolutions, in two steps.
  • πŸ”Œ Drop-in, no exceptions β€” a plain LoRA sampled by stock Euler at sigmas [1.0, 0.5128] in diffusers, ComfyUI or MLX. No custom sampler, no policy head, no per-step tricks. If the quality needs a special sampler it is not this project.
  • 🧬 Same shape as the 4-step adapter β€” rank 64 on the same 228 modules; a second adapter exists during training only and never ships.
  • πŸ“Š Distribution matching, not imitation β€” the training objective that finally moved this (see Method).
  • 🎲 The same 13,750 recorded teacher trajectories the 4-step adapter trained on, reused without a single teacher re-run.
  • πŸ–₯️ One RTX 3090, and a recipe shaped by its 24 GB.

Where it stands

lineage 4-step LoRA (78,000 samples) β†’ 9,000 samples of 2-step trajectory distillation β†’ distribution matching from there
current run run 2: distribution matching + a critic judged against the teacher's own finals, per-resolution weights measured from a full 12-bucket sweep
best result so far run 1 at 1,000 samples: at 512Γ—512 and 768Γ—1024 the sharpest, most coherent 2-step renders of the project β€” crowds resolved into people, faces intact at 768Γ—1024; at 1280Γ—1280 and above the same weights over-render (fine texture at 1.42Γ— the teacher's), which run 2 addresses
known gaps faces at 512Γ—512 still carry a faint doubled contour; fine structure at 1280Γ—1280+ renders as fragments rather than the teacher's objects β€” the two things run 2 exists to fix

How I got here

The 4-step adapter closed its page with a promise: a 2-step LoRA as the next project, and a guess at the lever it would need β€” matching the teacher's distribution rather than its trajectory. That guess turned out to be the whole story.

The project began where the 4-step one ended, from its final weights, and ran the same recipe at two steps: progressive distillation on the recorded teacher trajectories, each student call covering four teacher steps, with the LADD-style critic as the finisher. Nine thousand samples in, every number had stopped moving and the pictures had a signature the numbers could not see: doubled contours on faces and limbs, soft fine texture, crowds averaged into translucent overlaps. Several variations followed β€” the critic re-weighted, judged per token, a heavier hand on the final call, the student's own first-step output fed into its second β€” and each traded one of those faults for another without moving past them. A capacity probe ruled out adapter rank; a learning-rate shock ruled out the optimiser.

The reason is structural, and worth stating plainly because it decides the whole design. A regression loss asks the student to land on the teacher's specific image for each prompt. When a two-step jump is wide enough that several images are plausible, the answer that minimises the squared error is their average β€” and the average of two sharp images is a blurred one with doubled edges. Every earlier recipe rewarded that average. Tuning its weights could not change what it rewarded.

Distribution matching asks a different question: not "does your image match this one" but "would the teacher plausibly have produced your image". The first run of that objective, on top of the 9,000-sample weights, produced in a thousand samples what twenty thousand samples of the old recipe never had β€” and it did so while every latent distance to the teacher rose, which is exactly what a mode-seeking objective predicts and what a mean-seeking metric punishes. The distances are reported on this page; they are not optimised for, and they are not what decides a checkpoint. Pictures are, at fixed seeds, at every resolution, with faces viewed at 1:1.

The recipe adjustments so far, each made on the measurement of the one before:

  1. progressive distillation at two steps from the 4-step adapter's weights, with the LADD critic β€” the baseline
  2. the critic made to judge the first call's endpoint against the teacher's mid-states, which removed the gross ghosting and left the doubled contours
  3. the critic's weight, its per-token form and the student's own first-step output as the second call's input β€” tried one at a time; the objective flip that mattered was not among them
  4. distribution matching (the DMD2 family) as the primary objective, trajectory regression demoted to an anchor at half weight, the critic switched off to read the new term alone
  5. the running average of the weights restarted at the objective switch, after it was caught averaging two lineages into composites
  6. per-resolution weights for the distribution term, measured from a full 12-bucket sweep rather than estimated
  7. the critic back in, in its DMD2 form β€” on the trained score network's features, judged against the teacher's own finals, conditional on the prompt, its gradient capped against the distribution term's

Method

Distribution matching with a trajectory anchor, Krea 2 Turbo as its own teacher, on the recorded 8-step trajectories.

The student makes two calls, at Οƒ = 1.0 and Οƒ = 0.5128 β€” the first and fifth points of the teacher's 8-step grid at mu = 1.15 β€” and stock Euler carries it between them. That grid is what makes the objective a drop-in: Euler's first step from pure noise lands exactly on the flow-matching interpolant at Οƒ = 0.5128 with the same noise and the student's own clean-image prediction as the data point. So the student's first-call output is a legitimate image prediction that can be judged as an image, and the second call is fed from it during training the way it will be at inference.

The distribution term. For an image the student produces, two denoisers estimate how it should be cleaned up from a freshly noised copy: the frozen teacher, and a second small adapter on the same frozen base β€” the fake score β€” that is trained online to denoise whatever the student currently makes. Where the two disagree is the direction that makes the image more like the teacher's work and less like the student's habits, and the student is pushed that way (the DMD2 gradient, per-sample normalised). Averaging is never rewarded, so the student commits. The fake adapter is rank 32, starts as an exact copy of the teacher, updates twice per student step, and is discarded at the end.

The anchor. Plain trajectory regression on the teacher's recorded chords stays in at half weight. It keeps the student on the teacher's two-step grid so the distribution term cannot wander into a different sampler behaviour, and it is what the 9,000 earlier samples had already satisfied β€” which is why the first distribution-matching run moved so far so fast.

Per resolution. The distribution term's push grows with resolution: the fake adapter sees few large-bucket samples and under-fits fine structure there, and a per-pixel normaliser lands harder as pixel counts grow. Rather than guess a taper, a full 12-bucket sweep of the run-1 weights measured the fine-texture ratio to the teacher at every resolution, and the term's weight per bucket is set from that measurement so that each bucket is pushed toward the teacher's texture rather than past it.

The critic (run 2)

The fake adapter cannot notice its own mistakes, and at large resolutions those mistakes render as fragments β€” right amount of detail, wrong structure. A discriminator can: trained to tell the student's images from the teacher's, it learns whatever systematic difference exists between them, fragments included, and its gradient points back at the teacher. This is the second half of DMD2 and it differs from the 4-step adapter's critic in two ways that follow from what the earlier runs taught:

  • it sits on the trained fake adapter's features, not the frozen teacher's, so it can learn a decision rather than reweight what the teacher already computes;
  • its real class is the teacher's own finals, conditional on the prompt β€” the bar is the teacher β€” and its gradient is capped per sample at twice the distribution term's, so it can correct but never take over.

What the LoRA touches

Rank 64, alpha = rank, bf16, the same 228 modules as the 4-step adapter: the 8 attention and feed-forward linears of all 28 transformer blocks, plus the four global linears β€” time_embed.linear_1, time_embed.linear_2, time_mod_proj, final_layer.linear β€” that a step-count change needs most. Nothing about the base model changes.

Training data

The 13,750 recorded teacher trajectories of the 4-step project β€” Krea 2 Turbo's own 8-step run at mu = 1.15 and guidance 0.0, every latent and velocity stored β€” serve unchanged: a 2-step chord is two of the 4-step chords end to end. 203 held-out prompts measure the student–teacher gap on unseen prompts and never receive a gradient. The critic's real class is the teacher's finals for the training prompts; the 43,044 real-photo crops of the 4-step project are available to it as a second source and are not used in the current run.

Resolutions

The same 12 buckets as the 4-step adapter, interleaved in proportion to their remaining samples:

512Γ—512 512Γ—768 768Γ—512
768Γ—768 768Γ—1024 1024Γ—768
1024Γ—1024 960Γ—1280 1280Γ—960
1280Γ—1280 1440Γ—1280 1440Γ—1440

Hardware

One RTX 3090 (24 GB). The frozen base is weight-only int8; the student's checkpointed block inputs stage to pinned host memory above 0.3 megapixels; the student, the fake adapter and the critic each build and free their own graph in turn, so their peaks never overlap; a hard memory ceiling sits below the driver's paging threshold so a step that does not fit fails loudly. A full step with every term live reserves about 21.5 GB at 1440Γ—1440. The price of the objective is throughput: about 160 training samples an hour against the 4-step recipe's 470 β€” three times the cost per sample, and so far a small fraction of the samples.

How it is judged

Every 1,000 samples, both the live weights and their running average are pulled, merged and rendered at fixed seeds on 15 fixed prompts across four resolutions, with faces cut out at 1:1, a fine-texture ratio and frequency bands against the teacher, a graded judge, and a pairwise preference against the teacher. Latent distances β€” the held-out chord gap and the two-step rollout error β€” are recorded but never used to keep or stop a run: this project's clearest lesson is that they reward blur, and a run that improved them while its pictures collapsed was stopped by its pictures.

Notes and limitations

  • 🎯 Krea 2 Turbo only, at 2 steps, guidance 0.0 (cfg 1.0 in ComfyUI), mu = 1.15 β€” the two training sigmas are anchored to that grid.
  • 🚧 Not released. Everything on this page is the current state of a run in progress.

What's next

Run 2 is training. Its first probe decides whether the critic removes the large-resolution fragments; if it does not, the next lever is a perceptual-space term on decoded image crops, which judges structure rather than energy. The shipping point, when there is one, is chosen by the sweep and the eye, not by distance run β€” the same discipline as the 4-step adapter.

License

The adapter is a derivative of Krea 2 Turbo and is covered by the Krea 2 Community License Agreement (LICENSE.pdf in this repository), as the 4-step adapter is. The attribution notice the license requires of a derivative ships with the files.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for lvladikov/Krea2-Turbo-Distill-2step-LoRA

Base model

krea/Krea-2-Raw
Adapter
(1502)
this model