我正在使用以下教程在 Google Colab 平台上构建神经语言模型:https ://machinelearningmastery.com/how-to-develop-a-word-level-neural-language-model-in-keras/ 。
我的数据集包含 2036456 个序列和 77069 个单词的词汇表,比教程中使用的要大得多,但我仍然可以在本地计算机上训练模型。但是,当我尝试使用 GPU 在 Google Colab 上使用完整数据集进行训练时,出现以下错误:
tcmalloc: large alloc 627790512128 bytes == 0x4789c000 @ 0x7fc0aaaf8001 0x7fc0a861c765 0x7fc0a8680bb0 ...
我已经设法弄清楚在代码中的哪个位置引发了这个错误,看起来罪魁祸首是以下行,其中 keras.to_categorical() 函数被调用以对输出单词进行一次性编码:
y = to_categorical(y, num_classes=vocab_size)
这告诉我,当对(相当大的)词汇表进行一次热编码时会出现问题,但我不明白为什么这在我的本地机器上不是问题。
在其他线程中,我读到这可能是内存问题,而且 Google GPU 确实似乎内存不足(我分配了大约 12 GB 的 RAM)。同样,这在我的本地计算机上不是问题,这是一台具有 16 GB RAM 的简单 MacBook Pro,我可以使用它加载数据并训练模型(尽管速度非常慢)。在训练期间,加载完整数据集后,该过程占用大约 13 GB 的 RAM,这与云 GPU 服务器上 10% 的相同数据集所需的内存量没有太大差异。
我究竟做错了什么?我的本地机器怎么可能处理数据而 Google Colab 却不能呢?或者,问题是否与数据完全无关?
谢谢。