簡體   English   中英

如何減少使用deeplearning4j(內存映射文件和WorkspaceConfiguration)的程序中的RAM利用率?

[英]How can I reduce the RAM utilization in my program that use deeplearning4j (Memory-mapped files and WorkspaceConfiguration)?

我正在使用deeplearning4j,但是當我加載預訓練模型進行文本分類時,我的電腦上沒有足夠的RAM。

我試圖更改eclipse.ini文件並添加更多更改Xms和Xmx的內存。 不幸的是,這對我不起作用。

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

在此鏈接中,似乎有可能使用較少的RAM的解決方案,即使這會花費更多的時間,但我現在不在乎。

從該鏈接:

內存映射文件當使用nd4j-native后端時,ND4J支持使用內存映射文件而不是RAM。 一方面,它比RAM慢,但另一方面,它允許您以其他方式無法分配的內存塊。

我可以在這樣的代碼中添加此代碼(按照鏈接)嗎?

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

如果有其他方法(或更好的方法)編寫它,請參見。 我將不勝感激任何建議。

提前致謝。

我來自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            

} 

內存映射的工作區值得注意的是應如何使用它。 內存映射僅用於訪問大型數組並將其子集從ram中拉出。 您只應使用它來提取進行訓練所需的單詞向量的子集。

使用word2vec(或任何其他嵌入技術)時,典型的模式是僅查找所需的單詞向量,然后將它們合並為一個小批。 該小批量(和相關的培訓)應在單獨的工作空間中進行(或將其取消附加,這是默認設置)。 之所以可以不附加它,是因為我們已經在ComputationGraph和MultiLayerNetwork內部為您完成了工作區和其他相關的優化。 只要確保傳遞您需要的任何東西即可。

從那里,使用INDArray get(..)和put(..)方法將所需的行復制到另一個應用於訓練的數組中。 有關更多信息,請參見: https : //deeplearning4j.org/docs/latest/nd4j-overview

有關更多信息,請參見INDArray javadoc中的杠桿率,桿柄杠桿率,分離率,..: https ://deeplearning4j.org/api/latest/org/nd4j/linalg/api/ndarray/INDArray.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM