• Stefy Lanza (nextime / spora )'s avatar
    longcat: place the lazily realised text encoder (v0.2.81 fixup) · bfcd3f22
    Stefy Lanza (nextime / spora ) authored
    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: 's avatarClaude Opus 5 <noreply@anthropic.com>
    bfcd3f22
test_longcat_component_quant.py 8.5 KB