Попытка обучить модель разрешения кореференции AllenNLP на онтонах: выводит CUDA из памяти
Я пытаюсь обучить модель Coreference AllenNLP на графическом процессоре 16 ГБ, используя этот файл конфигурации: https://github.com/allenai/allennlp-models/blob/main/training_config/coref/coref_spanbert_large.jsonnet
Я создал файлы для обучения, тестирования и разработки с помощью этого скрипта: https://github.com/allenai/allennlp/blob/master/scripts/compile_coref_data.sh
У меня почти мгновенно не хватило памяти для CUDA, поэтому я попытался изменить "spans_per_word" и "max_antecedent" на более низкие значения. Если для параметра spans_per_words установлено значение 0,1 вместо 0,4, я мог бы работать немного дольше, но не почти всю эпоху. Разве 16 ГБ GPU недостаточно? Или есть другие параметры, которые я могу попробовать изменить?
Отслеживание (последний вызов последним): файл "/ home / ubuntu / anaconda3 / envs / allennlp / bin / allennlp", строка 8, в файле sys.exit(run()) "/ home / ubuntu / anaconda3 / envs / allennlp. /lib/python3.7/site-packages/allennlp/main.py ", строка 34, в запущенном основном (prog=" allennlp ") файле" /home/ubuntu/anaconda3/envs/allennlp/lib/python3.7/ сайты-пакеты / allennlp / команды / init.py ", строка 119, в основном файле args.func (args)" /home/ubuntu/anaconda3/envs/allennlp/lib/python3.7/site-packages/allennlp/commands/train.py ", строка 119, в train_model_from_args file_friendly_logging=args.file_friendly_logging,File "/home/ubuntu/anaconda3/envs/allennlp/lib/python3.7/site-packages/allennlp/commands/train.py", строка 178, file_logging_friend_fly_model_file_file_file_file_loggingfly_model_fileg "/home/ubuntu/anaconda3/envs/allennlp/lib/python3.7/site-packages/allennlp/commands/train.py", строка 242, в train_model file_friendly_logging=file_friendly_logging,File "/ home / ubuntu / anaconda3 / envs/allennlp/lib/python3.7/site-packages/allennlp/commands/train.py ", строка 466, в файле _train_workermetrics = train_loop.run()" / home / ubuntu / anaconda3 / envs / allennlp / lib / python3.7 / site-packages / allennlp / commands / train.py ", строка 528, в процессе выполнения return self.trainer.train ()File" /home/ubuntu/anaconda3/envs/allennlp/lib/python3.7/site-packages/allennlp/training/trainer.py ", строка 740, в показателях поезда, epoch = self._try_train ()File" /home/ubuntu/anaconda3/envs/allennlp/lib/python3.7/site-packages/allennlp/training/trainer.py ", строка 772, в файле _try_traintrain_metrics = self._train_epoch(epoch)" /home/ubuntu/anaconda3/envs/allennlp/lib/python3.7/site-packages/allennlp/training/trainer.py " , строка 523, в файле _train_epoch loss.backward() "/home/ubuntu/anaconda3/envs/allennlp/lib/python3.7/site-packages/torch/tensor.py", строка 245, в обратном torch.autograd. назад (собственно, градиент, сохранить_граф, создать_граф, входы = входы) Файл "/ home / ubuntu / anaconda3 / envs / allennlp / lib / python3.7 / сайт-пакеты / факел / автоград /init.py ", строка 147, в обратном направлении allow_unreachable = True, accumulate_grad = True) # allow_unreachable flag RuntimeError: CUDA out of memory. Пытался выделить 1,33 ГиБ (GPU 0; 14,76 ГиБ общая емкость; 11,69 ГиБ уже выделено; 639,75 МиБ свободно ; Всего 13,09 ГиБ зарезервировано PyTorch)
1 ответ
16 ГБ - это нижний предел для этой модели.
Когда эта модель получает много текста, она разбивает текст на несколько более коротких последовательностей по 512 слов в каждой и запускает их все одновременно. Таким образом, вы получите одновременно много последовательностей в памяти, даже если размер пакета равен 1.
Попробуйте установить
max_sentence
установите меньшее значение (по умолчанию 110) и посмотрите, работает ли это.