Monitorování a správa paměti

Paralelní programování v R

Nabeel Imam

Data Scientist

Fronta a prostor

Tři pokladní obsluhují zákazníky v bance, zatímco někteří zákazníci čekají na svou řadu.

Paralelní programování v R

Paralelní tok

Zobrazení paralelního toku, kde je úloha rozdělena na menší podúlohy. Ty jsou zpracovány různými jádry a výsledky jsou sloučeny.

Paralelní programování v R

Paralelní tok

Paralelní postup zpracování je uložen v operační paměti.

Paralelní programování v R

Data births

print(ls_files)
 [1] "./births/AK.csv"
 [2] "./births/AL.csv"
 [3] "./births/AR.csv"
 [4] "./births/AZ.csv"
 [5] "./births/CA.csv"
 [6] "./births/CO.csv"
 [7] "./births/CT.csv"
 [8] "./births/DC.csv"
 [9] "./births/DE.csv"
 [10] "./births/FL.csv"
...
Paralelní programování v R

Mapování s futures

plan(multisession, workers = 2)

ls_df <- future_map(ls_files, read.csv)
plan(sequential)
print(ls_df)
[[1]]
   state month plurality weight_gain_pounds mother_age
      AK     1         1                 30         43
   ...
[[2]]
   state month plurality weight_gain_pounds mother_age
      AL    10         1                 60         33
   ...
...
Paralelní programování v R

Profilování se dvěma workers

profvis({
  plan(multisession, workers = 2)
  ls_df <- future_map(ls_files, read.csv)
  plan(sequential)
})

Výstup profilování kódu z funkce profvis. Paralelní čtení CSV souborů se dvěma workers pomocí future_map využívá 1,6 megabajtu paměti, ostatní řádky kódu spotřebu nezaznamenají.

Paralelní programování v R

Profilování se čtyřmi workers

profvis({
  plan(multisession, workers = 4)
  ls_df <- future_map(ls_files, read.csv)
  plan(sequential)
})

Výstup profilování kódu z funkce profvis. Paralelní čtení CSV souborů se čtyřmi workers pomocí future_map využívá 3,1 megabajtu paměti, plánování multisession využívá 0,3 megabajtu.

Paralelní programování v R

Na pozadí

Mapa USA rozdělená do čtyř regionů: západ, středozápad, jih a severovýchod. Každý region odpovídá seznamu CSV souborů s daty jednotlivých států.

Paralelní programování v R

Správa paměti pomocí chunkování

config <- furrr_options(chunk_size = 26)

plan(multisession, workers = 4) ls_df <- future_map(ls_files, read.csv,
.options = config) plan(sequential)
Paralelní programování v R

Správa paměti pomocí chunkování

profvis({
  config <- furrr_options(chunk_size = 26)
  plan(multisession, workers = 4)
  ls_df <- future_map(ls_files, read.csv,
             .options = config)
  plan(sequential)
})

Výstup profilování kódu z funkce profvis. Paralelní čtení CSV souborů se čtyřmi workers pomocí future_map využívá 2,5 megabajtu paměti při velikosti chunku 26.

Paralelní programování v R

Chunkování s parallel

cl <- makeCluster(4)


ls_df <- parLapply(cl, ls_files, read.csv)
stopCluster(cl)

Paralelní čtení CSV souborů pomocí parLapply využívá 2,4 megabajtu paměti, veškerá spotřeba vzniká při volání parLapply.

Paralelní programování v R

Chunkování s parallel

cl <- makeCluster(4)
ls_df <- parLapply(cl, ls_files, read.csv,

chunk.size = 26)
stopCluster(cl)

Paralelní čtení CSV souborů pomocí parLapply využívá při velikosti chunku 26 pouze 1 megabajt paměti.

Paralelní programování v R

Kdy chunkovat?

  • Chunkování probíhá standardně optimálně
  • Při velkých datových objektech a nedostatku paměti
    • Pokud je to možné, zkuste použít méně jader
    • Experimentujte s různými velikostmi chunku pro dosažení optima
Paralelní programování v R

Lass uns üben!

Paralelní programování v R

Preparing Video For Download...