gpt-2-training
gpt-2-training copied to clipboard
How to train large models?
Подскажите, пожалуйста, как обучать модель с набором 1558M к примеру? Мы пробовали запускать train-horovod.py на видео-карте RTX2080TI, но не хватило памяти и мы получили ошибку OOM На видео-карте Tesla V100 запустилась лишь модель 774M!
Вы пишите про memory_saving_gradients.py но не очень понятно как это применять на практике?
Я пробовал просто заменить файл на оригинальный src/memory_saving_gradients.py
но это не решило проблемы, расходование памяти осталось прежним.
Обучение запускаем такой командой. В сервере 4 видео-карты. CUDA 10.2
horovodrun --start-timeout 600 -np 4 -H localhost:4 PYTHONPATH=src ./train-horovod.py --batch_size 1 --save_every 100 --model_name 1558M --dataset test.npz
Подскажите, пожалуйста, как запускать обучение на видео-картах таких моделей? Спасибо!
Добрый вечер,
Попробуйте мой скрипт из этого репо (https://github.com/l4rz/gpt-2-training/blob/master/train-horovod-1250M.py ), в нем memory saving gradients уже включены по умолчению, и оптимизатор правильно обернут:
opt_grads = memory_saving_gradients.gradients(loss, train_vars) opt_grads = list(zip(opt_grads, train_vars)) train_op = opt.apply_gradients(opt_grads, global_step = global_step)
Также убедитесь, что у вас есть комментарий в строчке (#if layer == 10:) в model.py, в противном случае используется гораздо больше VRAM
На 2080ti с 11Gb большую модель (1558M) тренировать, скорее всего, не получится. Модель из этого репо я тренировал на V100/32Gb.
Попробовал всяко запускать - все равно падает с ошибкой памяти.
Resource exhausted: OOM when allocating tensor with shape[1,1,1024,1024] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
Подскажите, а как получить модель 1250M? Никак не могу понять. На модели 1558M я получаю ошибку, что написал выше. Что на Вашем репозитории, что на https://github.com/nshepperd/gpt-2.git (пробовал там изменить скрипт обучения и модели, в соответствии с Вашими фиксами)
И еще скажите, какое окружение было?
Я пробую на:
Tesla V100/32Gb
CUDA10.2, python3.7, tensorflow-gpu 1.15.0, NCCL
Horovod ставлю так: HOROVOD_GPU_OPERATIONS=NCCL pip install --no-cache-dir horovod
Спасибо!
Практически, самая большая модель, которая у меня входила в V100 32Gb на FP32, имела чуть больше 2B параметров. Если выходит OOM, значит, что-то не так:
- batch size слишком большой
- context window больше 1K
- memory savings gradient не используются что-то еще
Конфиг от модели 1250M лежит в этом репо
{ "n_vocab": 50257, "n_ctx": 1024, "n_embd": 2000, "n_head": 16, "n_layer": 24 }
Мы можем списаться через telegram (@markhorowitz) или discord (l4rz#8278) - возможно, так получится помочь быстрее.
(в целом, было бы интересно, если кто-нибудь попробовал такой же эксперимент в fp16; на v100 это было бы в несколько раз быстрее)