doc2vec:性能测量和 'workers' 参数
doc2vec: measurement of performance and 'workers' parameter
我有一个非常大的语料库作为我的 doc2vec 训练的输入,大约有 2300 万个文档使用可迭代函数流式传输。我想知道是否完全有可能看到我的训练进度的发展,可能是通过找出它当前进行的迭代、每秒字数或一些类似的指标。
我也想知道除了减小语料库的大小之外如何加快 doc2vec 的性能。我发现了 workers 参数,我目前正在训练 4 个进程;这个数字背后的直觉是多处理不能利用虚拟核心。我想知道 doc2vec workers 参数是否属于这种情况,或者我是否可以使用 8 个工人代替甚至可能更高(我有一个四核处理器,运行 Ubuntu).
我必须补充一点,使用 unix 命令 top -H
仅报告每个 python 进程使用 8 个工作人员的使用率约为 15% CPU,而使用率约为 27% CPU每个进程在 4 个工人上的使用量。
如果您在 INFO 级别启用日志记录,您应该会看到大量的进度输出。在 gensim
's Doc2Vec tutorial 之后,看起来像
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
gensim 的 Word2Vec
或 Doc2Vec
模型的最佳吞吐量通常在 3 到 12 之间 workers
的某个级别,但绝不会超过可用处理器内核的数量。 (如果您使用特定的磁盘语料库格式,则有一个进一步的优化对于具有更多内核的机器特别有用,该格式在最新的 3.6.0 gensim 版本中可用 - 请参阅 release notes 了解更多信息。)
如果您在 4 核、4 工作人员设置上看到如此低的利用率,瓶颈可能是您的语料库迭代器。如果它正在进行任何复杂的 IO 或基于正则表达式的文本处理,那么训练工作线程通常处于空闲状态,等待一个主语料库迭代器线程生成更多文本,从而限制了整体利用率和效率。
您应该尝试将复杂的事情做一次,然后将 tagged/tokenized 结果作为一个更简单的文件重新写入磁盘。然后用一个非常简单的行和-space-分隔的迭代器阅读它以进行实际的模型训练。
(如果您的 4 个内核实际上支持更多的虚拟内核,则某些 workers
值高达 8 可能会实现更高的吞吐量......但只能通过反复试验,使用您的特定模型参数,当前可以找到您的局部最优值。最优值可以随其他参数变化,例如 size
、window
、negative
等)
我有一个非常大的语料库作为我的 doc2vec 训练的输入,大约有 2300 万个文档使用可迭代函数流式传输。我想知道是否完全有可能看到我的训练进度的发展,可能是通过找出它当前进行的迭代、每秒字数或一些类似的指标。
我也想知道除了减小语料库的大小之外如何加快 doc2vec 的性能。我发现了 workers 参数,我目前正在训练 4 个进程;这个数字背后的直觉是多处理不能利用虚拟核心。我想知道 doc2vec workers 参数是否属于这种情况,或者我是否可以使用 8 个工人代替甚至可能更高(我有一个四核处理器,运行 Ubuntu).
我必须补充一点,使用 unix 命令 top -H
仅报告每个 python 进程使用 8 个工作人员的使用率约为 15% CPU,而使用率约为 27% CPU每个进程在 4 个工人上的使用量。
如果您在 INFO 级别启用日志记录,您应该会看到大量的进度输出。在 gensim
's Doc2Vec tutorial 之后,看起来像
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
gensim 的 Word2Vec
或 Doc2Vec
模型的最佳吞吐量通常在 3 到 12 之间 workers
的某个级别,但绝不会超过可用处理器内核的数量。 (如果您使用特定的磁盘语料库格式,则有一个进一步的优化对于具有更多内核的机器特别有用,该格式在最新的 3.6.0 gensim 版本中可用 - 请参阅 release notes 了解更多信息。)
如果您在 4 核、4 工作人员设置上看到如此低的利用率,瓶颈可能是您的语料库迭代器。如果它正在进行任何复杂的 IO 或基于正则表达式的文本处理,那么训练工作线程通常处于空闲状态,等待一个主语料库迭代器线程生成更多文本,从而限制了整体利用率和效率。
您应该尝试将复杂的事情做一次,然后将 tagged/tokenized 结果作为一个更简单的文件重新写入磁盘。然后用一个非常简单的行和-space-分隔的迭代器阅读它以进行实际的模型训练。
(如果您的 4 个内核实际上支持更多的虚拟内核,则某些 workers
值高达 8 可能会实现更高的吞吐量......但只能通过反复试验,使用您的特定模型参数,当前可以找到您的局部最优值。最优值可以随其他参数变化,例如 size
、window
、negative
等)