Дообучение ruGPT-3.5 13B с LoRA
Дообучение ruGPT-3.5 13B с LoRA
Задача темы - выполнить лабораторку, описанную здесь: https://habr.com/ru/articles/766096/
Понять, хватит ли ресурсов видеокарты, сколько времени займёт, из чего состоит процесс дообучения и что получится в итоге.
Понять, хватит ли ресурсов видеокарты, сколько времени займёт, из чего состоит процесс дообучения и что получится в итоге.
Re: Дообучение ruGPT-3.5 13B с LoRA
Пока всё не очень здорово идёт, пришлось увеличить параметр max_tokens_count вдвое, от 1000 до 2000. Жду теперь, когда память закончится. Также оно запросило какой-то сервис wandb для визуализации результатов, пришлось там зарегистрироваться (хотя можно было не показывать картинки).
Re: Дообучение ruGPT-3.5 13B с LoRA
Упало, последние слова были
Код: Выделить всё
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 990.00 MiB (GPU 0; 23.64 GiB total capacity; 19.12 GiB already allocated; 883.12 MiB free; 22.27 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
Re: Дообучение ruGPT-3.5 13B с LoRA
Пробую уменьшить размер пачки (в скрипте 2_train.py параметр per_device_train_batch_size поставил в 1). Жду падения.
Но есть ещё библиотека DeepSpeed, к-рая позволяет использовать память компьютера, когда не хватает памяти GPU. Попробую её тоже подключить, когда в следующий раз упадёт.
Но есть ещё библиотека DeepSpeed, к-рая позволяет использовать память компьютера, когда не хватает памяти GPU. Попробую её тоже подключить, когда в следующий раз упадёт.
Re: Дообучение ruGPT-3.5 13B с LoRA
В общем, надо, видимо, подключить этот deepspace.
*
*
Re: Дообучение ruGPT-3.5 13B с LoRA
Вероятная причина проблемы - то, что репозиторий rulm менялся после выхода статьи, а тем более, после выполнения работ из статьи. Значит, требования к памяти могли вырасти. Вставляем пример json-конфигурации
https://huggingface.co/docs/transformer ... /deepspeed
в configs/rugpt35_13b_colab.json под именем "deepspeed".
https://huggingface.co/docs/transformer ... /deepspeed
в configs/rugpt35_13b_colab.json под именем "deepspeed".
Re: Дообучение ruGPT-3.5 13B с LoRA
А именно, в скрипт 2_train.py после
Добавляю
Кстати, не понял, что значит demo adjustments - это не серьёзное обучение, а так, игрушечное, что ли?
Так сделал, поскольку он формирует конфиг программно и записанное руками пропадает.
Код: Выделить всё
config['trainer']['num_train_epochs'] = 1
Код: Выделить всё
config['deepspeed'] = json.loads('''
{
"zero_optimization": {
"stage": 2,
"offload_optimizer": {
"device": "cpu",
"pin_memory": true
},
"allgather_partitions": true,
"allgather_bucket_size": 2e8,
"reduce_scatter": true,
"reduce_bucket_size": 2e8,
"overlap_comm": true,
"contiguous_gradients": true
}
}
''')
Так сделал, поскольку он формирует конфиг программно и записанное руками пропадает.
Re: Дообучение ruGPT-3.5 13B с LoRA
Залез уже в глубокие дебри, но пока что ни черта не выходит - всё падает и падает. Можно, конечно, вернуться к уменьшенному размеру пакета, но это неспортивно. Можно зато почитать вот это, ведь это же похоже:
https://www.determined.ai/blog/llm-finetuning-2
https://www.determined.ai/blog/llm-finetuning-2
Re: Дообучение ruGPT-3.5 13B с LoRA
Между тем, выясняется, что увеличивая шаги накопления градиента (gradient_accumulation_steps) вдвое, мы можем компенсировать уменьшение размера пакета вдвое. Поскольку с уменьшенным размером пакета программа так и не упала, попробую пока что этот рецепт. Но похоже, что всё же оптимизация почему-то не работает - я её включил, но падает в том же месте, что и раньше, с теми же словами. То ли скомпилировано без Zero Offload, то ли ещё что-то. Надо дальше разбираться.
Re: Дообучение ruGPT-3.5 13B с LoRA
Вот что оно написало:
Что это может означать? Что в этом причина неработоспособности. А поробуем понять, какие ещё оптимизации запущены и что они делают.
Код: Выделить всё
Detected ZeRO Offload and non-DeepSpeed optimizers: This combination should work as long as the custom optimizer has both CPU and GPU implementation (except LAMB)
Re: Дообучение ruGPT-3.5 13B с LoRA
Следовало ожидать, что оно упадёт. Оно подло упало в самом конце со словами:
ХЗ, что это значит, но понятно, что нужно аккуратнее с версиями. Статья написана полгода назад и за это время в бурно меняющемся мире библиотек ясен пень, что что-то поменялось. Что делать?
Видимо, попробовать облачные решения. Они хороши тем, что там записаны все ходы. Как пример:
https://colab.research.google.com/drive ... qQll7Nq0J9
Это, правда, не про то (здесь вроде как не дообучение, а просто запуск), но зато тут видны все версии. Т.е. вот с такого уровня качества примеров надо начинать. Правда, этот пример тоже не заработал. Когда я сделал копию данного блокнота, мне написали, что GPU не может запуститься, хотя вроде всё ок. Из замеченных отличий - версия драйвера NVIDIA увеличилась c 12.0 до 12.2. Но может быть, я просто не занёс денег Гуглу. Поскольку гугл моих недемократичных денег не хочет, то может быть, стоит поискать подобное же на Яндексе.
Код: Выделить всё
{'loss': 1.6027, 'learning_rate': 0.0, 'epoch': 1.0}
100%|█████████████████████████████████████| 219/219 [26:24:33<00:00, 480.70s/it]
Training completed. Do not forget to share your model on huggingface.co/models =)
Loading best model from /p/766096/output/checkpoint-200 (score: 1.5510326623916626).
Traceback (most recent call last):
File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/p/766096/rulm/self_instruct/src/train.py", line 266, in <module>
fire.Fire(train)
File "/p/766096/venv/lib/python3.10/site-packages/fire/core.py", line 143, in Fire
component_trace = _Fire(component, args, parsed_flag_args, context, name)
File "/p/766096/venv/lib/python3.10/site-packages/fire/core.py", line 477, in _Fire
component, remaining_args = _CallAndUpdateTrace(
File "/p/766096/venv/lib/python3.10/site-packages/fire/core.py", line 693, in _CallAndUpdateTrace
component = fn(*varargs, **kwargs)
File "/p/766096/rulm/self_instruct/src/train.py", line 252, in train
trainer.train(checkpoint)
File "/p/766096/venv/lib/python3.10/site-packages/transformers/trainer.py", line 1592, in train
return inner_training_loop(
File "/p/766096/venv/lib/python3.10/site-packages/transformers/trainer.py", line 2028, in _inner_training_loop
self._load_best_model()
File "/p/766096/venv/lib/python3.10/site-packages/transformers/trainer.py", line 2205, in _load_best_model
deepspeed_load_checkpoint(self.model_wrapped, self.state.best_model_checkpoint)
File "/p/766096/venv/lib/python3.10/site-packages/transformers/integrations/deepspeed.py", line 408, in deepspeed_load_checkpoint
raise ValueError(f"Can't find a valid checkpoint at {checkpoint_path}")
ValueError: Can't find a valid checkpoint at /p/766096/output/checkpoint-200
Видимо, попробовать облачные решения. Они хороши тем, что там записаны все ходы. Как пример:
https://colab.research.google.com/drive ... qQll7Nq0J9
Это, правда, не про то (здесь вроде как не дообучение, а просто запуск), но зато тут видны все версии. Т.е. вот с такого уровня качества примеров надо начинать. Правда, этот пример тоже не заработал. Когда я сделал копию данного блокнота, мне написали, что GPU не может запуститься, хотя вроде всё ок. Из замеченных отличий - версия драйвера NVIDIA увеличилась c 12.0 до 12.2. Но может быть, я просто не занёс денег Гуглу. Поскольку гугл моих недемократичных денег не хочет, то может быть, стоит поискать подобное же на Яндексе.