पैरालेल apply परिवार

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

Nabeel Imam

Data Science

गर्भावस्था के दौरान वज़न बढ़ना

print(ls_weights)
$AK
  [1] 30 33 50 30 26 99 52 28 24 40 30 99 40
 [14] 20 20 39 25 30 20 33 99 54 30 99 30 38
...
$AL
   [1] 60 32 30 21 30 27 28 32 18 28 30 24 59
  [14] 30 19 30 15 17 18 53 26  5 25 41 50 20
...
$AR
  [1] 31 40 30 99 27 36 30 35 25 19 10 25 40
 [14] 33 37 12 34 99 43 26 28 99 37 30 26  6
...
1 CDC Births से Natality डेटा
R में पैरेलल प्रोग्रामिंग

mclapply के साथ FORK करना

boot_mean <- function (weights) {

  est <- rep(0, 1e4)

  for (i in 1:1e4) {
    b <- sample(weights, replace = T)
    est[i] <- mean(b)
  }

  return(est)
}

ls_boot <- mclapply(ls_weights, boot_mean,

mc.cores = 4)
  • 20 से 40% तेज
  • बैकग्राउंड में FORK क्लस्टर बनता है
    • अलग क्लस्टर सेटअप नहीं चाहिए
    • Windows पर काम नहीं करता
R में पैरेलल प्रोग्रामिंग

parLapplyLB से लोड बैलेंस करें

दो ऑफिस कर्मचारी भारी काम कर रहे हैं, जबकि एक कर्मचारी खाली बैठा है.

lapply(ls_weights, length)
   AK    AL    AR    AZ    CA    CO    CT   DC    DE    FL    GA    HI    IA  ...
  260  1503   816  1649 14869  1286  1151  520   295  4693  2824   510   891  ...
1 Designed by Freepik
R में पैरेलल प्रोग्रामिंग

parLapplyLB से लोड बैलेंस करें

microbenchmark(
  "parLapply" = {
    cl <- makeCluster(4)
    ls <- parLapply(cl, ls_weights, boot_mean)
    stopCluster(cl)
  },
  "parLapplyLB" = {
    cl <- makeCluster(4)
    ls <- parLapplyLB(cl, ls_weights, boot_mean)
    stopCluster(cl)
  },
  times = 10
)
Unit: seconds
       expr      min     mean      max neval
  parLapply 15.77250 16.38548 16.83822    10
parLapplyLB 14.55609 15.49170 17.26866    10
  • औसत (mean) समय 16.4 सेकंड से 15.5 सेकंड हो गया (~ 5% कमी)
R में पैरेलल प्रोग्रामिंग

एक से अधिक आर्ग्युमेंट पर लूप चलाएँ

add <- function (x, y, z) x + y + z


value1 <- c(0.5, 3.2, 5.1, 1.9) value2 <- c(0.1, 0.5, 0.2, 2.4) value3 <- 5

पहले iteration में value1, value2 और value3 के पहले तत्व जोड़े जाते हैं. दूसरे iteration में हर वेक्टर के दूसरे तत्व, और इसी तरह.

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

clusterMap

cl <- makeCluster(4)


clusterMap(cl, add,
x = value1, y = value2, z = value3) # Single value stopCluster(cl)
print(value3)
[1] 5
[[1]]
[1] 5.6

[[2]]
[1] 8.5

[[3]]
[1] 10.2

[[4]]
[1] 8.4
R में पैरेलल प्रोग्रामिंग

clusterMap बनाम parLapply

clusterMap(cl,         # क्लस्टर
           add,        # फंक्शन
           x = value1, # कई इनपुट
           y = value2,
           z = value3) # सिंगल वैल्यू को भी recycle कर सकते हैं
parLapply(cl,                # क्लस्टर
          input,             # एक इनपुट
          fun,               # फंक्शन
          arg_name = static) # एक्सपोर्टेड static वैरिएबल
                             # named आर्ग्युमेंट को दिए जाते हैं
R में पैरेलल प्रोग्रामिंग

clusterMap के साथ वज़न वृद्धि

print(ls_weights)
$AK
  [1] 30 33 50 30 26 99 52 28 24 40 30 99 40
...
print(ls_plur)
$AK
  [1] 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1
  ...
boot_dist <- function (weights, pluralities) {
  est <- rep(0, 1e4)
  ratio <- weights/pluralities
  for (i in 1:1e4) {
    b <- sample(ratio, replace = T)
    est[i] <- mean(b)
  }
  return(est)
}


cl <- makeCluster(4)
result <- clusterMap(cl, boot_dist,
weights = ls_weights, pluralities = ls_plur) stopCluster(cl)
R में पैरेलल प्रोग्रामिंग

कुल जन्मों की संख्या

print(mat_births)
     1   2   3   4   5   6   7   8   9  10  11  12
AK   7  13   8   8   5   9  12  19  16  16   7  16
AL  55  58  79  66  48  63  69  81  74  76  61  82
AR  28  28  41  37  40  40  42  52  40  44  33  38
AZ  69  70  70  71  68  61  73  81  76  74  87  62
CA 603 599 659 601 669 719 675 687 660 698 703 633
CO  50  55  72  56  63  56  56  70  58  48  53  58
CT  51  51  57  58  59  41  51  46  54  56  58  52
DC  25  18  14  40  22  19  24  25  20  26  20  25
...
R में पैरेलल प्रोग्रामिंग

पैरालेल में रो और कॉलम ऑपरेशन

cl <- makeCluster(4)

# कॉलम ऑपरेशन के लिए parCapply parCapply(cl, mat_births, sum)
# रो ऑपरेशन के लिए parRapply parRapply(cl, mat_births, sum) stopCluster(cl)
  • कॉलम-वाइज sum

     1    2    3    4    5    6    7
    4258 3966 4437 4345 4371 4482 4614
     8    9   10   11   12
    4738 4686 4483 4427 4247
    
  • रो-वाइज sum

    AK   AL   AR   AZ   CA   CO   CT
    136  812  463  862 7906  695  634
    DC   DE   FL   GA   HI   IA   ID
    278  151 2519 1512  254  472  237
    ...
    
R में पैरेलल प्रोग्रामिंग

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

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

Preparing Video For Download...