Дообучение ruGPT-3.5 13B с LoRA

Большие локальные модели, прежде всего хорошо поддерживающие русский язык.
Ответить
БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 11:43

Задача темы - выполнить лабораторку, описанную здесь: https://habr.com/ru/articles/766096/
Понять, хватит ли ресурсов видеокарты, сколько времени займёт, из чего состоит процесс дообучения и что получится в итоге.

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 14:15

Пока всё не очень здорово идёт, пришлось увеличить параметр max_tokens_count вдвое, от 1000 до 2000. Жду теперь, когда память закончится. Также оно запросило какой-то сервис wandb для визуализации результатов, пришлось там зарегистрироваться (хотя можно было не показывать картинки).

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 14:32

Упало, последние слова были

Код: Выделить всё

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

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 14:55

Пробую уменьшить размер пачки (в скрипте 2_train.py параметр per_device_train_batch_size поставил в 1). Жду падения.

Но есть ещё библиотека DeepSpeed, к-рая позволяет использовать память компьютера, когда не хватает памяти GPU. Попробую её тоже подключить, когда в следующий раз упадёт.


БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 15:58

В общем, надо, видимо, подключить этот deepspace.
*

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 16:51

Вероятная причина проблемы - то, что репозиторий rulm менялся после выхода статьи, а тем более, после выполнения работ из статьи. Значит, требования к памяти могли вырасти. Вставляем пример json-конфигурации

https://huggingface.co/docs/transformer ... /deepspeed

в configs/rugpt35_13b_colab.json под именем "deepspeed".

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 16:57

А именно, в скрипт 2_train.py после

Код: Выделить всё

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
  }
}
''')
Кстати, не понял, что значит demo adjustments - это не серьёзное обучение, а так, игрушечное, что ли?
Так сделал, поскольку он формирует конфиг программно и записанное руками пропадает.

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 17:54

Залез уже в глубокие дебри, но пока что ни черта не выходит - всё падает и падает. Можно, конечно, вернуться к уменьшенному размеру пакета, но это неспортивно. Можно зато почитать вот это, ведь это же похоже:

https://www.determined.ai/blog/llm-finetuning-2

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 18:06

Между тем, выясняется, что увеличивая шаги накопления градиента (gradient_accumulation_steps) вдвое, мы можем компенсировать уменьшение размера пакета вдвое. Поскольку с уменьшенным размером пакета программа так и не упала, попробую пока что этот рецепт. Но похоже, что всё же оптимизация почему-то не работает - я её включил, но падает в том же месте, что и раньше, с теми же словами. То ли скомпилировано без Zero Offload, то ли ещё что-то. Надо дальше разбираться.

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 15.04.24 18:14

Вот что оно написало:

Код: Выделить всё

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)
Что это может означать? Что в этом причина неработоспособности. А поробуем понять, какие ещё оптимизации запущены и что они делают.

БудДен
Сообщения: 2917
Зарегистрирован: 07.10.18 14:01

Re: Дообучение ruGPT-3.5 13B с LoRA

Сообщение БудДен » 17.04.24 11:47

Следовало ожидать, что оно упадёт. Оно подло упало в самом конце со словами:

Код: Выделить всё

{'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. Но может быть, я просто не занёс денег Гуглу. Поскольку гугл моих недемократичных денег не хочет, то может быть, стоит поискать подобное же на Яндексе.

Ответить