Geheugen monitoren en beheren

Parallel programmeren in R

Nabeel Imam

Data Scientist

De rij en de ruimte

Drie loketten helpen klanten in een bank; anderen wachten op hun beurt.

Parallel programmeren in R

De parallelle flow

Een parallelle flow: een taak wordt opgesplitst in subtaken, uitgevoerd door verschillende cores en samengevoegd.

Parallel programmeren in R

De parallelle flow

De parallelle workflow draait in het RAM-geheugen.

Parallel programmeren in R

De geboortendata

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"
...
Parallel programmeren in R

Mappen met 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
   ...
...
Parallel programmeren in R

Profilen met twee workers

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

Een codeprofiel van de functie profvis. CSV’s parallel lezen met twee workers via future_map gebruikt 1,6 MB geheugen; de andere regels registreren geen gebruik.

Parallel programmeren in R

Profilen met vier workers

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

Een codeprofiel van de functie profvis. CSV’s parallel lezen met vier workers via future_map gebruikt 3,1 MB geheugen; het plannen van multisession gebruikt 0,3 MB.

Parallel programmeren in R

Achter de schermen

Kaart van de VS met vier regio’s: West, Midwest, Zuid en Noordoost. Elke regio heeft een lijst met CSV-bestanden per staat.

Parallel programmeren in R

Geheugen beheren met chunking

config <- furrr_options(chunk_size = 26)

plan(multisession, workers = 4) ls_df <- future_map(ls_files, read.csv,
.options = config) plan(sequential)
Parallel programmeren in R

Geheugen beheren met chunking

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

Een codeprofiel van de functie profvis. CSV’s parallel lezen met vier workers via future_map gebruikt 2,5 MB geheugen met chunk size 26.

Parallel programmeren in R

Chunking met parallel

cl <- makeCluster(4)


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

CSV’s parallel lezen met parLapply gebruikt 2,4 MB geheugen, volledig in de parLapply-aanroep.

Parallel programmeren in R

Chunking met parallel

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

chunk.size = 26)
stopCluster(cl)

CSV’s parallel lezen met parLapply gebruikt slechts 1 MB geheugen bij chunk size 26.

Parallel programmeren in R

Wanneer chunken?

  • Standaard wordt chunking al optimaal uitgevoerd
  • Bij grote dataobjecten en weinig geheugen
    • Probeer minder cores te gebruiken als het kan
    • Experimenteer met chunkgroottes voor een optimum
Parallel programmeren in R

Laten we oefenen!

Parallel programmeren in R

Preparing Video For Download...