Belleği izleme ve yönetme

R'da Paralel Programlama

Nabeel Imam

Data Scientist

Kuyruk ve alan

Üç veznedar bankada müşterilerle ilgileniyor, bazı müşteriler sırasını bekliyor.

R'da Paralel Programlama

Paralel akış

Paralel bir akış gösteriliyor: Bir görev daha küçük alt görevlere bölünüyor, bu alt görevler farklı çekirdeklerde çalışıyor ve sonuçlar birleştiriliyor.

R'da Paralel Programlama

Paralel akış

Paralel iş akışı rastgele erişimli bellekte yer alıyor.

R'da Paralel Programlama

Doğum verileri

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"
...
R'da Paralel Programlama

Geleceklerle eşleme

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
   ...
...
R'da Paralel Programlama

İki işçiyle profil çıkarımı

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

profvis fonksiyonundan üretilen bir profil çıkarımı çıktısı. future_map ile iki işçi kullanarak CSV dosyalarını paralel okumak 1,6 megabayt bellek kullanıyor; diğer kod satırları kullanım göstermiyor.

R'da Paralel Programlama

Dört işçiyle profil çıkarımı

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

profvis fonksiyonundan üretilen bir profil çıkarımı çıktısı. future_map ile dört işçi kullanarak CSV dosyalarını paralel okumak 3,1 megabayt bellek kullanıyor; multisession planlama 0,3 megabayt kullanıyor.

R'da Paralel Programlama

Perde arkasında

ABD haritası; ülke Batı, Ortabatı, Güney ve Kuzeydoğu olmak üzere dört bölgeye ayrılmış. Her bölge, o bölgedeki eyaletlerin verilerini içeren CSV dosyaları listesine karşılık geliyor.

R'da Paralel Programlama

Parçalara bölerek bellek yönetimi

config <- furrr_options(chunk_size = 26)

plan(multisession, workers = 4) ls_df <- future_map(ls_files, read.csv,
.options = config) plan(sequential)
R'da Paralel Programlama

Parçalara bölerek bellek yönetimi

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

profvis fonksiyonundan üretilen bir profil çıkarımı çıktısı. future_map ile dört işçi ve 26 parça boyutuyla CSV dosyalarını paralel okumak 2,5 megabayt bellek kullanıyor.

R'da Paralel Programlama

parallel ile parçalara bölme

cl <- makeCluster(4)


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

parLapply kullanarak CSV dosyalarını paralel okumak 2,4 megabayt bellek kullanıyor; tamamı parLapply çağrısında.

R'da Paralel Programlama

parallel ile parçalara bölme

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

chunk.size = 26)
stopCluster(cl)

parLapply kullanarak CSV dosyalarını paralel okumak, parça boyutu 26 iken yalnızca 1 megabayt bellek kullanır.

R'da Paralel Programlama

Ne zaman parçalara bölmeli?

  • Parçalara bölme varsayılan olarak en iyi şekilde yapılır
  • Büyük veri nesnelerinde ve bellek daralırken
    • Uygunsa daha az çekirdek kullanmayı dene
    • En iyi değeri bulmak için birkaç parça boyutunu dene
R'da Paralel Programlama

Hadi pratik yapalım!

R'da Paralel Programlama

Preparing Video For Download...