Hi
I am writing to seek assistance regarding an error I encountered while running a custum BERT-based classifier.
I am currently working with a relatively small dataset, and I have set the batch sizes as follows:
train_batch_size
: 4val_batch_size
: 4
The validation set consists of fewer than 200 examples, while the training set has approximately 600 examples.
I would greatly appreciate your help in resolving this issue.
Here is the code snippet that Iโm working with:
class BERTClassifier(BertPreTrainedModel):
def __init__(self, config):
super().__init__(config)
self.num_labels = config.num_labels
self.config = config
self.bert = BertModel(config)
self.dropout = torch.nn.Dropout(0.3)
self.linear = torch.nn.Linear(768, self.num_labels)
self.post_init()
def forward(self, input_ids, attention_mask=None,
token_type_ids=None, labels=None,
features=None, output_attentions=False):
outputs = self.bert(
input_ids,
attention_mask=attention_mask,
token_type_ids=token_type_ids,
output_attentions=True
)
if features is not None:
dropout_output = torch.cat((dropout_output, features), dim=1)
logits = self.linear(dropout_output)
loss = None
if labels is not None:
loss_fct = BCEWithLogitsLoss()
loss = loss_fct(logits, labels)
return SequenceClassifierOutput(loss=loss, logits=logits, hidden_states=outputs.hidden_states,attentions=outputs.attentions)
model = BERTClassifier.from_pretrained('bert-base-uncased')
model.to(device)
I encountered the following error message:
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Traceback (most recent call last) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ /tmp/ipykernel_29/4032920361.py:1 in <module> โ
โ โ
โ [Errno 2] No such file or directory: '/tmp/ipykernel_29/4032920361.py' โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer.py:1645 in train โ
โ โ
โ 1642 โ โ inner_training_loop = find_executable_batch_size( โ
โ 1643 โ โ โ self._inner_training_loop, self._train_batch_size, args.auto_find_batch_size โ
โ 1644 โ โ ) โ
โ โฑ 1645 โ โ return inner_training_loop( โ
โ 1646 โ โ โ args=args, โ
โ 1647 โ โ โ resume_from_checkpoint=resume_from_checkpoint, โ
โ 1648 โ โ โ trial=trial, โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer.py:2035 in _inner_training_loop โ
โ โ
โ 2032 โ โ โ โ self.control.should_training_stop = True โ
โ 2033 โ โ โ โ
โ 2034 โ โ โ self.control = self.callback_handler.on_epoch_end(args, self.state, self.con โ
โ โฑ 2035 โ โ โ self._maybe_log_save_evaluate(tr_loss, model, trial, epoch, ignore_keys_for_ โ
โ 2036 โ โ โ โ
โ 2037 โ โ โ if DebugOption.TPU_METRICS_DEBUG in self.args.debug: โ
โ 2038 โ โ โ โ if is_torch_tpu_available(): โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer.py:2321 in _maybe_log_save_evaluate โ
โ โ
โ 2318 โ โ โ โ โ ) โ
โ 2319 โ โ โ โ โ metrics.update(dataset_metrics) โ
โ 2320 โ โ โ else: โ
โ โฑ 2321 โ โ โ โ metrics = self.evaluate(ignore_keys=ignore_keys_for_eval) โ
โ 2322 โ โ โ self._report_to_hp_search(trial, self.state.global_step, metrics) โ
โ 2323 โ โ โ โ
โ 2324 โ โ โ # Run delayed LR scheduler now that metrics are populated โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer.py:3053 in evaluate โ
โ โ
โ 3050 โ โ start_time = time.time() โ
โ 3051 โ โ โ
โ 3052 โ โ eval_loop = self.prediction_loop if self.args.use_legacy_prediction_loop else se โ
โ โฑ 3053 โ โ output = eval_loop( โ
โ 3054 โ โ โ eval_dataloader, โ
โ 3055 โ โ โ description="Evaluation", โ
โ 3056 โ โ โ # No point gathering the predictions if there are no metrics, otherwise we d โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer.py:3270 in evaluation_loop โ
โ โ
โ 3267 โ โ โ โ if self.preprocess_logits_for_metrics is not None: โ
โ 3268 โ โ โ โ โ logits = self.preprocess_logits_for_metrics(logits, labels) โ
โ 3269 โ โ โ โ logits = self._nested_gather(logits) โ
โ โฑ 3270 โ โ โ โ preds_host = logits if preds_host is None else nested_concat(preds_host, โ
โ 3271 โ โ โ if labels is not None: โ
โ 3272 โ โ โ โ labels = self._nested_gather(labels) โ
โ 3273 โ โ โ โ labels_host = labels if labels_host is None else nested_concat(labels_ho โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer_pt_utils.py:114 in nested_concat โ
โ โ
โ 111 โ โ new_tensors โ
โ 112 โ ), f"Expected `tensors` and `new_tensors` to have the same type but found {type(tens โ
โ 113 โ if isinstance(tensors, (list, tuple)): โ
โ โฑ 114 โ โ return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n i โ
โ 115 โ elif isinstance(tensors, torch.Tensor): โ
โ 116 โ โ return torch_pad_and_concatenate(tensors, new_tensors, padding_index=padding_ind โ
โ 117 โ elif isinstance(tensors, Mapping): โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer_pt_utils.py:114 in <genexpr> โ
โ โ
โ 111 โ โ new_tensors โ
โ 112 โ ), f"Expected `tensors` and `new_tensors` to have the same type but found {type(tens โ
โ 113 โ if isinstance(tensors, (list, tuple)): โ
โ โฑ 114 โ โ return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n i โ
โ 115 โ elif isinstance(tensors, torch.Tensor): โ
โ 116 โ โ return torch_pad_and_concatenate(tensors, new_tensors, padding_index=padding_ind โ
โ 117 โ elif isinstance(tensors, Mapping): โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer_pt_utils.py:114 in nested_concat โ
โ โ
โ 111 โ โ new_tensors โ
โ 112 โ ), f"Expected `tensors` and `new_tensors` to have the same type but found {type(tens โ
โ 113 โ if isinstance(tensors, (list, tuple)): โ
โ โฑ 114 โ โ return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n i โ
โ 115 โ elif isinstance(tensors, torch.Tensor): โ
โ 116 โ โ return torch_pad_and_concatenate(tensors, new_tensors, padding_index=padding_ind โ
โ 117 โ elif isinstance(tensors, Mapping): โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer_pt_utils.py:114 in <genexpr> โ
โ โ
โ 111 โ โ new_tensors โ
โ 112 โ ), f"Expected `tensors` and `new_tensors` to have the same type but found {type(tens โ
โ 113 โ if isinstance(tensors, (list, tuple)): โ
โ โฑ 114 โ โ return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n i โ
โ 115 โ elif isinstance(tensors, torch.Tensor): โ
โ 116 โ โ return torch_pad_and_concatenate(tensors, new_tensors, padding_index=padding_ind โ
โ 117 โ elif isinstance(tensors, Mapping): โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer_pt_utils.py:116 in nested_concat โ
โ โ
โ 113 โ if isinstance(tensors, (list, tuple)): โ
โ 114 โ โ return type(tensors)(nested_concat(t, n, padding_index=padding_index) for t, n i โ
โ 115 โ elif isinstance(tensors, torch.Tensor): โ
โ โฑ 116 โ โ return torch_pad_and_concatenate(tensors, new_tensors, padding_index=padding_ind โ
โ 117 โ elif isinstance(tensors, Mapping): โ
โ 118 โ โ return type(tensors)( โ
โ 119 โ โ โ {k: nested_concat(t, new_tensors[k], padding_index=padding_index) for k, t i โ
โ โ
โ /opt/conda/lib/python3.10/site-packages/transformers/trainer_pt_utils.py:75 in โ
โ torch_pad_and_concatenate โ
โ โ
โ 72 โ tensor2 = atleast_1d(tensor2) โ
โ 73 โ โ
โ 74 โ if len(tensor1.shape) == 1 or tensor1.shape[1] == tensor2.shape[1]: โ
โ โฑ 75 โ โ return torch.cat((tensor1, tensor2), dim=0) โ
โ 76 โ โ
โ 77 โ # Let's figure out the new shape โ
โ 78 โ new_shape = (tensor1.shape[0] + tensor2.shape[0], max(tensor1.shape[1], tensor2.shap โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
OutOfMemoryError: CUDA out of memory. Tried to allocate 288.00 MiB (GPU 0; 15.90 GiB total capacity; 14.14 GiB
already allocated; 201.75 MiB free; 14.82 GiB reserved in total by PyTorch) If reserved memory is >> allocated
memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and
PYTORCH_CUDA_ALLOC_CONF
Thank you