การขนานแพ็กเกจคาเร็ตโดยใช้ doSMP


10

UPDATE: คาเร็ตใช้ในตอนนี้foreachดังนั้นคำถามนี้จึงไม่มีความเกี่ยวข้องอีกต่อไป หากคุณสามารถลงทะเบียนแบ็กเอนด์แบบขนานที่foreachใช้งานได้คาเร็ตจะใช้มัน


ฉันมีชุดคาเร็ตสำหรับ R และฉันสนใจที่จะใช้trainฟังก์ชั่นเพื่อตรวจสอบความถูกต้องของโมเดลของฉัน อย่างไรก็ตามฉันต้องการเพิ่มความเร็วและดูเหมือนว่าเครื่องหมายรูปหมวกจะให้การสนับสนุนการประมวลผลแบบขนาน วิธีที่ดีที่สุดในการเข้าถึงคุณลักษณะนี้ในเครื่อง Windows คืออะไร ฉันมีแพ็คเกจdoSMPแต่ฉันไม่สามารถเข้าใจวิธีการแปลforeachฟังก์ชั่นเป็นlapplyฟังก์ชั่นดังนั้นฉันสามารถส่งผ่านไปยังtrainฟังก์ชันได้

นี่คือตัวอย่างของสิ่งที่ฉันต้องการจะทำจากtrainเอกสาร: นี่คือสิ่งที่ฉันต้องการจะทำ แต่ใช้doSMPแพ็คเกจแทนที่จะเป็นdoMPIแพ็คเกจ

## 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)

นี่คือฟังก์ชันเวอร์ชันของ mbq ​​ที่ใช้ชื่อตัวแปรเดียวกันกับเอกสาร 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)

คำตอบ:


6

ลอง

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

5

Caret ได้ทำสิ่งนี้ภายในเพื่อคุณโดยเป็นส่วนหนึ่งของtrain()ฟังก์ชั่นให้ดูที่ส่วนล่างของเว็บเพจ caretสำหรับการเริ่ม


ฟังก์ชั่นเริ่มต้นที่ใช้โดยรถไฟเป็น lapply ถ้าคุณต้องการทำให้ขนานรถไฟคุณจำเป็นต้องมีฟังก์ชั่นขนานที่เลียนแบบแลปlyเช่นมัลติคอร์ ::: mclapply อย่างน้อยนั่นคือวิธีที่ฉันเข้าใจสิ่งต่าง ๆ
Zach

@ Zach, +1 สำหรับคำถามนี้ฉันสงสัยว่ามีการอัปเดตใด ๆ ที่สามารถทำการประมวลผลแบบขนานcaret::train()สำหรับWindowsตัวอย่างAPMหนังสือส่วนใหญ่มีราคาแพงอย่างน้อยสำหรับฉัน 3GB RAM, 2.1GHz, dual core, 32 บิต Win . หากฉันรู้ปัญหานี้มาก่อนฉันจะเปลี่ยนเป็นLinuxแต่ตอนนี้มันสายเกินไปแล้วที่ฉันจะทำสิ่งนี้ คุณรู้วิธีที่จะต่อสู้กับปัญหานี้ในหน้าต่างหรือไม่? หากคำตอบmbqยังคงใช้งานอยู่คุณสามารถแสดงในรหัสโดยใช้ตัวอย่างที่เป็นรูปธรรมของโมเดลใด ๆ ที่มีขนาดข้อมูลปานกลางถึงวิธีการใช้งานcomputeFunctionหรือไม่?
ปริญญาเอก

@Doctorate caret ได้รับการปรับปรุงให้ใช้foreachแพคเกจภายในซึ่งทำงานร่วมกับแบ็กเอนด์แบบขนานใด ๆ ที่คุณสามารถลงทะเบียน ดูแพ็คเกจ doParallel เมื่อคุณลงทะเบียนแบ็กเอนด์คาเร็ตจะใช้มันโดยอัตโนมัติ โปรดทราบว่าใน Windows แต่ละคอร์ต้องการแกน RAM ของตัวเองดังนั้นหากคุณลงทะเบียน 4 คอร์คุณต้องมี RAM มากถึง 4x
Zach

@Zach ขอบคุณจริง ๆ ฉันลองแล้วใช้งานได้ ฉันรู้ด้วยว่าคุณมีส่วนช่วยcaretกรุณาช่วยลองดูคำถามนี้ฉันจะขอบคุณมาก stats.stackexchange.com/questions/81962/…
ปริญญาเอก
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.