【问题标题】:How can I reduce the RAM utilization in my program that use deeplearning4j (Memory-mapped files and WorkspaceConfiguration)?如何减少使用 deeplearning4j(内存映射文件和 WorkspaceConfiguration)的程序中的 RAM 使用率?
【发布时间】:2018-12-07 14:34:57
【问题描述】:

我正在使用 deeplearning4j,但是当我为文本分类加载预训练模型时,我的电脑上没有足够的 RAM。

我尝试更改 eclipse.ini 文件并添加更多内存以更改 Xms 和 Xmx。不幸的是,它对我不起作用。

https://deeplearning4j.org/docs/latest/deeplearning4j-config-memory

在这个链接中似乎有一个可能的解决方案来使用更少的 RAM,即使它花费更多的时间,但我现在不在乎。

从那个链接:

内存映射文件 ND4J 支持使用内存映射文件 使用 nd4j-native 后端时而不是 RAM。一方面是 比 RAM 慢,但另一方面,它允许您分配内存 以其他方式不可能的块。

我可以在这样的代码中添加它吗(点击链接)?

https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/nlp/word2vec/Word2VecRawTextExample.java

当然,如果有其他方式(或更好的方式)编写它。我会很感激任何建议。

提前致谢。

【问题讨论】:

  • 虽然我不熟悉这个框架,也不知道链接示例中使用的Word2Vec 是否支持内存映射,根据some official documentation DL4J 应该准备好处理内存-映射文件和堆外数据。最好的建议是尝试一下,看看它是否有效,并可能询问开发人员你应该如何实现你的目标

标签: java neural-network deep-learning text-classification deeplearning4j


【解决方案1】:

我来自 deeplearning4j 项目。内存映射工作空间是为嵌入而设计的,是的,应该被视为与我们的堆外内存分开的概念。堆外内存是一个概念性的兔子洞,我不会在这里介绍(你必须对 JVM 有所了解,这里的主题不相关)

您必须使用内存映射工作区的方式是将 word2vec 加载到内存映射范围内。 第一个组件是配置:

import org.nd4j.linalg.api.memory.MemoryWorkspace;
import org.nd4j.linalg.api.memory.conf.WorkspaceConfiguration;
import org.nd4j.linalg.api.memory.enums.LocationPolicy;
WorkspaceConfiguration mmap = WorkspaceConfiguration.builder()
            .initialSize(initialSize)
            .policyLocation(LocationPolicy.MMAP)
            .build();

try (MemoryWorkspace ws =   
           Nd4j.getWorkspaceManager().getAndActivateWorkspace(mmap)) {
 //load your word2vec here            

} 

内存映射工作空间的注意事项是它应该如何使用。 Mem map 仅用于访问大型数组并将其子集从 ram 中提取出来。 您应该只使用它来提取训练所需的词向量的一个子集。

当使用 word2vec(或任何其他嵌入技术)时,典型的模式是只查找您想要的词向量并将它们合并到一个小批量中。 该小批量(和相关的培训)应该发生在一个单独的工作区中(或者让它不附加,这是默认的)。您可以不附加它的原因是我们已经在 ComputationGraph 和 MultiLayerNetwork 中为您完成了工作区和其他相关的优化。只要确保传递你需要适合的任何东西。

从那里,使用 INDArray get(..) 和 put(..) 方法将您需要的行复制到另一个您应该用于训练的数组中。 有关更多信息,请参阅:https://deeplearning4j.org/docs/latest/nd4j-overview

有关更多信息,请查看 INDArray javadoc 中的leverage、leverageTo、detach,..: https://deeplearning4j.org/api/latest/org/nd4j/linalg/api/ndarray/INDArray.html

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    相关资源
    最近更新 更多