Parallele Verarbeitung mit xgboost und caret
Ich möchte den Modellanpassungsprozess für xgboost parallelisieren, während Caret verwendet wird. Nach dem, was ich in xgboost's @ gesehen haDokumentatio, dasnthread
er @ -Parameter steuert die Anzahl der Threads, die beim Anpassen der Modelle verwendet werden sollen, im Sinne einer parallelen Erstellung der Bäume. Caret'strain
ie @ -Funktion führt eine Parallelisierung durch, indem beispielsweise ein Prozess für jede Iteration in einem k-fachen CV ausgeführt wird. Ist dieses Verständnis richtig, wenn ja, ist es besser:
doMC
Paket und dasregisterDoMC
Funktion), setzenthread=1
über die Zugfunktion von caret, damit dieser Parameter an xgboost übergeben wird, setallowParallel=TRUE
imtrainControl
, und lasscaret
die Parallelisierung für die Kreuzvalidierung vornehmen; odeDisable Caret-Parallelisierung allowParallel=FALSE
und keine parallele Backend-Registrierung) und setnthread
auf die Anzahl der physischen Kerne, sodass die Parallelisierung ausschließlich in xgboost enthalten ist.Oder gibt es keinen "besseren" Weg, um die Parallelisierung durchzuführen?
Bearbeiten Ich habe den von @topepo vorgeschlagenen Code mit @ ausgeführtuneLength = 10
undsearch="random"
und @ angebnthread=1
in der letzten Zeile (ansonsten verstehe ich, dass xgboost Multithreading verwenden wird). Es gibt die Ergebnisse, die ich habe:
xgb_par[3]
elapsed
283.691
just_seq[3]
elapsed
276.704
mc_par[3]
elapsed
89.074
just_seq[3]/mc_par[3]
elapsed
3.106451
just_seq[3]/xgb_par[3]
elapsed
0.9753711
xgb_par[3]/mc_par[3]
elapsed
3.184891
m Ende stellte sich heraus, dass es sowohl für meine Daten als auch für diesen Testfall eine bessere Wahl hinsichtlich der Laufzeit war, Caret die Parallelisierung vornehmen zu lasse