Skip to content

Instantly share code, notes, and snippets.

@simonpcouch
Created May 2, 2025 13:42
Show Gist options
  • Select an option

  • Save simonpcouch/6a669095ef618ada1f7026f77d88bcac to your computer and use it in GitHub Desktop.

Select an option

Save simonpcouch/6a669095ef618ada1f7026f77d88bcac to your computer and use it in GitHub Desktop.

Revisions

  1. simonpcouch created this gist May 2, 2025.
    115 changes: 115 additions & 0 deletions stacks_performance.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,115 @@
    Smoke test for parallelism in stacks' member fitting re: https://github.com/tidymodels/stacks/issues/234.

    ## With CRAN, sequential

    ``` r
    # 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
    ```

    <sup>Created on 2025-05-02 with [reprex v2.1.1](https://reprex.tidyverse.org)</sup>

    # With CRAN, parallel

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

    ``` r
    # 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
    ```

    <sup>Created on 2025-05-02 with [reprex v2.1.1](https://reprex.tidyverse.org)</sup>

    ## With dev, parallel (future)

    ...with the analogous multisession:

    ``` r
    # 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
    ```

    <sup>Created on 2025-05-02 with [reprex v2.1.1](https://reprex.tidyverse.org)</sup>

    Or, using mirai:

    ``` r
    # 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
    ```

    <sup>Created on 2025-05-02 with [reprex v2.1.1](https://reprex.tidyverse.org)</sup>