From 34998914acdff890b313c7c236a5bbe27dd9aa49 Mon Sep 17 00:00:00 2001 From: Daniel Han-Chen Date: Tue, 20 Feb 2024 03:35:19 +1100 Subject: [PATCH] saving --- README.md | 13 +++++++++-- unsloth/save.py | 58 +++++++++++++++++++------------------------------ 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 2bd1edefd8..98f83e09c7 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ All notebooks are **beginner friendly**! Add your dataset, click "Run All", and | **Mistral 7b** 1xT4 | [▶️ Start on Kaggle](https://www.kaggle.com/code/danielhanchen/kaggle-mistral-7b-unsloth-notebook) | 5x faster\* | 62% less | - This [conversational notebook](https://colab.research.google.com/drive/1Aau3lgPzeZKQ-98h69CCu1UJcvIBLmy2?usp=sharing) is useful for ShareGPT ChatML / Vicuna templates. -- Our [raw text notebook](https://colab.research.google.com/drive/1ef-tab5bhkvWmBOObepl1WgJvfvSzn5Q?usp=sharing) is for text completion. Our [DPO notebook](https://colab.research.google.com/drive/15vttTpzzVXv_tJwEk-hIcQ0S9FcEWvwP?usp=sharing) is a replication of Zephyr. +- This [text completion notebook](https://colab.research.google.com/drive/1ef-tab5bhkvWmBOObepl1WgJvfvSzn5Q?usp=sharing) is for raw text. This [DPO notebook](https://colab.research.google.com/drive/15vttTpzzVXv_tJwEk-hIcQ0S9FcEWvwP?usp=sharing) replicates Zephyr. - Colab provides a free GPU sometimes. Kaggle has 30 hrs free per week on a 12 hr running cap. - \* Kaggle has 2x T4s, but we use 1. Due to overhead, 1x T4 is 5x faster. Use Colab as Kaggle takes 10 mins to install. @@ -166,7 +166,8 @@ fourbit_models = [ "unsloth/llama-2-13b-bnb-4bit", "unsloth/codellama-34b-bnb-4bit", "unsloth/tinyllama-bnb-4bit", -] +] # Go to https://huggingface.co/unsloth for more 4-bit models! + # Load Llama model model, tokenizer = FastLanguageModel.from_pretrained( model_name = "unsloth/mistral-7b-bnb-4bit", # Supports Llama, Mistral - replace this! @@ -187,6 +188,8 @@ model = FastLanguageModel.get_peft_model( use_gradient_checkpointing = True, random_state = 3407, max_seq_length = max_seq_length, + use_rslora = False, # We support rank stabilized LoRA + loftq_config = None, # And LoftQ ) trainer = SFTTrainer( @@ -209,6 +212,12 @@ trainer = SFTTrainer( ), ) trainer.train() + +# Go to https://github.com/unslothai/unsloth/wiki for advanced tips like +# (1) Saving to GGUF / merging to 16bit for vLLM +# (2) Continued training from a saved LoRA adapter +# (3) Adding an evaluation loop / OOMs +# (4) Cutomized chat templates ``` diff --git a/unsloth/save.py b/unsloth/save.py index ae7b5252e3..5b4ccbab1d 100644 --- a/unsloth/save.py +++ b/unsloth/save.py @@ -140,17 +140,28 @@ def unsloth_save_model( # Push to hub use_temp_dir : Optional[bool] = None, - commit_message : Optional[str] = None, + commit_message : Optional[str] = "Trained with Unsloth", private : Optional[bool] = None, create_pr : bool = False, revision : str = None, - commit_description : str = None, + commit_description : str = "Upload model trained with Unsloth 2x faster", tags : List[str] = None, # Our functions temporary_location : str = "_unsloth_temporary_saved_buffers", maximum_memory_usage : float = 0.9, ): + if commit_message is None: commit_message = "" + if "Unsloth" not in commit_message: + commit_message += " (Trained with Unsloth)" + commit_message = commit_message.lstrip() + + if commit_description is None: + commit_description = "Upload model trained with Unsloth 2x faster" + elif "Unsloth 2x faster" not in commit_description: + commit_description += " (Trained with Unsloth 2x faster)" + pass + if save_method == "merged_4bit": raise RuntimeError( "Unsloth: Merging into 4bit will cause your model to lose accuracy if you plan\n"\ @@ -210,17 +221,6 @@ def unsloth_save_model( ) pass - if commit_message is None: commit_message = "" - if "Unsloth 2x faster" not in commit_message: - commit_message += " (Trained with Unsloth 2x faster)" - commit_message = commit_message.lstrip() - - if commit_description is None: - commit_description = "Upload model trained with Unsloth 2x faster" - elif "Unsloth 2x faster" not in commit_description: - commit_description += " (Trained with Unsloth 2x faster)" - pass - model.push_to_hub( repo_id = save_directory, use_temp_dir = use_temp_dir, @@ -431,20 +431,6 @@ def unsloth_save_model( # Edit save_pretrained_settings # [TODO] _create_repo has errors due to **kwargs getting accepted save_pretrained_settings["state_dict"] = state_dict - - # Edit message / commit description - commit_message = save_pretrained_settings["commit_message"] - if commit_message is None: commit_message = "" - if "Unsloth 2x faster" not in commit_message: - commit_message += " (Trained with Unsloth 2x faster)" - commit_message = commit_message.lstrip() - - commit_description = save_pretrained_settings["commit_description"] - if commit_description is None: - commit_description = "Upload model trained with Unsloth 2x faster" - elif "Unsloth 2x faster" not in commit_description: - commit_description += " (Trained with Unsloth 2x faster)" - pass # commit_description does not seem to work? what_to_delete = ("use_temp_dir", "commit_message", "create_pr", "revision", "commit_description", "tags",) \ @@ -735,7 +721,7 @@ def unsloth_save_pretrained_merged( save_peft_format : bool = True, tags : List[str] = None, temporary_location : str = "_unsloth_temporary_saved_buffers", - maximum_memory_usage : float = 0.85, + maximum_memory_usage : float = 0.85, ): """ Same as .save_pretrained(...) except 4bit weights are auto @@ -768,14 +754,14 @@ def unsloth_push_to_hub_merged( tokenizer = None, save_method : str = "merged_16bit", # ["lora", "merged_16bit", "merged_4bit"] use_temp_dir : Optional[bool] = None, - commit_message : Optional[str] = None, + commit_message : Optional[str] = "Trained with Unsloth", private : Optional[bool] = None, token : Union[bool, str, None] = None, max_shard_size : Union[int, str, None] = "5GB", create_pr : bool = False, safe_serialization : bool = True, revision : str = None, - commit_description : str = None, + commit_description : str = "Upload model trained with Unsloth 2x faster", tags : Optional[List[str]] = None, temporary_location : str = "_unsloth_temporary_saved_buffers", maximum_memory_usage : float = 0.85, @@ -887,7 +873,7 @@ def upload_to_huggingface(model, save_directory, token, method, extra = "", file path_in_repo = uploaded_location, repo_id = save_directory, repo_type = "model", - commit_message = "(Trained with Unsloth 2x faster)", + commit_message = "(Trained with Unsloth)", ) # We also upload a config.json file @@ -900,7 +886,7 @@ def upload_to_huggingface(model, save_directory, token, method, extra = "", file path_in_repo = "config.json", repo_id = save_directory, repo_type = "model", - commit_message = "(Trained with Unsloth 2x faster)", + commit_message = "(Trained with Unsloth)", ) os.remove("_temporary_unsloth_config.json") pass @@ -1019,14 +1005,14 @@ def unsloth_push_to_hub_gguf( quantization_method : str = "fast_quantized", first_conversion : str = "f16", use_temp_dir : Optional[bool] = None, - commit_message : Optional[str] = None, + commit_message : Optional[str] = "Trained with Unsloth", private : Optional[bool] = None, token : Union[bool, str, None] = None, max_shard_size : Union[int, str, None] = "5GB", create_pr : bool = False, safe_serialization : bool = True, revision : str = None, - commit_description : str = None, + commit_description : str = "Upload model trained with Unsloth 2x faster", tags : Optional[List[str]] = None, temporary_location : str = "_unsloth_temporary_saved_buffers", maximum_memory_usage : float = 0.85, @@ -1146,9 +1132,9 @@ def patch_saving_functions(model): commit_message = arguments["commit_message"] if commit_message is not None: if not commit_message.endswith(" "): commit_message += " " - commit_message += "(Trained with Unsloth 2x faster)" + commit_message += "(Trained with Unsloth)" else: - commit_message = "Upload model trained with Unsloth 2x faster" + commit_message = "Upload model trained with Unsloth" arguments["commit_message"] = commit_message if "commit_description" in arguments: