2017-07-28 50 views
5

このトピックに関する他の記事をいくつか見てきましたが、 。しかし、ここで行く:

私はこれは、多くの場合、正常に動作しますが、今のエラーを投げている

cores <- detectCores() cl <- makeCluster(8L,outfile="output.txt") registerDoParallel(cl) x <- foreach(i = 1:length(y), .combine='list',.packages=c('httr','jsonlite'), .multicombine=TRUE,.verbose=F,.inorder=F) %dopar% {function(y[i])}

を使用して並列で機能を実行している:

Error in serialize(data, node$con) : error writing to connection

出力を検討することにより、 .txtファイル参照:

starting worker pid=11112 on localhost:11828 at 12:38:32.867 
starting worker pid=10468 on localhost:11828 at 12:38:33.389 
starting worker pid=4996 on localhost:11828 at 12:38:33.912 
starting worker pid=3300 on localhost:11828 at 12:38:34.422 
starting worker pid=10808 on localhost:11828 at 12:38:34.937 
starting worker pid=5840 on localhost:11828 at 12:38:35.435 
starting worker pid=8764 on localhost:11828 at 12:38:35.940 
starting worker pid=7384 on localhost:11828 at 12:38:36.448 
Error in unserialize(node$con) : embedded nul in string: '\0\0\0\006SYMBOL\0\004\0\t\0\0\0\003')'\0\004\0\t\0\0\0\004expr\0\004\0\t\0\0\0\004expr\0\004\0\t\0\0\0\003','\0\004\0\t\0\0\0\024SYMBOL_FUN' 
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode - 
unserialize 
Execution halted 

このエラーi間欠的です。メモリは豊富(32GB)で、その他の大きなRオブジェクトはメモリにありません。並列コード内の関数は、クラウドから多数の小さなjsonデータオブジェクトを取得し、それらをRオブジェクトに格納します。したがって、大きなデータファイルはありません。私はなぜ時折それが埋め込まれたヌルを見て停止するのか分からない。

クラウドからcsvファイルを取得する機能にも同様の問題があります。両方の機能は今までR 3.3.0とR 3.4.0でうまく機能していました。

WindowsでR 3.4.1とRStudio 1.0.143を使用しています。

ここに私のSessionInfoだ

sessionInfo() 
R version 3.4.1 (2017-06-30) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

Matrix products: default 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United 
States.1252 LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: 
[1] parallel stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RJSONIO_1.3-0  RcppBDT_0.2.3  zoo_1.8-0   data.table_1.10.4 
doParallel_1.0.10 iterators_1.0.8 
[7] RQuantLib_0.4.2 foreach_1.4.3  httr_1.2.1  

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.12  lattice_0.20-35 codetools_0.2-15 grid_3.4.1  
R6_2.2.2   jsonlite_1.5  tools_3.4.1  
[8] compiler_3.4.1 

UPDATE

今、私は別の同様のエラーを取得:

Error in unserialize(node$con) : ReadItem: unknown type 100, perhaps written by later version of R

埋め込まれたNULエラーが消えているようです。また、.Rhistoryと.Rdataを削除しようとしました。また、私のパッケージのサブフォルダを削除し、すべてのパッケージを再ロードしました。少なくともこの新しいエラーは一貫しているようです。私は「未知のタイプ100」が何であるかを見つけることができません。

+0

環境内に大きなオブジェクトがあり、クラスタにエクスポートされていることがありますか?このforeach呼び出しをそれ自身の関数に入れてみてください。 –

+0

それは問題ではないようです - 私は実際に環境内の無関係なオブジェクトをすべて削除しました。 – user2642948

+0

私たちに与えることができる '関数'を使って問題を再現できますか? –

答えて

4

私は同じようなエラーが発生します...私の以前のスクリプトの1つがエラーを起こすか、早く停止したときに、後続のスクリプトが実行されるのが普通です。これは、あなたが言及する部分である可能性があります。「なぜ、埋め込みナルを見て、なぜ停止するのかわからない」というエラーになる可能性があります。

これはいくつかの優れた情報を持っています。特に、通常のWindowsプロセスを実行するには1コアを残しておいてください。 「これらの機能のいずれかからエラーが発生した場合は、通常、少なくとも1人の従業員が死亡したことを意味する」という記述があります。これは、エラー後のクラッシュについての私の理論をバックアップすることができます。

doParallel error in R: Error in serialize(data, node$con) : error writing to connection

はこれまでのところ、私の解決策は、再びこれを実行することにより、パラレルバックエンドを再初期化してきました:

registerDoParallel(cl) 

をそれは通常、その後に動作しますが、私は以前、マルチコアセッションことがわかります私の仕事マネージャーの中で、

stopCluster(cl) 

これは私が時々Rを再起動する理由です。

+0

はい、私もコアが停止しないという問題もありました'stopCluster(cl)'の後に。私はバックエンドを再初期化しようとします。私は、通常のWindowsプロセスでコアの数を1つ減らすことを試みましたが、これは役に立たないようです。 – user2642948

+0

私はもう一度コードを試してみましたが、それは実行されましたが、これは最後の15回の試行で初めてです。出力ファイルは今回は間違っていないことを示します。しかし、ほとんど信頼ビルダー..... – user2642948

+1

さらに3回の試みが失敗に終わった。 Rを再起動し、コアを減らし、並列バックエンドを再初期化しても役立たない。 – user2642948

2

また、マルチコアセッションがタスクマネージャから離れないことに気付きました。

使用中から切り替える:stopCluster(cl)stopImplicitCluster() 私のために働きました。私の読書から、これは

cl<-makeCluster(x) 
registerDoParallel(cl) 

対「1行」registerDoParallel(cores=x) を使用する際に使用されることを想定している私の「勘」はstopImplicitClusterが必要ですが、あなたの経験は変更になる場合がありますWindowsのクラスタをどのように処理するかということです。

コメントしましたが、これは(キューバンド)MY FIRST STACKOVERFLOW POST !!!

関連する問題