doSMPを使用したキャレットパッケージの並列化


10

更新:キャレットは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)

次に、lapplyのドキュメントと同じ変数名を使用するmbqの関数のバージョンを示します。

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

キャレットは、train()関数の一部として既に内部でこれを実行しています。初心者向けのキャレットWebページの下部のセクションを参照してください。


trainが使用するデフォルトの関数はlapplyです。トレインを並列化する場合は、multicore ::: mclapplyなど、lapplyを模倣する並列関数が必要です。少なくとも、それは私が物事を理解する方法です。
Zach

@Zach、この質問のための+1は、私の不思議は、1つの並列処理を行うことができますどのように任意の更新があるcaret::train()ためWindows、例のほとんどのAPM本は、計算コストが高いが私のために少なくとも3ギガバイトRAM、2.1GHzのデュアルコア、32ビット勝利。以前にこの問題を知っていたら、に変更しますがLinux、そのようなことをするのは今では遅すぎます。Windowsでこの問題に対処する方法について何か知っていますか?による回答mbqがまだアクティブな場合は、適度なデータサイズのモデルの具体的な例を使用して、コードでplsを実装できcomputeFunctionますか?
博士号

@doctorateキャレットが更新され、foreachパッケージを内部で使用できるようになりました。これは、登録可能な任意の並列バックエンドで機能します。doParallelパッケージを見てください。バックエンドを登録すると、キャレットは自動的にそれを使用します。また、Windowsでは、各コアには独自のRAMのコピーが必要であるため、4つのコアを登録する場合は4倍のRAMが必要です。
Zach

@ザック、本当にありがとう、私はそれを試してみましたが、うまくいきました。あなたがに貢献したことも知っていますcaret。この質問を見てください。ありがとうございました。stats.stackexchange.com/questions/81962/…–
博士号
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.