Pytorch CUDA OutOfMemory Ошибка при обучении

Я пытаюсь обучить модель PyTorch FLAIR в AWS Sagemaker. При этом возникает следующая ошибка:

RuntimeError: CUDA out of memory. Tried to allocate 84.00 MiB (GPU 0; 11.17 GiB total capacity; 9.29 GiB already allocated; 7.31 MiB free; 10.80 GiB reserved in total by PyTorch)

Для обучения я использовал класс sagemaker.pytorch.estimator.PyTorch.

Я пробовал с разными вариантами типов инстансов от ml.m5, g4dn до p3 (даже с 96 ГБ памяти). В ml.m5 возникает ошибка с CPUmemoryIssue, в g4dn с GPUMemoryIssue и в P3 с GPUMemoryIssue в основном потому, что Pytorch использует только один графический процессор объемом 12 ГБ из 8 * 12 ГБ.

Ничего не получилось завершить это обучение, даже при локальной попытке с машиной с ЦП и полученной следующей ошибкой:

RuntimeError: [enforce fail at ..\c10\core\CPUAllocator.cpp:72] data. DefaultCPUAllocator: not enough memory: you tried to allocate 67108864 bytes. Buy new RAM!

Сценарий обучения модели:

    corpus = ClassificationCorpus(data_folder, test_file='../data/exports/val.csv', train_file='../data/exports/train.csv')
                                          
    print("finished loading corpus")

    word_embeddings = [WordEmbeddings('glove'), FlairEmbeddings('news-forward-fast'), FlairEmbeddings('news-backward-fast')]

    document_embeddings = DocumentLSTMEmbeddings(word_embeddings, hidden_size=512, reproject_words=True, reproject_words_dimension=256)

    classifier = TextClassifier(document_embeddings, label_dictionary=corpus.make_label_dictionary(), multi_label=False)

    trainer = ModelTrainer(classifier, corpus, optimizer=Adam)

    trainer.train('../model_files', max_epochs=12,learning_rate=0.0001, train_with_dev=False, embeddings_storage_mode="none")

P.S .: Я смог обучить ту же архитектуру с меньшим набором данных на моем локальном компьютере с графическим процессором с 4 ГБ памяти GTX 1650 DDR5, и это было действительно быстро.


person Desmond    schedule 16.08.2020    source источник
comment
Думаю, дело в том, что набор данных поменьше.   -  person Klaus D.    schedule 16.08.2020
comment
да, я тоже так думал, но разница в записях составляет около 1000 записей, вот и все ..   -  person Desmond    schedule 16.08.2020
comment
Нет, дело в схожей архитектуре. Небольшие изменения могут иметь большое влияние.   -  person Berriel    schedule 17.08.2020
comment
извините, я ввожу в заблуждение, это на самом деле та же архитектурная модель. Просто разница в наборе данных, который также 4000 против 5000 записей. Главное, я думаю, проблема в обучении Sagemaker, локально он будет работать с приличным графическим процессором, просто у меня нет этой инфраструктуры. Не могли бы вы помочь мне решить эту проблему для обучения модели в Sagemaker.   -  person Desmond    schedule 17.08.2020


Ответы (2)


Эта ошибка возникает из-за того, что вашему графическому процессору не хватает памяти. Вы можете попробовать несколько вещей

  1. Уменьшите размер обучающих данных

  2. Уменьшите размер вашей модели, то есть количество скрытых слоев или, возможно, глубину

  3. Вы также можете попробовать уменьшить размер партии

person Ashwiniku918    schedule 17.08.2020
comment
уменьшение batch_size Я уже пробовал, для других частей та же модель работала на моем локальном компьютере с 4 ГБ памяти GTX 1650 и не могла работать на 96 ГБ Nividia K88 на AWS Sagemaker. Я думаю, что мне не хватает чего-то еще для обучения модели Pytorch в Sagemaker. Обучались ли вы в AWS Sagemaker какой-либо модели, не могли бы вы поделиться учебным кодом для samw? - person Desmond; 17.08.2020

Итак, через 2 дня непрерывной отладки удалось выяснить первопричину. Я понял, что Flair не имеет никаких ограничений на длину предложения, в смысле количества слов, он принимает предложение максимальной длины как максимум. Таким образом, это вызывало проблему, так как в моем случае было мало контента с 1,5-миллионными строками, что слишком много для загрузки встраивания в память, даже для графического процессора 16 ГБ. Итак, это было сломано.

Чтобы решить эту проблему: для контента с такими длинными словами вы можете взять кусок из n слов (10 КБ в моем случае) из такого рода контента из любой части (слева / справа / посередине в любом месте) и ствола. остальные или просто игнорируйте эти записи для обучения, если они минимальны для сравнительного подсчета.

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

P.S .: Если вы следите за этой веткой и сталкиваетесь с подобной проблемой, не стесняйтесь оставлять комментарии, чтобы я мог изучить и помочь в вашем случае проблемы.

person Desmond    schedule 18.08.2020