Skip to content

Instantly share code, notes, and snippets.

@simonpcouch
Created May 2, 2025 13:42
Show Gist options
  • Save simonpcouch/6a669095ef618ada1f7026f77d88bcac to your computer and use it in GitHub Desktop.
Save simonpcouch/6a669095ef618ada1f7026f77d88bcac to your computer and use it in GitHub Desktop.

Smoke test for parallelism in stacks' member fitting re: tidymodels/stacks#234.

With CRAN, sequential

# pak::pak("stacks")
library(stacks)

reg_st <- 
  stacks() %>%
  add_candidates(reg_res_lr) %>%
  add_candidates(reg_res_svm) %>%
  add_candidates(reg_res_sp)

reg_st <- blend_predictions(reg_st)
  
system.time({
  reg_st <- fit_members(reg_st)
})
#>    user  system elapsed 
#>   0.370   0.006   0.513

Created on 2025-05-02 with reprex v2.1.1

With CRAN, parallel

Tune warns here, but stacks knows what to do with doParallel still in this case.

# pak::pak("stacks")
library(stacks)

library(doParallel)
#> Loading required package: foreach
#> Loading required package: iterators
#> Loading required package: parallel
registerDoParallel(cores = 4)
  
reg_st <- 
  stacks() %>%
  add_candidates(reg_res_lr) %>%
  add_candidates(reg_res_svm) %>%
  add_candidates(reg_res_sp)

reg_st <- blend_predictions(reg_st)
#> Warning: ! tune detected a parallel backend registered with foreach but no backend
#>   registered with future.
#> ℹ Support for parallel processing with foreach was soft-deprecated in tune
#>   1.2.1.
#> ℹ See ?parallelism (`?tune::parallelism()`) to learn more.
  
system.time({
  reg_st <- fit_members(reg_st)
})
#>    user  system elapsed 
#>   0.313   0.127   0.338

Created on 2025-05-02 with reprex v2.1.1

With dev, parallel (future)

...with the analogous multisession:

# pak::pak("tidymodels/stacks")
library(stacks)

library(future)
plan(multisession(workers = 4))
  
reg_st <- 
  stacks() %>%
  add_candidates(reg_res_lr) %>%
  add_candidates(reg_res_svm) %>%
  add_candidates(reg_res_sp)

reg_st <- blend_predictions(reg_st)
  
system.time({
  reg_st <- fit_members(reg_st)
})
#>    user  system elapsed 
#>   0.320   0.016   0.464

Created on 2025-05-02 with reprex v2.1.1

Or, using mirai:

# pak::pak("tidymodels/stacks")
library(stacks)

library(future)
plan(future.mirai::mirai_multisession(workers = 4))
  
reg_st <- 
  stacks() %>%
  add_candidates(reg_res_lr) %>%
  add_candidates(reg_res_svm) %>%
  add_candidates(reg_res_sp)

reg_st <- blend_predictions(reg_st)
  
system.time({
  reg_st <- fit_members(reg_st)
})
#>    user  system elapsed 
#>   0.168   0.010   0.393

Created on 2025-05-02 with reprex v2.1.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment