From be94b71cb87e33cc29c2088fea5ef616b8bd774c Mon Sep 17 00:00:00 2001 From: Daniel Han Date: Sun, 11 Aug 2024 18:26:20 -0700 Subject: [PATCH] Fix DPO stats (#906) * Update pyproject.toml * Update tokenizer_utils.py * Update tokenizer_utils.py * Update tokenizer_utils.py * Update _utils.py * Update _utils.py * Update tokenizer_utils.py * Update tokenizer_utils.py * fix_tokenizer * Update tokenizer_utils.py * Update tokenizer_utils.py * Update save.py * Update save.py * Update save.py * Update save.py * Update save.py * Update loader.py * Update pyproject.toml * Update _utils.py * Update gemma2.py * Update gemma2.py * Update _utils.py * gemma 2 mask * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update _utils.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Update _utils.py * Update llama.py * Update llama.py * Update llama.py * Update _utils.py * Update _utils.py * Update _utils.py * Update _utils.py * Update _utils.py * Update _utils.py * Torch 2.4 Xformers 0.0.27post2 * Update llama.py * Update llama.py * Update llama.py * Update llama.py * Gemma 2 fixes * Update gemma2.py * Update llama.py * Update llama.py * Update save.py * Update save.py * Update llama.py * Update cross_entropy_loss.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py * Update dpo.py --- unsloth/kernels/cross_entropy_loss.py | 1 + unsloth/models/dpo.py | 16 +++++++++++++--- unsloth/models/llama.py | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/unsloth/kernels/cross_entropy_loss.py b/unsloth/kernels/cross_entropy_loss.py index 6074a51538..b8473e60c7 100644 --- a/unsloth/kernels/cross_entropy_loss.py +++ b/unsloth/kernels/cross_entropy_loss.py @@ -303,6 +303,7 @@ class Fast_CrossEntropyLoss(torch.autograd.Function): pass +@torch._disable_dynamo def fast_cross_entropy_loss(logits, labels, logit_softcapping = 0): """ Arguments: diff --git a/unsloth/models/dpo.py b/unsloth/models/dpo.py index b7c7305bb3..e7074350c3 100644 --- a/unsloth/models/dpo.py +++ b/unsloth/models/dpo.py @@ -12,6 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +__all__ = [ + "PatchDPOTrainer", +] + try: from transformers.utils.notebook import ( IntervalStrategy, @@ -22,6 +26,12 @@ try: except: HAS_NOTEBOOK = False pass +import torch +from ._utils import torch_compile_options +import inspect +import torch.nn as nn +from typing import Any, Callable, Dict, List, Literal, Optional, Tuple, Union + DPOTrainer_metrics = [ "rewards/chosen", @@ -37,11 +47,11 @@ set_DPOTrainer_metrics = frozenset(DPOTrainer_metrics) def NotebookProgressCallback_on_train_begin(self, args, state, control, **kwargs): - self.first_column = "Epoch" if args.evaluation_strategy == IntervalStrategy.EPOCH else "Step" + self.first_column = "Epoch" if args.eval_strategy == IntervalStrategy.EPOCH else "Step" self.training_loss = 0 self.last_log = 0 column_names = [self.first_column] + ["Training Loss"] - if args.evaluation_strategy != IntervalStrategy.NO: + if args.eval_strategy != IntervalStrategy.NO: column_names.append("Validation Loss") column_names += [x.replace("/", " / ") for x in DPOTrainer_metrics] self.training_tracker = NotebookTrainingTracker(state.max_steps, column_names) @@ -50,7 +60,7 @@ pass def NotebookProgressCallback_on_log(self, args, state, control, logs=None, **kwargs): # Only for when there is no evaluation - if args.evaluation_strategy == IntervalStrategy.NO and "loss" in logs: + if args.eval_strategy == IntervalStrategy.NO and "loss" in logs: values = {"Training Loss": logs["loss"]} for metric in DPOTrainer_metrics: values[metric.replace("/", " / ")] = logs[metric] diff --git a/unsloth/models/llama.py b/unsloth/models/llama.py index 2a07da6ce5..6f1bb62c18 100644 --- a/unsloth/models/llama.py +++ b/unsloth/models/llama.py @@ -961,6 +961,7 @@ def CausalLM_fast_forward(fast_forward_inference): pass +@torch._disable_dynamo def PeftModelForCausalLM_fast_forward( self, input_ids=None,