TextLMDataBunch Проблема с памятью Языковая модель Fastai

У меня есть набор данных с 45 миллионами строк данных. У меня есть три графических процессора по 6 ГБ оперативной памяти. Я пытаюсь обучить языковую модель данным.

Для этого я пытаюсь загрузить данные в виде пакета данных fastai. Но эта часть всегда дает сбой из-за проблем с памятью.

data_lm = TextLMDataBunch.from_df('./', train_df=df_trn, 
valid_df=df_val, bs=10)

Как решить эту проблему?


person Jerry George    schedule 26.02.2019    source источник


Ответы (1)


Когда вы используете эту функцию, ваш Dataframe загружается в память. Поскольку у вас очень большой фрейм данных, это вызывает ошибку памяти. Fastai обрабатывает токенизацию с размером фрагмента, поэтому вы все равно должны иметь возможность токенизировать свой текст.

Вот две вещи, которые вы должны попробовать:

  • Добавьте аргумент chunksize (значение по умолчанию — 10 КБ) к вашему TextLMDataBunch.from_df, чтобы процессу токенизации требовалось меньше памяти.

  • Если этого недостаточно, я бы посоветовал не загружать весь ваш фрейм данных в память. К сожалению, даже если вы используете TextLMDataBunch.from_folder, он просто загружает полный DataFrame и передает его TextLMDataBunch.from_df, возможно, вам придется создать свой собственный конструктор DataBunch. Не стесняйтесь комментировать, если вам нужна помощь в этом.

person Statistic Dean    schedule 04.03.2019
comment
Да. Мне нужна помощь в этом. У вас есть ссылка? - person Jerry George; 04.03.2019
comment
Изменить размер фрагмента было недостаточно? Не могли бы вы следить за использованием памяти, пока вы это делаете. У вас не хватает памяти в момент чтения csv или во время обработки csv? - person Statistic Dean; 04.03.2019
comment
Другое решение, которое я могу придумать (я не знаю, возможно ли это для вас), состоит в том, чтобы создать пакет данных на другом компьютере (с большим объемом памяти), сохранить его, используя его метод сохранения, и загрузить его обратно на ваш фактический машина. - person Statistic Dean; 04.03.2019
comment
У меня такая же проблема. Я думал о том, чтобы каким-то образом реализовать итерируемый набор данных pytorch, но у меня возникли проблемы с этим. Любая помощь будет принята с благодарностью. Для корпуса, который не помещается в память, мне интересно, как можно случайным образом разделить данные на обучение и тестирование. - person user3225087; 14.03.2020