diff --git a/unsloth/models/llama.py b/unsloth/models/llama.py index 6018a4ccb4..d5883e4346 100644 --- a/unsloth/models/llama.py +++ b/unsloth/models/llama.py @@ -3467,6 +3467,14 @@ class FastLlamaModel: embeddings = model.get_output_embeddings() if hasattr(embeddings, "training"): embeddings.training = False + + # Restore use_cache values that prepare_model_for_training disabled + # for gradient checkpointing (older unsloth_zoo has no restore helper) + try: + from unsloth_zoo.training_utils import restore_use_cache + restore_use_cache(model) + except ImportError: + pass return model @staticmethod @@ -3514,6 +3522,18 @@ class FastLlamaModel: embeddings = model.get_output_embeddings() if hasattr(embeddings, "training"): embeddings.training = True + + # Re-disable use_cache if prepare_model_for_training had disabled it + # and for_inference restored it (record only exists after a disable) + if ( + use_gradient_checkpointing + and getattr(model, "_unsloth_use_cache_originals", None) is not None + ): + try: + from unsloth_zoo.training_utils import disable_use_cache + disable_use_cache(model) + except ImportError: + pass return model diff --git a/unsloth/models/vision.py b/unsloth/models/vision.py index a75d23e710..34336aa80f 100644 --- a/unsloth/models/vision.py +++ b/unsloth/models/vision.py @@ -1706,6 +1706,14 @@ class FastBaseModel: embeddings = model.get_output_embeddings() if hasattr(embeddings, "training"): embeddings.training = False + # Restore use_cache values that prepare_model_for_training disabled + # for gradient checkpointing (older unsloth_zoo has no restore helper) + try: + from unsloth_zoo.training_utils import restore_use_cache + restore_use_cache(model) + except ImportError: + pass + # Must disable returning hidden states in the case for GRPO os.environ["UNSLOTH_RETURN_HIDDEN_STATES"] = "0" # Must enable returning logits @@ -1764,6 +1772,18 @@ class FastBaseModel: embeddings = model.get_output_embeddings() if hasattr(embeddings, "training"): embeddings.training = True + # Re-disable use_cache if prepare_model_for_training had disabled it + # and for_inference restored it (record only exists after a disable) + if ( + use_gradient_checkpointing + and getattr(model, "_unsloth_use_cache_originals", None) is not None + ): + try: + from unsloth_zoo.training_utils import disable_use_cache + disable_use_cache(model) + except ImportError: + pass + # Can re-enable not returning logits os.environ["UNSLOTH_RETURN_LOGITS"] = "0" # Turn off skip guards and set stance to default