R में Parallelization

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

Nabeel Imam

Data Scientist

एक व्यावहारिक उदाहरण

डेटा

print(file_list)
 [1] "./uni_data_country/Argentina.csv"
 [2] "./uni_data_country/Armenia.csv"
 [3] "./uni_data_country/Australia.csv"
 [4] "./uni_data_country/Austria.csv"
 [5] "./uni_data_country/Azerbaijan.csv"
 [6] "./uni_data_country/Bahrain.csv"
 [7] "./uni_data_country/Bangladesh.csv"
 [8] "./uni_data_country/Belarus.csv"
 [9] "./uni_data_country/Belgium.csv"
[10] "./uni_data_country/Bolivia.csv"
...

तीन विश्वविद्यालय भवन दिखाए गए हैं, स्नातक छात्रों के साथ, जिन्हें एक से तीन तक रैंक दी गई है.

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

एक कॉलम जोड़ें

for (file in file_list) {

  df <- read.csv(file)


df$top100 <- NA for (r in 1:nrow(df)) { df$top100[r] <- df$world_rank[r] <= 100 }
write.csv(df, file) }
R में पैरेलल प्रोग्रामिंग

प्रोफाइलिंग

कोड

library(profvis)


profvis({
for (file in file_list) { df <- read.csv(file) df$top100 <- NA for (r in 1:nrow(df)) { df$top100[r] <- df$Rank[r] <= 100 } write.csv(df, file) }
})

आउटपुट

profvis() से प्रोफाइलिंग आउटपुट. सैंपल कोड में, डेटा पढ़ने में 40 मिलीसेकंड लगते हैं, और `top100` कॉलम के मान भरने में 80 मिलीसेकंड. बाकी चरण लगभग तात्कालिक हैं.

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

आइए parallelize करें

लूप

  for (file in file_list) {

    df <- read.csv(file)
    df$top100 <- NA

    for (r in 1:nrow(df)) {
      df$top100[r] <- df$Rank[r] <= 100
    }
    write.csv(df, file)
  }

फंक्शन

add_col <- function(file_path) {

  df <- read.csv(file_path)
  df$top100 <- NA

  for (r in 1:nrow(df)) {
    df$top100[r] <- df$Rank[r] <= 100
  }
  write.csv(df, file_path)
}


cl <- makeCluster(6)
dummy <- parLapply(cl, file_list, add_col) stopCluster(cl)
R में पैरेलल प्रोग्रामिंग

व्यावहारिक बातें: कोर की संख्या

कोर पहचानना

detectCores()
[1] 8

Parallelized कोड

cl <- makeCluster(detectCores() - 2)


dummy <- parLapply(cl, file_list, add_col) stopCluster(cl)
R में पैरेलल प्रोग्रामिंग

व्यावहारिक बातें: क्लस्टर प्रकार

PSOCK क्लस्टर (डिफॉल्ट)

cl <- makeCluster(detectCores() - 2)
  • वर्तमान R सेशन की कॉपियाँ बनाता है
  • कोर मेमोरी साझा नहीं करते
  • किसी भी OS (Windows, Mac, Linux) पर काम करता है

FORK क्लस्टर

cl <- makeCluster(detectCores() - 2,
                  type = "FORK")
  • R सेशन से subprocesses बनाता है
  • कोर मेमोरी साझा करते हैं (PSOCK से तेज)
  • Windows पर काम नहीं करता
R में पैरेलल प्रोग्रामिंग

चलो अभ्यास करें!

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

Preparing Video For Download...