Что на самом деле делает gpu_mem_get_free_no_cache ()? [Fastai] - PullRequest
0 голосов
/ 29 марта 2020

Я обучал языковой модели, как показано в уроке 4 части 1 курса Фастай. Сначала, после тренировки замороженной модели, когда я начал ее настраивать, разморозив и начав тренировку, я получил ошибку, связанную с Недостаточно доступной памяти GPU .

На этом этапе я запустил gpu_mem_get_free_no_cache(), который освободил примерно 6 ГБ из VRAM . Затем я загрузил свою сохраненную модель, и этап тонкой настройки прошел отлично. Я подумал, что gpu_mem_get_free_no_cache() удалил мою модель из памяти, и, следовательно, после загрузки сохраненной модели я смог тренироваться правильно.

learning_rate = slice(1e-1/5)
learn_lm.fit_one_cycle(1, max_lr = learning_rate, moms = (0.8,0.7))

learn_lm.save("lm_freezed")

gpu_mem_get_free_no_cache()

learn_lm.load("lm_freezed");

learn_lm.unfreeze()
learn_lm.lr_find()
learn_lm.recorder.plot()

learning_rate = slice(1e-5/1e-3)
learn_lm.fit_one_cycle(1, max_lr = learning_rate, moms = (0.8,0.7))

После завершения настройки я решил сделать прогноз на пользователя. ввод текста. Я запустил gpu_mem_get_free_no_cache(), который снова высвободил около 5,5 ГБ из VRAM . Я надеялся, что попытка предсказать пользовательский текст не сработает, поскольку модель очищена кодом gpu_mem_get_free_no_cache(). Тем не менее, learn_lm.predict(text, words_per_sentence, temperature = 0.5) работал отлично, хотя мое использование VRAM было установлено на 2,7 ГБ (во время тонкой настройки использование VRAM было постоянным на уровне 7,4 ГБ). Итак, что же на самом деле делает gpu_mem_get_free_no_cache()? Освобождает ли оно пространство, необходимое для градиентов и состояний оптимизатора, поскольку кажется, что веса не очищены, иначе модель не смогла бы выполнить вывод?

text = "This is a fine "
words_per_sentence = 50
n_sentences = 4

learn_lm.predict(text, words_per_sentence, temperature = 0.5)
...