【问题标题】:DL4J is super slow on GoogleNews-vectors fileDL4J 在 GoogleNews-vectors 文件上超级慢
【发布时间】:2015-11-24 06:46:25
【问题描述】:

我尝试在 DL4J 上执行以下示例(加载预训练向量文件):

File gModel = new File("./GoogleNews-vectors-negative300.bin.gz");

Word2Vec vec = WordVectorSerializer.loadGoogleModel(gModel, true);

InputStreamReader r = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(r);

for (; ; ) {
    System.out.print("Word: ");
    String word = br.readLine();

    if ("EXIT".equals(word)) break;

    Collection<String> lst = vec.wordsNearest(word, 20);

    System.out.println(word + " -> " + lst);
}

但它超级慢(需要大约 10 分钟来计算最接近的单词,尽管它们是正确的)。

有足够的内存 (-Xms20g -Xmx20g)。

当我从https://code.google.com/p/word2vec/ 运行相同的 Word2Vec 示例时

它非常快速地给出最近的单词。

DL4J 使用声称比 Numpy 快两倍的 ND4J:http://nd4j.org/benchmarking

我的代码有什么问题吗?

更新:它基于https://github.com/deeplearning4j/dl4j-0.4-examples.git(我没有触及任何依赖项,只是尝试阅读 Google 预训练的向量文件)。 Word2VecRawTextExample 工作正常(但数据量相对较小)。

【问题讨论】:

    标签: machine-learning deep-learning word2vec deeplearning4j nd4j


    【解决方案1】:

    为了提高性能,我建议您执行以下操作:

    1. 将环境变量 OMP_NUM_THREADS 设置为您的逻辑内核数

    2. 如果您使用 Intel 处理器,请安装 Intel Math Kernel Library

    3. 在您的路径中添加来自英特尔数学核心库的 mkl_intel_thread.dll 所在位置的信息

    【讨论】:

      【解决方案2】:

      这篇文章很老了,但现在应该已经改进了很多。我已经在生产环境中运行带有 Word2vec 模型的 DL4J,具有以下设置 @ JVM 级别,它可以在 t2.large 盒子上运行,具有 8G RAM 及以上

      java -Xmx2G -Dorg.bytedeco.javacpp.maxbytes=6G -Dorg.bytedeco.javacpp.maxphysicalbytes=6G

      我也没有使用过 wordsNearest() 方法,因为它具有预先计算语料库嵌入的限制,而不是编写我自己的执行亚毫秒响应的余弦相似度。

      关于那个的博客文章在这里

      https://medium.com/sumvit/building-text-similarity-system-from-ground-up-using-word2vec-and-deeplearning4j-dece9ae4e433

      如果您想知道如何构建最近的单词或任何其他应用程序,例如文本相似性(相同的基本原理)

      【讨论】:

        猜你喜欢
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-26
        • 1970-01-01
        • 2019-12-06
        相关资源
        最近更新 更多