2013-03-03 17 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

相關問題