训练时 Pytorch CUDA OutOfMemory 错误
Pytorch CUDA OutOfMemory Error while training
我正在尝试在 AWS Sagemaker 中训练 PyTorch FLAIR 模型。
这样做时出现以下错误:
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 class。
我尝试了不同的实例类型变体,从 ml.m5、g4dn 到 p3(即使是 96GB 内存)。
在 ml.m5 中出现 CPUmemoryIssue 错误,在 g4dn 中出现 GPUMemoryIssue,在 P3 中出现 GPUMemoryIssue,主要是因为 Pytorch 仅使用 8*12GB 中的 12GB GPU。
无法完成此培训,即使在本地尝试使用 CPU 机器并出现以下错误:
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.: 我能够在配备 4GB GTX 1650 DDR5 内存的本地 GPU 机器上使用较小的数据集训练相同的架构,而且速度非常快。
此错误是因为您的 GPU 运行 内存不足。你可以尝试一些事情
减少训练数据的大小
减小模型的大小,即隐藏层的数量或深度
您也可以尝试减小批量大小
好的,经过2天的不断调试终于找到了根本原因。
我的理解是Flair对句子长度没有任何限制,在字数的意义上,它是以最长的句子为最大值。
所以这引起了问题,因为在我的例子中,很少有 15 万行的内容,这太多了,无法将其嵌入到内存中,即使是 16GB GPU。
所以它正在破裂。
解决这个问题:对于这么长的单词的内容,你可以从这些内容的任何部分(left/right/middle anywhere) 和 trunk 其余部分,或者如果比较计数非常小,则忽略这些记录进行训练。
在此之后,我希望你能够在训练中取得进步,就像我的情况一样。
P.S.: 如果您正在关注此主题并遇到类似问题,请随时回复评论,以便我可以探讨并帮助解决您的问题。
我正在尝试在 AWS Sagemaker 中训练 PyTorch FLAIR 模型。 这样做时出现以下错误:
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 class。
我尝试了不同的实例类型变体,从 ml.m5、g4dn 到 p3(即使是 96GB 内存)。 在 ml.m5 中出现 CPUmemoryIssue 错误,在 g4dn 中出现 GPUMemoryIssue,在 P3 中出现 GPUMemoryIssue,主要是因为 Pytorch 仅使用 8*12GB 中的 12GB GPU。
无法完成此培训,即使在本地尝试使用 CPU 机器并出现以下错误:
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.: 我能够在配备 4GB GTX 1650 DDR5 内存的本地 GPU 机器上使用较小的数据集训练相同的架构,而且速度非常快。
此错误是因为您的 GPU 运行 内存不足。你可以尝试一些事情
减少训练数据的大小
减小模型的大小,即隐藏层的数量或深度
您也可以尝试减小批量大小
好的,经过2天的不断调试终于找到了根本原因。 我的理解是Flair对句子长度没有任何限制,在字数的意义上,它是以最长的句子为最大值。 所以这引起了问题,因为在我的例子中,很少有 15 万行的内容,这太多了,无法将其嵌入到内存中,即使是 16GB GPU。 所以它正在破裂。
解决这个问题:对于这么长的单词的内容,你可以从这些内容的任何部分(left/right/middle anywhere) 和 trunk 其余部分,或者如果比较计数非常小,则忽略这些记录进行训练。
在此之后,我希望你能够在训练中取得进步,就像我的情况一样。
P.S.: 如果您正在关注此主题并遇到类似问题,请随时回复评论,以便我可以探讨并帮助解决您的问题。