Błędy podczas uczenia i douczania transformatorów

Chcę wykorzystać trainera do fine-tuningowania ale dostaję komunikat CUBLAS_STATUS_ALLOC_FAILED

Problem pojawia się w bibliotece huggingface (transformers-4.3.2) + pytorch (torch-1.7.1) i dotyczy braku pamięci GPU.

(…) /pytorch/aten/src/THCUNN/ClassNLLCriterion.cu:108: cunn_ClassNLLCriterion_updateOutput_kernel: block: [0,0,0], thread: [13,0,0] Assertion `t >= 0 && t < n_classes` failed. (…) torch.autograd.backward(self, gradient, retain_graph, create_graph) File „/usr/local/lib/python3.8/dist-packages/torch/autograd/__init__.py”, line 130, in backward Variable._execution_engine.run_backward( RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`

Rozwiązanie: Prawdopodobnie źle ustawiona liczba klas w trainerze. Liczba etykiet w danych oraz zadeklarowanych są różne.

Dostaję informację o braku pamięci na GPU pomimo tego, że mam

Problem pojawia się w bibliotece huggingface (transformers-4.3.2) + pytorch (torch-1.7.1).

RuntimeError: CUDA out of memory. Tried to allocate 120.00 MiB (GPU 0; 11.17 GiB total capacity; 7. 92 GiB already allocated; 145.81 MiB free; 6.56 GiB reserved in total by PyTorch)

Rozwiązanie: Zmniejszyć domyśle wielkości dla długości sekwencji, rozmiaru batcha podczas testowania oraz rozmiaru batcha podczas ewaluacji.

--max_seq_length
--per_device_train_batch_size
--per_device_eval_batch_size

Podczas rozproszonego uczenia (np. clm) dostaję komunikat typu ValueError: expected sequence of length 1024 at dim:

Problem: Podczas uczenia/testowania/walidacji modelu dostaję komunikat

83%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▋ | 5/6 [00:07<00:00, 1.03it/s] Traceback (most recent call last): File „run_clm.py”, line 579, in
main()
File „run_clm.py”, line 527, in main
train_result = trainer.train(resume_from_checkpoint=checkpoint)
File „/home/pkedzia/.local/lib/python3.8/site-packages/transformers/trainer.py”, line 1547, in train
return inner_training_loop(
File „/home/pkedzia/.local/lib/python3.8/site-packages/transformers/trainer.py”, line 1769, in _inner_training_loop
for step, inputs in enumerate(epoch_iterator):
File „/home/pkedzia/.local/lib/python3.8/site-packages/torch/utils/data/dataloader.py”, line 681, in next
data = self._next_data()
File „/home/pkedzia/.local/lib/python3.8/site-packages/torch/utils/data/dataloader.py”, line 721, in _next_data
data = self._dataset_fetcher.fetch(index) # may raise StopIteration
File „/home/pkedzia/.local/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py”, line 52, in fetch
return self.collate_fn(data)
File „/home/pkedzia/.local/lib/python3.8/site-packages/transformers/data/data_collator.py”, line 70, in default_data_collator
return torch_default_data_collator(features)
File „/home/pkedzia/.local/lib/python3.8/site-packages/transformers/data/data_collator.py”, line 136, in torch_default_data_collator
batch[k] = torch.tensor([f[k] for f in features])
ValueError: expected sequence of length 1024 at dim 1 (got 393)

Rozwiązanie: Należy dodać parzystą liczbę workerów w preprocessie, czyli:

--preprocessing_num_workers 2

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *