У меня есть набор данных с 45 миллионами строк данных. У меня есть три графических процессора по 6 ГБ оперативной памяти. Я пытаюсь обучить языковую модель данным.
Для этого я пытаюсь загрузить данные в виде пакета данных fastai. Но эта часть всегда дает сбой из-за проблем с памятью.
data_lm = TextLMDataBunch.from_df('./', train_df=df_trn,
valid_df=df_val, bs=10)
Как решить эту проблему?
Когда вы используете эту функцию, ваш Dataframe загружается в память. Поскольку у вас очень большой фрейм данных, это вызывает ошибку памяти. Fastai обрабатывает токенизацию с размером фрагмента, поэтому вы все равно должны иметь возможность токенизировать свой текст.
Вот две вещи, которые вы должны попробовать:
Добавьте аргумент chunksize (значение по умолчанию — 10 КБ) к вашему TextLMDataBunch.from_df
, чтобы процессу токенизации требовалось меньше памяти.
Если этого недостаточно, я бы посоветовал не загружать весь ваш фрейм данных в память. К сожалению, даже если вы используете TextLMDataBunch.from_folder
, он просто загружает полный DataFrame и передает его TextLMDataBunch.from_df
, вам, возможно, придется создать свой собственный конструктор DataBunch. Не стесняйтесь комментировать, если вам нужна помощь в этом.
Изменить размер фрагмента было недостаточно? Не могли бы вы следить за использованием памяти, пока вы это делаете. У вас не хватает памяти в момент чтения csv или во время обработки csv?
Другое решение, которое я могу придумать (я не знаю, возможно ли это для вас), состоит в том, чтобы создать пакет данных на другом компьютере (с большим объемом памяти), сохранить его, используя его метод сохранения, и загрузить его обратно на ваш фактический машина.
У меня такая же проблема. Я думал о том, чтобы каким-то образом реализовать итерируемый набор данных pytorch, но у меня возникли проблемы с этим. Любая помощь будет принята с благодарностью. Для корпуса, который не помещается в память, мне интересно, как можно случайным образом разделить данные на обучение и тестирование.
да. Мне нужна помощь в этом. У вас есть ссылка?