longcat: place the lazily realised text encoder (v0.2.81 fixup)
A deferred encoder is not there when _place_pipeline runs, so pipe.to("cuda")
has nothing to move. Under offload that was already right — the encoder belongs
on the host and the wrapper brings it over for the encode — but with
offload_strategy "" the encoder was built on the CPU and left there, while
_get_t5_prompt_embeds sends it inputs on the card. The first cache miss would
have died on a device mismatch.
Placement cannot be re-derived on a miss: by then the offload argument is long
gone. So _place_pipeline records where a realised encoder belongs, in each of
its branches, and realise() replays it.
A quantised encoder is exempt — device_map put it on the card as it loaded and
bitsandbytes weights are not meant to be moved afterwards. That check now lives
in _is_quantised_module, which _encoder_is_quantised delegates to, because a
lazily realised encoder has to be asked the same question BEFORE it is attached
to a pipeline and the two answers must not drift.
test_quantisation_is_detected_from_the_model_not_the_config followed the names
into the helper and now asserts the delegation too, so neither function can
start consulting the config.
Found by re-reading the committed diff, not by a test: nothing here runs the
real pipeline, which is exactly the gap that let it through.
Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>
Showing
Please
register
or
sign in
to comment