diff --git a/unsloth/models/loader.py b/unsloth/models/loader.py index a1dbc82534..1099c4f0de 100644 --- a/unsloth/models/loader.py +++ b/unsloth/models/loader.py @@ -543,6 +543,7 @@ class FastModel(FastBaseModel): elif "csm-1b" in model_name.lower(): os.environ["UNSLOTH_COMPILE_DISABLE"] = "1" os.environ["UNSLOTH_DISABLE_FAST_GENERATION"] = "1" + os.environ["UNSLOTH_FORCE_CUSTOM_DTYPE"] = "if name.endswith(('_proj', 'fc1', 'fc2', 'codebook', 'head')): module.to(torch.float16)" elif "olmo-2" in model_name.lower() and transformers_version < Version("4.50.0.dev0"): raise RuntimeError("Unsloth: OLMo-2 only works on transformers >= 4.50.0." + NIGHTLY) pass diff --git a/unsloth/models/vision.py b/unsloth/models/vision.py index cadfed9430..48e8b532f2 100644 --- a/unsloth/models/vision.py +++ b/unsloth/models/vision.py @@ -303,6 +303,13 @@ class FastBaseModel: pass assert(dtype in (torch.float16, torch.bfloat16, torch.float32)) + # Check for custom data-types + custom_datatype = None + if os.environ.get("UNSLOTH_FORCE_CUSTOM_DTYPE", "") != "": + custom_datatype = os.environ["UNSLOTH_FORCE_CUSTOM_DTYPE"] + dtype = torch.float32 + pass + bnb_compute_dtype = dtype do_forced_float32 = False if os.environ.get("UNSLOTH_FORCE_FLOAT32", "0") == "1": @@ -374,6 +381,13 @@ class FastBaseModel: # Return old flag os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = old_hf_transfer + # Edit data-types + if custom_datatype is not None: + with torch.inference_mode(): + for name, module in model.named_modules(): + exec(custom_datatype) + pass + # Counteract saved tokenizers tokenizer_name = model_name if tokenizer_name is None else tokenizer_name is_vlm = (auto_model is AutoModelForVision2Seq)