2017-07-28 24 views
5

Tôi đã xem một số bài đăng khác về chủ đề này và không có bài viết nào giống với vấn đề tôi gặp phải . Nhưng ở đây đi:

Tôi đang chạy một chức năng song song sử dụng

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])}

này thường hoạt động tốt, nhưng bây giờ là ném lỗi:

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

Sau khi kiểm tra đầu ra .txt tệp Tôi thấy:

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 

Lỗi này tôi s liên tục. Bộ nhớ phong phú (32GB), và không có đối tượng R lớn nào khác có trong bộ nhớ. Hàm trong mã song song truy xuất một số đối tượng dữ liệu json nhỏ từ đám mây và đặt chúng vào đối tượng R - vì vậy không có tệp dữ liệu lớn. Tôi không biết tại sao nó thỉnh thoảng lại nhìn thấy một nul nhúng và dừng lại.

Tôi cũng gặp sự cố tương tự với chức năng cũng kéo tệp csv từ đám mây. Cả hai hàm đều hoạt động tốt theo R 3.3.0 và R 3.4.0 cho đến bây giờ.

Tôi đang sử dụng R 3.4.1 và RStudio 1.0.143 trên Windows.

Dưới đây là sessionInfo tôi

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 

CẬP NHẬT

Bây giờ tôi nhận được một lỗi tương tự:

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

nhúng lỗi nul dường như đã biến mất. Tôi cũng đã thử xóa .Rhistory và .Rdata và cũng xóa các thư mục con của tôi và tải lại tất cả các pacakges của tôi. Ít nhất lỗi mới này có vẻ nhất quán. Tôi không thể tìm thấy "loại không xác định 100" là gì.

+0

Có thể bạn có các đối tượng lớn trong môi trường được xuất trên các cụm? Hãy thử gọi cuộc gọi foreach này bằng chức năng riêng của nó. –

+0

Điều đó dường như không phải là vấn đề - tôi thực sự đã xóa tất cả các đối tượng không liên quan trong môi trường. – user2642948

+0

Bạn có thể tái tạo vấn đề bằng 'hàm' mà bạn có thể cung cấp cho chúng tôi không? –

Trả lời

4

Tôi gặp lỗi tương tự ... thường xảy ra trên tập lệnh tiếp theo chạy khi một trong các tập lệnh trước của tôi bị lỗi hoặc tôi đã dừng sớm. Đây có thể là một phần mà bạn đề cập đến: "Tôi không biết tại sao nó thỉnh thoảng lại nhìn thấy một nul nhúng và dừng lại" có thể là lỗi.

Điều này có một số thông tin tốt, đặc biệt là để đảm bảo để nguyên 1 lõi cho các quy trình cửa sổ thông thường chạy. Cũng đề cập đến "Nếu bạn gặp lỗi từ một trong các chức năng đó, điều đó thường có nghĩa là ít nhất một trong số các công nhân đã chết", điều này có thể sao lưu lý thuyết của tôi về sự cố sau khi lỗi.

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

Cho đến nay, giải pháp của tôi đã được tái khởi tạo backend song song bằng cách chạy này một lần nữa:

registerDoParallel(cl) 

Nó thường làm việc sau đó nhưng tôi nhận thấy rằng các phiên đa lõi trước trong công việc quản lý của tôi không biến mất, ngay cả với:

stopCluster(cl) 

Đây là lý do tại sao tôi đôi khi khởi động lại R.

+0

Vâng, tôi cũng đã có vấn đề về lõi không dừng lại ngay cả sau 'stopCluster (cl)'. Tôi sẽ cố gắng khởi tạo lại chương trình phụ trợ. Tôi đã cố gắng để giảm số lượng lõi của 1 cho các cửa sổ thường xuyên quy trình, nhưng điều này dường như không giúp đỡ. – user2642948

+0

Tôi đã thử lại mã và nó chạy - nhưng đây là lần đầu tiên trong 15 lần thử cuối cùng. Các tập tin đầu ra cho thấy không có gì sai thời gian này. Nhưng hầu như không có một người xây dựng niềm tin ..... – user2642948

+1

Ba lần nữa dẫn đến thất bại. Khởi động lại R, giảm lõi và khởi tạo lại chương trình phụ trợ song song không giúp ích gì. – user2642948

2

Tôi cũng nhận thấy rằng các phiên đa lõi không biến mất khỏi trình quản lý tác vụ.

Chuyển từ sử dụng: stopCluster(cl) đến stopImplicitCluster() Làm việc cho tôi. Từ đọc sách của tôi, đây là nghĩa vụ phải được sử dụng khi sử dụng "một dòng" registerDoParallel(cores=x) vs

cl<-makeCluster(x) 
registerDoParallel(cl) 

"cảm giác ruột" của tôi là cách Windows xử lý các cụm đòi hỏi sự stopImplicitCluster, nhưng kinh nghiệm của bạn có thể thay đổi.

Tôi đã nhận xét nhưng đây là (cue band) MY STACKOVERFLOW POST FIRST !!!

Các vấn đề liên quan