我正在深入研究深度学习模型。该模型包含具有相同词嵌入层的多个分类器,并且可以在不同过程中同时进行训练。作者最初的实现使用不同的过程,该过程只是启动不同的训练模型并在单独的过程中对其进行训练。因为每个进程/分类器都使用一个嵌入层,该嵌入层需要大于4GB的加载手套文件,所以它占用了太多内存。我想知道是否有一种方法可以使那些进程共享其嵌入层,从而减少内存使用。
我使用了multiprocessing
库,但是没有用。我的解决方案是将原始训练功能放入multiprocessing.Pool
中。对于共享嵌入层:
首先,我使用multiprocessing.Manager.dict()
,但是会引发Bad message length
错误。
然后我尝试将嵌入层作为参数传递给训练函数(默认情况下通过引用传递)。它适用于手套文件(10000行)的示例,但是如果我使用完整的手套文件(glove.42B.300d.txt
),则该过程以0退出,没有错误消息,不进入训练功能。
我也尝试使用全局变量,但是其行为与传递给函数完全一样。