如何在非常大的数据集上训练 Word2vec?
How to train Word2vec on very large datasets?
我正在考虑在网络抓取转储中使用超过 10 TB+ 的大规模数据训练 word2vec。
我在我的 iMac 上亲自训练了 c 实现 GoogleNews-2012 dump (1.5gb) 花了大约 3 个小时来训练和生成向量(对速度印象深刻)。虽然我没有尝试 python 实现 :( 我在某处读到在 300 个矢量长度的 wiki 转储 (11gb) 上生成矢量需要大约 9 天才能生成。
如何加速word2vec?我需要使用分布式模型还是需要什么类型的硬件才能在 2-3 天内完成?我有 8GB 内存的 iMac。
哪个更快? Gensim python 还是 C 实现?
我看到 word2vec 实现不支持 GPU 训练。
有很多机会可以大规模创建 Word2Vec 模型。正如您所指出的,候选解决方案是分布式的(and/or 多线程)或 GPU。这不是一个详尽的列表,但希望您对如何进行有一些想法。
分布式/多线程选项:
- Gensim 在重要的地方使用 Cython,等于或不等于
比 C 实现慢得多。 Gensim 的多线程工作
好吧,并使用具有足够内存和大量的机器
核心显着减少矢量生成时间。你可能想要
调查使用 Amazon EC2 16 或 32 核实例。
- Deepdist 可以利用 gensim 和 Spark 在集群中分配 gensim 工作负载。 Deepdist 也有一些聪明的 SGD
跨节点同步梯度的优化。如果你使用
多核机器作为节点,你可以利用两者
集群和多线程。
存在许多 Word2Vec GPU 实现。鉴于数据集规模较大且 GPU 内存有限,您可能不得不考虑聚类策略。
- Bidmach 显然非常快(但是缺少文档,而且我承认我一直在努力让它工作)。
- DL4J 有一个 Word2Vec 实现,但该团队尚未实现 cuBLAS gemm,而且它相对于 CPU 而言相对较慢。
- Keras 是一个利用 Theano 的 Python 深度学习框架。虽然它本身没有实现 word2vec,但它确实实现了一个嵌入层,可用于创建和查询词向量。
还有许多 Word2Vec 的其他 CUDA 实现,成熟度和支持程度各不相同:
- https://github.com/whatupbiatch/cuda-word2vec [内存管理看起来不错,但关于如何创建数据集的文档并不存在]
- https://github.com/fengChenHPC/word2vec_cbow[超快,但大型数据集上的 GPU 内存问题]
我相信 SparkML 团队最近开始了基于 cuBLAS 的 Word2Vec 实现原型。您可能想对此进行调查。
我正在考虑在网络抓取转储中使用超过 10 TB+ 的大规模数据训练 word2vec。
我在我的 iMac 上亲自训练了 c 实现 GoogleNews-2012 dump (1.5gb) 花了大约 3 个小时来训练和生成向量(对速度印象深刻)。虽然我没有尝试 python 实现 :( 我在某处读到在 300 个矢量长度的 wiki 转储 (11gb) 上生成矢量需要大约 9 天才能生成。
如何加速word2vec?我需要使用分布式模型还是需要什么类型的硬件才能在 2-3 天内完成?我有 8GB 内存的 iMac。
哪个更快? Gensim python 还是 C 实现?
我看到 word2vec 实现不支持 GPU 训练。
有很多机会可以大规模创建 Word2Vec 模型。正如您所指出的,候选解决方案是分布式的(and/or 多线程)或 GPU。这不是一个详尽的列表,但希望您对如何进行有一些想法。
分布式/多线程选项:
- Gensim 在重要的地方使用 Cython,等于或不等于 比 C 实现慢得多。 Gensim 的多线程工作 好吧,并使用具有足够内存和大量的机器 核心显着减少矢量生成时间。你可能想要 调查使用 Amazon EC2 16 或 32 核实例。
- Deepdist 可以利用 gensim 和 Spark 在集群中分配 gensim 工作负载。 Deepdist 也有一些聪明的 SGD 跨节点同步梯度的优化。如果你使用 多核机器作为节点,你可以利用两者 集群和多线程。
存在许多 Word2Vec GPU 实现。鉴于数据集规模较大且 GPU 内存有限,您可能不得不考虑聚类策略。
- Bidmach 显然非常快(但是缺少文档,而且我承认我一直在努力让它工作)。
- DL4J 有一个 Word2Vec 实现,但该团队尚未实现 cuBLAS gemm,而且它相对于 CPU 而言相对较慢。
- Keras 是一个利用 Theano 的 Python 深度学习框架。虽然它本身没有实现 word2vec,但它确实实现了一个嵌入层,可用于创建和查询词向量。
还有许多 Word2Vec 的其他 CUDA 实现,成熟度和支持程度各不相同:
- https://github.com/whatupbiatch/cuda-word2vec [内存管理看起来不错,但关于如何创建数据集的文档并不存在]
- https://github.com/fengChenHPC/word2vec_cbow[超快,但大型数据集上的 GPU 内存问题]
我相信 SparkML 团队最近开始了基于 cuBLAS 的 Word2Vec 实现原型。您可能想对此进行调查。