ai-forever / ru-gpts

Russian GPT3 models.
Apache License 2.0
2.08k stars 444 forks source link

CPU offload режим для GPT3XL #59

Closed exelents closed 3 years ago

exelents commented 3 years ago

Добрый день. Недавно при попытке файнтюнить самую большую GPT3XL столкнулся с ошибкой нехватки памяти. Попытался в конфиге deepspeed включить режим cpu_offload и обломался - выдаётся ошибка, см стек по ссылке: https://gist.github.com/exelents/dd64ddd745bfa732a809a6b3e9af678d RuntimeError: expected input to be on cuda Вопрос - что нужно сделать чтоб данная модель завелась в режиме cpu offload и возможно ли это вообще?

exelents commented 3 years ago

Я дико извиняюсь, похоже сам нашел как забороть проблему. В файле pretrain_gpt3.py просто заменил оптимизатор:

# from apex.optimizers import FusedAdam as Adam
from deepspeed.ops.adam import DeepSpeedCPUAdam as Adam

Надеюсь больше не будет подводных камней.

AlexanderKozhevin commented 3 years ago

@exelents добрый день. не могли бы подсказать, я файл pretrain_gpt3 изменил. Но ошибку все равно получаю. " module 'apex' has no attribute 'optimizers'"

На этапе теста

import deepspeed.ops.sparse_attention.sparse_attn_op
exelents commented 3 years ago

Не могли бы вы привести полный стек ошибки? А заодно какую команду вы запускаете?

Artyrm commented 3 years ago

@exelents в Colab это помогло мне продвинуться дальше, но теперь вылетает с такой ошибкой:

 > number of parameters on model parallel rank 0: 1315737600
--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 0 on node 7507dafadf1d exited on signal 4 (Illegal instruction).
--------------------------------------------------------------------------

А у вас без проблем всё заработало?

UPD Я подумал, Colab же периодически меняет окружение, возможно у меня что-то скомпилировано было для другого уже, попробую пересобрать, например apex. UPD2. Не помогает, да и там и там Intel(R) Xeon(R) CPU @ 2.20GHz оказался, так что вряд ли в этом было дело... UPD3. Переустановил Deepspeed, стало лучше - процесс прошёл дальше. Очевидно, выбивает по объёму памяти. Думаю, что делать. Память-то как раз расширенная на Colab.

tcmalloc: large alloc 5260378112 bytes == 0x56198f3ac000 @  0x7fcff3687b6b 0x7fcff36a7379 0x7fcf4e3aa74e 0x7fcf4e3ac7b6 0x7fcfd1ef0fa2 0x7fcfd21dbbd3 0x7fcfd21b3207 0x7fcfd21ce2dc 0x7fcfd21aa78a 0x7fcfd21b3207 0x7fcfd21ce2dc 0x7fcfd229a0dd 0x7fcfd1ee7a25 0x7fcfd240dc97 0x7fcfd245c525 0x7fcfd1abe0ce 0x7fcfd21d76f3 0x7fcfd21b0fa2 0x7fcfd1abe0ce 0x7fcfd21d76f3 0x7fcfd22bdc06 0x7fcfe1f7ba47 0x5618812ca0a4 0x5618812c9da0 0x56188133e868 0x5618812cb65a 0x561881339d67 0x561881338c35 0x5618812cbfec 0x56188130cbc9 0x561881309ac4
--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 0 on node 7507dafadf1d exited on signal 9 (Killed).
exelents commented 3 years ago

на счёт памяти - не подскажу, у меня-то как раз памяти много, с OOM не сталкивался.

Artyrm commented 3 years ago

А насколько много?

В Colab сейчас у меня GPU Tesla P100-PCIE 16GB и соответственно 24GB ОЗУ. Дотренировывать пытаюсь на жалких 100кБ текста.

Как-то досадно, ведь вроде бы выложен Colab ноутбук как раз с примером, и у меня вроде максимум того, что возможно на Colab...

PS читаю ваши комментарии на github у Deepspeed :)

exelents commented 3 years ago

Очень много. Б/у серверное железо с кучей оперы, гораздо больше чем на коллабе. Видюха RTX3090 на ней соответственно 24 ГБ памяти. Тренируете на deepspeed? Попробуйте конфиг дипспида поставить тот который я вам сейчас прикреплю. gpt3_xl_sparse_2048_offload.json.zip

Artyrm commented 3 years ago

Да, на Deepspeed, иначе бы offload в ОЗУ не получился (хотя я сейчас смотрю, есть вроде флаги отдельные у трейнера, например

  cpu_optimizer ................ False
  cpu_torch_adam ............... False

К сожалению, не помог конфиг. Для будущих поколений приложу что добавлено в сравнении с моим.

image

В любом случае, спасибо!