Song song hóa gói caret bằng doSMP


10

CẬP NHẬT: caret hiện sử dụng foreachnội bộ, vì vậy câu hỏi này không còn thực sự phù hợp. Nếu bạn có thể đăng ký một phụ trợ song song làm việc cho foreach, caret sẽ sử dụng nó.


Tôi có gói caret cho R và tôi rất thú vị khi sử dụng trainchức năng để xác thực chéo các mô hình của mình. Tuy nhiên, tôi muốn tăng tốc mọi thứ và dường như caret cung cấp hỗ trợ cho xử lý song song. Cách tốt nhất để truy cập tính năng này trên máy Windows là gì? Tôi có gói doSMP , nhưng tôi không thể tìm ra cách dịch foreachhàm thành lapplyhàm, vì vậy tôi có thể chuyển nó sang trainhàm.

Dưới đây là một ví dụ về những gì tôi muốn làm, từ traintài liệu: Đây chính xác là những gì tôi muốn làm, nhưng sử dụng doSMPgói, thay vì doMPIgói.

## A function to emulate lapply in parallel
mpiCalcs <- function(X, FUN, ...)
}
    theDots <- list(...)
    parLapply(theDots$cl, X, FUN)
{

library(snow)
cl <- makeCluster(5, "MPI")

## 50 bootstrap models distributed across 5 workers
mpiControl <- trainControl(workers = 5,
    number = 50,
    computeFunction = mpiCalcs,
    computeArgs = list(cl = cl))

set.seed(1)
usingMPI <- train(medv ~ .,
    data = BostonHousing,
    "glmboost",
    trControl = mpiControl)

Đây là phiên bản của hàm mbq sử dụng cùng tên biến như tài liệu lapply:

felapply <- function(X, FUN, ...) {
    foreach(i=X) %dopar% {
        FUN(i, ...)
    }       
}

x <- felapply(seq(1,10), sqrt)
y <- lapply(seq(1,10), sqrt)
all.equal(x,y)

Câu trả lời:


6

Thử

computeFunction=function(onWhat,what,...){foreach(i=onWhat) %do% what(i,...)},

5

Caret đã thực hiện điều này trong nội bộ cho bạn như là một phần của train()chức năng, xem phần dưới cùng của trang web caret để bắt đầu.


Các chức năng mặc định được sử dụng bởi tàu là lapply. Nếu bạn muốn song song hóa tàu, bạn cần một hàm song song bắt chước một cách lắt léo, chẳng hạn như đa lõi ::: mclapply. Ít nhất, đó là cách tôi hiểu mọi thứ.
Zach

@Zach, 1 cho câu hỏi này, tôi ngạc nhiên là có bất kỳ bản cập nhật như thế nào người ta có thể làm xử lý song song với caret::train()cho Windows, hầu hết các ví dụ về các APMcuốn sách khá là đắt tiền, ít nhất là đối với tôi 3GB RAM, 2.1GHz, lõi kép, 32bit Win . Nếu tôi biết vấn đề này trước đây, tôi sẽ thay đổi Linux, nhưng bây giờ đã quá muộn để tôi làm điều đó. Bạn có biết làm thế nào để chống lại vấn đề này trong windows không? nếu câu trả lời mbqvẫn còn hoạt động, bạn có thể vui lòng chỉ hiển thị trong mã bằng cách sử dụng một ví dụ cụ thể của bất kỳ mô hình nào có kích thước dữ liệu vừa phải về cách triển khai computeFunctionkhông?
tiến sĩ

@doctorate caret đã được cập nhật để sử dụng foreachgói nội bộ, hoạt động với bất kỳ phụ trợ song song nào bạn có thể đăng ký. Hãy xem gói doParallel. Khi bạn đăng ký một phụ trợ, caret sẽ tự động sử dụng nó. Cũng lưu ý rằng, trên các cửa sổ, mỗi lõi cần có bản sao riêng của ram, vì vậy nếu bạn đăng ký 4 lõi, bạn cần gấp 4 lần RAM.
Zach

@Zach, cảm ơn thực sự, tôi đã thử nó và nó hoạt động. Tôi cũng biết rằng bạn đã đóng góp cho caret, bạn có thể vui lòng xem câu hỏi này, tôi sẽ rất biết ơn. stats.stackexchange.com/questions/81962/ Hy
tiến sĩ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.