2013-03-03 18 views
3

我的问题是,我有一个很大的模型,这是缓慢加载到内存。为了在很多样本上测试它,我需要运行一些C程序来为模型生成输入特征,然后运行R脚本来预测。每次加载模型都需要太多时间。在R中,有没有什么办法可以在同一台机器上的R的不同进程之间共享一个变量?

所以我想知道

1),如果有保持在存储器中的模型(R中的变量)的一些方法。

2)能否运行R的分离式过程作为一个专用服务器,则R的所有预测过程可以访问该变量在服务器中的相同的机器上。

该模型在所有预测期间都不会改变。它是一个存储在.rdata文件中的randomForest模型,具有〜500MB的空间。加载这个模型很慢。

我知道我可以使用并行R(雪,doPar等)并行执行预测,但是,这不是我想要的,因为它需要我更改我使用的数据流。

非常感谢。

+0

“但是,这不是我想要的,因为它会改变我使用的框架。”你能解释一下你的意思吗? – 2013-03-03 18:38:27

+0

我的每个样本的数据流如下。 [1.输入输入特征] - > [2.run R randomForest prediction] - > [3.另一个程序来计算R输出的最终结果]。由于1和3在R中没有编码,并且不易与控制数据流的主程序分离。我希望有一种方法来保持这种数据流。 – Indicator 2013-03-03 20:06:01

+0

我试过Rserve/RSclient。 Rserve可以在守护进程模式下运行R.当不止一个客户端连接到R服务器时,我不确定它是否使用多核。 – Indicator 2013-03-04 04:11:17

回答

2

如果您每次都重新生成模型,可以将模型保存为RData文件,然后在不同的机器上共享。虽然从磁盘加载到内存可能还需要一段时间,但它会节省重新生成的时间。每@ VictorK的suggetsion

save(myModel, file="path/to/file.Rda") 

    # then 
    load(file="path/to/file.Rda") 

编辑: 维克多所指出的,因为你只保存一个对象,saveRDS可能是一个更好的选择。

saveRDS(myModel, file="path/to/file.Rds") 

    myModel <- readRDS(file="path/to/file.Rds") 
+0

如果只保存一个变量,'saveRDS'和'loadRDS'可能会更清晰。 – 2013-03-03 19:24:58

+0

特别是,我每次都加载randomForest模型。模型文件约为〜500MB。从硬盘加载到内存需要大约3分钟的时间。从本地硬盘,内存文件系统或网络文件系统加载它没有多大区别。所以我想大多数加载时间都是关于解析数据,而不是从磁盘读取数据。 – Indicator 2013-03-05 16:39:36

+0

不幸的是,saveRDS在我的R-2.15.1上不可用。 – Indicator 2013-03-05 16:41:57

相关问题