मेमोरी की मॉनिटरिंग और प्रबंधन

R में पैरेलल प्रोग्रामिंग

Nabeel Imam

Data Scientist

कतार और स्पेस

एक बैंक में तीन टेलर ग्राहकों की सेवा कर रहे हैं, जबकि कुछ ग्राहक अपनी बारी का इंतज़ार कर रहे हैं.

R में पैरेलल प्रोग्रामिंग

पैरलल फ्लो

एक समानांतर फ्लो जिसमें एक टास्क को कई छोटे सबटास्क में बाँटा गया है. अलग-अलग कोर ये सबटास्क करते हैं और परिणाम जोड़ दिए जाते हैं.

R में पैरेलल प्रोग्रामिंग

पैरलल फ्लो

पैरलल वर्कफ़्लो रैंडम एक्सेस मेमोरी के भीतर चलता है.

R में पैरेलल प्रोग्रामिंग

जन्म डेटा

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 में पैरेलल प्रोग्रामिंग

फ्यूचर्स के साथ मैपिंग

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 में पैरेलल प्रोग्रामिंग

दो वर्कर के साथ प्रोफाइलिंग

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

profvis फंक्शन से निकला कोड प्रोफाइलिंग आउटपुट. future_map के साथ 2 वर्कर पर पैरलल CSV पढ़ने में 1.6 MB मेमोरी लगती है, जबकि बाकी लाइनों में उपयोग दर्ज नहीं होता.

R में पैरेलल प्रोग्रामिंग

चार वर्कर के साथ प्रोफाइलिंग

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

profvis फंक्शन से निकला कोड प्रोफाइलिंग आउटपुट. future_map के साथ 4 वर्कर पर पैरलल CSV पढ़ने में 3.1 MB मेमोरी लगती है, जबकि multisession की प्लानिंग में 0.3 MB लगते हैं.

R में पैरेलल प्रोग्रामिंग

पर्दे के पीछे

USA का मानचित्र, जिसे चार क्षेत्रों—West, Midwest, South, और Northeast—में बाँटा गया है. हर क्षेत्र में उस क्षेत्र के राज्यों के डेटा वाले CSV फाइलों की सूची है.

R में पैरेलल प्रोग्रामिंग

चंंकिंग से मेमोरी प्रबंधन

config <- furrr_options(chunk_size = 26)

plan(multisession, workers = 4) ls_df <- future_map(ls_files, read.csv,
.options = config) plan(sequential)
R में पैरेलल प्रोग्रामिंग

चंंकिंग से मेमोरी प्रबंधन

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

profvis फंक्शन से निकला कोड प्रोफाइलिंग आउटपुट. chunk size 26 रखने पर, future_map के साथ 4 वर्कर पर पैरलल CSV पढ़ने में 2.5 MB मेमोरी लगती है.

R में पैरेलल प्रोग्रामिंग

parallel के साथ चंंकिंग

cl <- makeCluster(4)


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

parLapply से पैरलल CSV पढ़ने में 2.4 MB मेमोरी लगती है, और यह सब parLapply कॉल में ही उपयोग होता है.

R में पैरेलल प्रोग्रामिंग

parallel के साथ चंंकिंग

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

chunk.size = 26)
stopCluster(cl)

chunk size 26 होने पर, parLapply से पैरलल CSV पढ़ने में केवल 1 MB मेमोरी लगती है.

R में पैरेलल प्रोग्रामिंग

कब chunk करें?

  • डिफॉल्ट रूप से चंंकिंग ऑप्टिमली होती है
  • बड़े डेटा ऑब्जेक्ट हों और मेमोरी कम पड़ रही हो
    • संभव हो तो कम कोर इस्तेमाल करें
    • बेहतर संतुलन के लिए कुछ chunk sizes आज़माएँ
R में पैरेलल प्रोग्रामिंग

अभ्यास करते हैं!

R में पैरेलल प्रोग्रामिंग

Preparing Video For Download...