並列化すべきか?

R による並列プログラミング

Nabeel Imam

Data Scientist

建物を造ろう

   

前の階の上に床を作る: 逐次

 

完成した構造に窓を付ける: 並列

建設中の建物。床は順番にしか作れないが、窓は並列に取り付けられる。

R による並列プログラミング

逐次—並列のスケール

一般的な計算タスクを、片端が逐次・もう片端が並列のスケール上に配置。新しい変数の作成は並列寄り、累積和は逐次寄り。

R による並列プログラミング

典型的な数値計算

100万個の平方根を計算

numbers <- 1:1000000


start <- Sys.time() sq_roots <- lapply(numbers, sqrt) end <- Sys.time()
end - start
Time difference of 1.044573 secs
R による並列プログラミング

平方根をどう並列化する?

平方根の並列計算のフローチャート。1〜100万の整数を20万ずつ5グループに分割。

R による並列プログラミング

平方根をどう並列化する?

分割したデータを複数コアからなるクラスターへ送る。各数値グループは1コアに割り当てられ平方根を計算。すべてのコアが使用中なら、新しいグループは空きを待つ。

R による並列プログラミング

平方根をどう並列化する?

各コアから平方根を収集し、最終的に100万個の平方根を得る。

R による並列プログラミング

並列化した数値計算

100万個の平方根を並列計算

library(parallel)


my_cluster <- makeCluster(3)
start <- Sys.time() sq_roots <- parLapply(my_cluster, numbers, sqrt) end <- Sys.time()
stopCluster(my_cluster)
end - start
Time difference of 0.8416824 secs
R による並列プログラミング

想定より速くない理由

1〜100万の平方根を並列に計算するフローチャート。

R による並列プログラミング

想定より速くない理由

並列実行には追加作業がある。最初はデータ分割。

R による並列プログラミング

想定より速くない理由

分割後、各サブグループをクラスター内のコアへコピーする必要がある。

R による並列プログラミング

想定より速くない理由

計算後、各コアの出力を収集して最終結果にまとめる。

R による並列プログラミング

想定より速くない理由

全体のオーケストレーションにも計算資源を消費する。

R による並列プログラミング

では、並列化すべき?

十分に複雑なタスクなら、次を検討:

長所

  • 逐次より高速
  • 長期的にコスト効率が高い

 

短所

  • 特別なプログラミング技能が必要(ただし、あなたは準備万端)
  • メモリ使用量が多い
R による並列プログラミング

Passons à la pratique !

R による並列プログラミング

Preparing Video For Download...