CodeTF icon indicating copy to clipboard operation
CodeTF copied to clipboard

ValueError: The batch received was empty

Open cyw3 opened this issue 1 year ago • 0 comments

I run the demo in README:

# -*- encoding: utf-8 -*-

from codetf.trainer.causal_lm_trainer import CausalLMTrainer
from codetf.data_utility.codexglue_dataset import CodeXGLUEDataset
from codetf.models import load_model_pipeline
from codetf.performance.evaluation_metric import EvaluationMetric


model_class = load_model_pipeline(
    model_name="causal-lm",
    # model_name="codet5",
    task="pretrained",
    # model_type="starcoder-15.5B",
    model_type="codegen-350M-mono",
    # model_type="base-multi-sum",
    is_eval=False,
    load_in_8bit=False,
    weight_sharding=False,
)


dataloader = CodeXGLUEDataset(tokenizer=model_class.get_tokenizer())
train_dataset, test_dataset, val_dataset = dataloader.load(subset="text-to-code")

# peft can be in ["lora", "prefixtuning"]
trainer = CausalLMTrainer(
    train_dataset=train_dataset,
    validation_dataset=val_dataset,
    peft=None,
    pretrained_model_or_path=model_class.get_model(),
    tokenizer=model_class.get_tokenizer(),
)
trainer.train()


evaluator = EvaluationMetric(metric="bleu", tokenizer=model_class.tokenizer)
# trainer.evaluate(test_dataset=test_dataset)

However, I get a error:

╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /data/test//test_finetune.py:36 in <module>                        │
│                                                                                                  │
│   33 │   pretrained_model_or_path=model_class.get_model(),                                       │
│   34 │   tokenizer=model_class.get_tokenizer(),                                                  │
│   35 )                                                                                           │
│ ❱ 36 trainer.train()                                                                             │
│   37                                                                                             │
│   38                                                                                             │
│   39 evaluator = EvaluationMetric(metric="bleu", tokenizer=model_class.tokenizer)                │
│                                                                                                  │
│ /root/.pyenv/versions/3.10.0/lib/python3.10/site-packages/codetf/trainer/base_trainer.py:54 in train                          │
│                                                                                                  │
│    51 │   │   )                                                                                  │
│    52 │                                                                                          │
│    53 │   def train(self):                                                                       │
│ ❱  54 │   │   self.trainer.train()                                                               │
│    55 │                                                                                          │
│    56 │   def evaluate(self, dataset=None):                                                      │
│    57 │   │   self.trainer.evaluate(dataset)                                                     │
│                                                                                                  │
│ /root/.pyenv/versions/3.10.0/lib/python3.10/site-packages/transformers/trainer.py:1664 in train  │
│                                                                                                  │
│   1661 │   │   inner_training_loop = find_executable_batch_size(                                 │
│   1662 │   │   │   self._inner_training_loop, self._train_batch_size, args.auto_find_batch_size  │
│   1663 │   │   )                                                                                 │
│ ❱ 1664 │   │   return inner_training_loop(                                                       │
│   1665 │   │   │   args=args,                                                                    │
│   1666 │   │   │   resume_from_checkpoint=resume_from_checkpoint,                                │
│   1667 │   │   │   trial=trial,                                                                  │
│                                                                                                  │
│ /root/.pyenv/versions/3.10.0/lib/python3.10/site-packages/accelerate/utils/memory.py:124 in      │
│ decorator                                                                                        │
│                                                                                                  │
│   121 │   │   │   if batch_size == 0:                                                            │
│   122 │   │   │   │   raise RuntimeError("No executable batch size found, reached zero.")        │
│   123 │   │   │   try:                                                                           │
│ ❱ 124 │   │   │   │   return function(batch_size, *args, **kwargs)                               │
│   125 │   │   │   except Exception as e:                                                         │
│   126 │   │   │   │   if should_reduce_batch_size(e):                                            │
│   127 │   │   │   │   │   gc.collect()                                                           │
│                                                                                                  │
│ /root/.pyenv/versions/3.10.0/lib/python3.10/site-packages/transformers/trainer.py:1940 in        │
│ _inner_training_loop                                                                             │
│                                                                                                  │
│   1937 │   │   │   │   │   with model.no_sync():                                                 │
│   1938 │   │   │   │   │   │   tr_loss_step = self.training_step(model, inputs)                  │
│   1939 │   │   │   │   else:                                                                     │
│ ❱ 1940 │   │   │   │   │   tr_loss_step = self.training_step(model, inputs)                      │
│   1941 │   │   │   │                                                                             │
│   1942 │   │   │   │   if (                                                                      │
│   1943 │   │   │   │   │   args.logging_nan_inf_filter                                           │
│                                                                                                  │
│ /root/.pyenv/versions/3.10.0/lib/python3.10/site-packages/transformers/trainer.py:2728 in        │
│ training_step                                                                                    │
│                                                                                                  │
│   2725 │   │   │   `torch.Tensor`: The tensor with training loss on this batch.                  │
│   2726 │   │   """                                                                               │
│   2727 │   │   model.train()                                                                     │
│ ❱ 2728 │   │   inputs = self._prepare_inputs(inputs)                                             │
│   2729 │   │                                                                                     │
│   2730 │   │   if is_sagemaker_mp_enabled():                                                     │
│   2731 │   │   │   loss_mb = smp_forward_backward(model, inputs, self.args.gradient_accumulatio  │
│                                                                                                  │
│ /root/.pyenv/versions/3.10.0/lib/python3.10/site-packages/transformers/trainer.py:2675 in        │
│ _prepare_inputs                                                                                  │
│                                                                                                  │
│   2672 │   │   """                                                                               │
│   2673 │   │   inputs = self._prepare_input(inputs)                                              │
│   2674 │   │   if len(inputs) == 0:                                                              │
│ ❱ 2675 │   │   │   raise ValueError(                                                             │
│   2676 │   │   │   │   "The batch received was empty, your model won't be able to train on it.   │
│   2677 │   │   │   │   f"training dataset contains keys expected by the model: {','.join(self._  │
│   2678 │   │   │   )                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
ValueError: The batch received was empty, your model won't be able to train on it. Double-check that 
your training dataset contains keys expected by the model: 
input_ids,past_key_values,attention_mask,token_type_ids,position_ids,head_mask,inputs_embeds,labels,us
e_cache,output_attentions,output_hidden_states,return_dict,labels,label,label_ids.
  0%|                                                                          | 0/10 [00:01<?, ?it/s]

cyw3 avatar May 29 '23 07:05 cyw3