"Fehler in der Serialisierung" - foreach / doSNOW / snow mit SOCK (windows)

8

Ich führe eine parallele Operation unter Verwendung eines SOCK-Clusters mit Arbeitern auf dem lokalen Rechner durch. Wenn ich die Menge begrenze, die ich übergebe (in einem Test mit 70 anstelle von ganzen 135 Aufgaben), dann funktioniert alles gut. Wenn ich auf den vollständigen Satz zugreife, bekomme ich den Fehler "Fehler in unserem Verzeichnis (socklist [[n]]): Fehler beim Lesen der Verbindung".

  • Ich habe den Port in der Windows-Firewall (sowohl in / out) als auch den Zugriff für Rscript / R freigegeben.

  • Es kann kein Timeout-Problem sein, da das Socket-Timeout auf 365 Tage eingestellt ist.

  • Es ist kein Problem mit einer bestimmten Aufgabe, weil ich sequentiell gut laufen kann (läuft auch gut parallel, wenn ich das Dataset in zwei Hälften zerlege und zwei separate parallele Läufe mache)

  • Das Beste, was ich mir vorstellen kann, ist, dass zu viele Daten über die Sockets übertragen werden. Es scheint keine Cluster-Option zu geben, um Datenlimits zu drosseln.

Ich weiß nicht, wie ich vorgehen soll. Hat jemand dieses Problem schon einmal gesehen oder kann er eine Lösung vorschlagen?

Hier ist der Code, den ich verwende, um den Cluster einzurichten:

%Vor%

Bearbeiten
Obwohl dieses Problem mit dem gesamten Dataset zusammenhängt, erscheint es auch von Zeit zu Zeit mit einem reduzierten Dataset. Dies könnte darauf hindeuten, dass dies nicht nur ein Problem der Datenbeschränkung ist.

Bearbeiten 2
Ich habe ein wenig tiefer gegraben und es stellt sich heraus, dass meine Funktion tatsächlich eine zufällige Komponente hat, die es so macht, dass manchmal eine Aufgabe einen Fehler verursacht. Wenn ich die Aufgaben seriell ausführe, wird mir am Ende der Operation mitgeteilt, welche Aufgabe fehlgeschlagen ist. Wenn ich parallel laufe, bekomme ich den "unserialize" -Fehler. Ich habe versucht, den Code, der von jeder Aufgabe ausgeführt wird, in einen tryCatch-Aufruf mit error = function (e) {stop (e)} einzufügen, aber dies erzeugt auch den Fehler "unserialize". Ich bin verwirrt, weil ich dachte, dass Schnee Fehler behandelt, indem er sie an den Master zurückgibt?

    
SFun28 29.08.2011, 23:05
quelle

1 Antwort

2

Ich habe dieses Problem dem Autor von SNOW gemeldet, aber leider gab es keine Antwort.

Bearbeiten
Ich habe dieses Problem seit einiger Zeit nicht mehr gesehen. Ich bin nach Parallel / doParallel gewechselt. Außerdem verwende ich try (), um Code, der parallel ausgeführt wird, zu umbrechen. Ich kann das ursprüngliche Problem nicht wiederholen.

    
SFun28 14.10.2011, 20:19
quelle

Tags und Links