ich folgenden Code auf 8-Core Linux verwenden und es nimmt alle 8 CoresWie stellen Sie sicher, dass mlr nimmt nur 6 Kern
library(mlr); library(parallel); library(parallelMap)
# Load data
iris_num <- iris; iris_num$Species <- as.numeric(iris_num$Species)
#create tasks
traintask <- makeRegrTask(data = iris_num, target = 'Species')
#create learner
lrn = makeLearner('regr.xgboost'); nthread <- min(6, detectCores());
lrn$par.vals = list(print.every.n = 500, objective = "reg:linear", eval_metric="rmse", nthread = nthread)
#set parameter space
params <- makeParamSet(
makeIntegerParam("max_depth",lower = 5L,upper = 20L), # 6
makeNumericParam("min_child_weight",lower = 1L,upper = 20L), # 1
makeNumericParam("subsample",lower = 0.5,upper = 1),
makeNumericParam("colsample_bytree",lower = 0.5,upper = 1),
makeIntegerParam("nrounds",lower=3000,upper=5000),
makeNumericParam("lambda",lower=0.75,upper=1),
makeNumericParam("lambda_bias",lower=0,upper=0.75),
makeNumericParam("gamma",lower=0,upper=1),
makeNumericParam("eta", lower = 0.01, upper = 0.05) # 0.3
)
#set resampling strategy
rdesc <- makeResampleDesc("CV",iters=9L)
#search strategy
ctrl <- makeTuneControlRandom(maxit = 10L)
#set parallel backend
if(Sys.info()['sysname'] == "Linux") {
parallelStartMulticore(cpus = nthread, show.info = T)
} else parallelStartSocket(cpus = nthread, show.info = T)
tune <- tuneParams(learner = lrn, task = traintask,resampling = rdesc,measures = rmse, par.set = params, control = ctrl, show.info = T)
Wie (jede der sechs Arbeiter 130% Auslastung nehmen) Stellen Sie sicher, dass mlr nur 6 Kern
Können Sie angeben, welche Funktion von mlr Sie parallelisieren möchten und welche Lerner Sie verwenden? –
Und welcher Lerner? –
@Shiv können Sie ein kleines reproduzierbares Beispiel erstellen, das den von Ihnen verwendeten Code enthält? Wie Lars bemerkt, wird mlr nur so viele Kerne verwenden, wie du es gibst. Dies wird höchstwahrscheinlich dadurch verursacht, dass der Lernende auch auf mehrere Kerne zugreift, die in den Lernerparametern –