Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Silkによる並列分散ワークフロープログラミング

1,806 views

Published on

並列・分散プログラミングを手軽に行うためのフレームワーク Silkについての紹介。https://github.com/xerial/silk

Published in: Technology

Silkによる並列分散ワークフロープログラミング

  1. 1. Silkによる並列列分散ワークフロープログラミング ⻫斉藤  太郎郎 東京⼤大学  情報⽣生命科学科 leo@xerial.org 2013年年  11⽉月28⽇日   xerial.org/silk 1
  2. 2. 情報解析の仕事:プログラミング Silk: Smart Cluster Computing for Data Scientists l  B  =  A.map(f) l  ⼊入⼒力力データ  A  に対して関数fを適⽤用し、Bに代⼊入 f A l  B 関数  f  の例例:  任意のアルゴリズム(計算) l  l  l  l  リードAをアラインメント SAM  -‐‑‒>  BAMへのフォーマット変換 RNA-‐‑‒Seq  -‐‑‒>  FPKMの計算 など xerial.org/silk 2
  3. 3. アルゴリズムさえできれば簡単? Silk: Smart Cluster Computing for Data Scientists f A B xerial.org/silk 3
  4. 4. ヒト⼀一⼈人分の全ゲノム解析に必要なデータ量量 Silk: Smart Cluster Computing for Data Scientists l  l  l  l  l  Input:  FASTQ  file(s)    500GB  (50x  coverage,  200  million  entries) f:    An  alignment  program Output:  Alignment  results  750GB  (sequence  +  alignment  data) Total  storage  space  required:  1.2TB   Computational  time  required:  1  days  (using  hundreds  of  CPUs) Input f Output University of Tokyo Genome Browser (UTGB) xerial.org/silk 4
  5. 5. 解析の⼯工程数が増えたら? Silk: Smart Cluster Computing for Data Scientists g f A B C D E xerial.org/silk 5
  6. 6. ゲノムサイエンスにおける解析は多種多様 Silk: Smart Cluster Computing for Data Scientists l  WormTSS:  http://wormtss.utgenome.org/ l  これまでほとんど知られていなかった線⾍虫の転写開始点を⼤大規模に同定 l  Gaussian  modelによるピーク解析、TSS周辺の新規motifの発⾒見見、種間での保存度度、  ヌクレオソー ムや転写因⼦子のChIP-‐‑‒Seqデータとの関連を解析、ゲノムブラウザーの作成、などなど xerial.org/silk 6
  7. 7. 作成したチャートの数は数百枚に及ぶ Silk: Smart Cluster Computing for Data Scientists 書き直した回数も含めると1000枚は 軽く超えている •  論論⽂文に載せられるのはごく⼀一部 なるべくExcelに頼らず、チャートま でプログラムで⽣生成するように •  R, JFreeChartなどを活⽤用 •  reviewの際の再計算に備える xerial.org/silk 7
  8. 8. コマンド、コマンド、コマンド、、、 Silk: Smart Cluster Computing for Data Scientists l  線⾍虫TSSの解析で作成したコマンド群  (抜粋) l  新しい解析、データ処理理を⾏行行うたびにコードを追加 l  プログラム中に関数定義するだけで、コマンドを追加できるライブラリを作成   l  l  コマンドライン引数を、関数の引数の型に⾃自動変換 ヘルプメッセージも⾃自動⽣生成 xerial.org/silk 8
  9. 9. コマンド間の依存関係の処理理 Silk: Smart Cluster Computing for Data Scientists l  Makefile l  l  l  コマンド間のデータのやりとり:  ファイル 線⾍虫TSSの解析で使⽤用したMakefile  〜~  1000⾏行行ほど Makefileの⽋欠点 l  l  l  ⽂文法に習熟しても書きにくい 並列列度度の粒粒度度がファイル単位  (それ以上の並列列化ができない) そもそもコマンドにプログラムを分解するのが⼤大変 xerial.org/silk 9
  10. 10. 実際のデータ解析: ⼤大きなデータ  +  多数の解析(ワークフロー) Silk: Smart Cluster Computing for Data Scientists g f A B F C G D xerial.org/silk E 10
  11. 11. Silk Silk: Smart Cluster Computing for Data Scientists l  ゲノムサイエンスのために開発している並列列・分散計算プラットホーム   l  Scalaで開発 l  l  l  l  map,  filter,  reduce,  join,  sort  など UNIXコマンドを挟むこともできる 多数のコードの組み合わせを記述・実⾏行行  (ワークフロー) l  l  クラスター計算機を、あたかも単⼀一マシンのように扱えるようにするのが⽬目標 Silk[A]  (型Aのデータリスト)  に対する分散演算を定義 l  l  Scala  (Twitter  inc.などが近年年活発に利利⽤用しているJVM上で動く⾔言語) プログラムを書いたら、それがワークフローになる ターゲットとなる層 l  プログラマ: l  l  Scalaを少し知っている⼈人(多くの知識識は必要ない) サイエンティスト:   l  Web経由でデータ処理理するインターフェース   l  例例:ブラウザからデータの集計、⼤大規模検索索のワークフローを作成。Silkに送信 xerial.org/silk 11
  12. 12. 課題 Silk: Smart Cluster Computing for Data Scientists l  課題1:ワークフローの⾼高速な実⾏行行 l  多数のマシン、CPUを⽤用いて並列列に計算を⾏行行う xerial.org/silk 12
  13. 13. 並列列・分散計算のためのスキル Silk: Smart Cluster Computing for Data Scientists プログラミング⾔言語 l  l  l  l  C++ l  MPI,  OpenMP,  thread(pthread,  boost  thread) l  mutex,  condition  variables l  compare-‐‑‒and-‐‑‒swap  (CAS) Java l  java.util.concurrent     Scala l  Parallel  collections l  l  マルチスレッド⽤用 Actor   l  Mail  box(buffer)を使った message-‐‑‒passing  model OSの知識識 l  l  l  ネットワーク通信 l  TCP/IP,  Socket UNIX l  ssh,  プロセス,  メモリ管理理 l  ファイルシステムの性質 l  これら全てを学んでも、まだ並列列・分散処 理理への道のりは⻑⾧長い NFS,  GlusterFS、GFSなど データ処理理 l  l  l  ファイルへの保存、構造化データの処理理 ディスクI/Oがボトルネックにならないための処理理 l  データの圧縮、indexの作成 分散処理理システム l  l  l  Hadoop,  HDFS,  HBase,  etc. Paxos  (consensus  protocol) l  全ノードが同じ状態にあることを保障 xerial.org/silk 13
  14. 14. 課題1:ワークフローの⾼高速な実⾏行行 Silk: Smart Cluster Computing for Data Scientists l  分散演算のための基本演算を提供 l  l  l  l  l  map(f:  A  =>  B)、flatMap(f:  A  =>  Seq[B]) filter(pred:  A  =>  Boolean) reduce(op:  (A,  A)  =>  A) join(B,  paramA,  paramB),  groupBy(k:A=>Key) などなど f g A B f R g A0 B0 A1 B1 A2 B2 xerial.org/silk R 14
  15. 15. 課題 Silk: Smart Cluster Computing for Data Scientists l  課題1:ワークフローの⾼高速な実⾏行行 l  l  多数のマシン、CPUを⽤用いて並列列に計算を⾏行行う 課題2:ワークフローを簡単に記述できるようにする l  ⾼高度度な並列列・分散処理理の知識識をユーザーに要求しない xerial.org/silk 15
  16. 16. 課題2:ワークフローを簡単に記述できるようにする Silk: Smart Cluster Computing for Data Scientists l  l  Scalaによる簡潔な構⽂文を利利⽤用 例例: l  samファイルを読んで、タブ区切切りにし、chr1に含まれるリード数を数える l  ⼊入⼒力力データのサイズが増えてもコードはそのまま l  コードの並列列化・分散化に関する記述は書かなくても良良い xerial.org/silk 16
  17. 17. プログラムの作成過程 Silk: Smart Cluster Computing for Data Scientists Program v1 f A B val B = A.map(f) l  データ  A  に対して、関数  f  を適⽤用した結果をBに代⼊入 l  計算に数時間かかる   l  =>  実⾏行行中にも次の解析コードを追加したい xerial.org/silk 17
  18. 18. ワークフローの追加 Silk: Smart Cluster Computing for Data Scientists Program v2 Program v1 A f g B C val B = A.map(f) val C = B.map(g) l  例例: l  l  Program  v1  を実⾏行行後、新たな解析が必要になりProgram  v2を作成 既に計算されたBの結果を利利⽤用して  val  C  =  B.map(g)  を計算するには? xerial.org/silk 18
  19. 19. 課題 Silk: Smart Cluster Computing for Data Scientists l  課題1:ワークフローの⾼高速な実⾏行行 l  l  課題2:ワークフローを簡単に記述できるようにする l  l  l  多数のマシン、CPUを⽤用いて並列列に計算を⾏行行う ⾼高度度な並列列・分散処理理の知識識をユーザーに要求しない Makefileでは⼤大変 課題3:ワークフローの更更新を管理理する l  プログラムは解析が進むにつれ進化していく ⼀一度度終了了した計算の結果は再利利⽤用したい l  障害からの回復復 l  l  l  l  マシンの障害だけではない プログラム中のバグ、期待した結果が得られない場合の中断 プログラムの修正後、再実⾏行行のサポート xerial.org/silk 19
  20. 20. 課題3:ワークフローの更更新を管理理する Silk: Smart Cluster Computing for Data Scientists Program v2 Program v1 f g A B l  例例:fの計算に数時間かかる場合 l  既に計算したBの結果を再利利⽤用 l  l  ファイルに保存 問題点 l  l  プログラムが冗⻑⾧長に fが軽い計算の場合には保存しない ⽅方が得だが、その判断が難しい   C val fileB = “result/B.obj” val B = if(!fileB.exists) { val tmp = A.map(f) tmp.saveTo(fileB) tmp } else load(fileB) val fileC = “result/C.obj” val C = if(!fileC.exists) { … } xerial.org/silk 20
  21. 21. プログラムへのマーキング(変数名) Silk: Smart Cluster Computing for Data Scientists Program v2 Program v1 f g A B C val B = A.map(f) val C = B.map(g) l  Bの計算が終わったことをどう判定するか? l  l  Bの結果を、Bという名前で保存する 変数名をマーカーとして活⽤用 コードの実⾏行行時には失われている情報 コード中の変数名の情報をコンパイル時に取得 l  l  l  Scala  Macroの機能を活⽤用 xerial.org/silk 21
  22. 22. オペレーションツリーの作成 Silk: Smart Cluster Computing for Data Scientists Program v2 Program v1 f A g B C val B = A.map(f) val C = B.map(g) l  各変数には、Silkのオペレーションが代⼊入される l  l  l  val  B  =  MapOp(input:A,  output:B,  function:f) val  C  =  MapOp(input:B,  output:C,  function:g) ネストしたオペーレション l  l  l  val  C  =  MapOp(input:MapOp(input:A,  output:B,  function:f),    output:C,  function:g) Silkでのデータ操作は、プログラムツリーの構築 計算結果の再利利⽤用 l  Cの計算にはBが必要。Bが計算されていれば再利利⽤用、なければA.map(f)を実⾏行行 xerial.org/silk 22
  23. 23. Silkの実装 Silk: Smart Cluster Computing for Data Scientists l  https://github.com/xerial/silk  で開発中 l  設定ファイルを極⼒力力排除 l  l  $HOME/.silk/hostsにホスト名の羅羅列列を 書くだけ クラスタの起動   l  silk  cluster  start  のコマンド⼀一つ l  l  l  ZooKeeperの起動 SilkClientを各ノードに配備 SilkMasterを選出 l  ワークフローの実⾏行行管理理 xerial.org/silk 23
  24. 24. Clusterの起動 Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 24
  25. 25. silk-sbt plugin Silk: Smart Cluster Computing for Data Scientists l  silk-‐‑‒sbt  plugin l  l  SBT  (simple  build  tool  for  Scala)からsilkの計算を実⾏行行できる ワークフローをプログラミングしながら計算を実⾏行行 l  l  ソースコードに変更更がある度度に、再計算を実⾏行行 実⾏行行フレームワークの切切り替え l  memory  (インメモリで実⾏行行)か  clusterの2種類   l  拡張案:qsub  (グリッドエンジンに投⼊入)、Makefileにワークフローを変換(ファイル 経由のデータの受け渡し)、など。 xerial.org/silk 25
  26. 26. silk-bootstrap Silk: Smart Cluster Computing for Data Scientists l  https://github.com/xerial/silk-‐‑‒bootstrap xerial.org/silk 26
  27. 27. Silk: Smart Cluster Computing for Data Scientists l  silk  evalコマンドには、(class  name):(function  name)を指定 xerial.org/silk 27
  28. 28. Distributed Sorting Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 28
  29. 29. Distributed Sorting in Cluster: Sampling Sort Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 29
  30. 30. Distributed Sorting – Shuffle Reduce Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 30
  31. 31. In-memory sort - OutOfMemory Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 31
  32. 32. UNIXコマンドのワークフロー Silk: Smart Cluster Computing for Data Scientists l  l  Makefile:ファイルを経由した依存関係の記述 Silk:  関数呼び出しの依存関係 l  例例: l  l  ref  <-‐‑‒  hg19,    saIndex  <-‐‑‒  (ref,  fastq),    sam  <-‐‑‒  (saIndex,  fastq),  bam  <-‐‑‒  sam,  sorted  <-‐‑‒  bam UNIXコマンドの実⾏行行 l  c”  (unix  command)”  の形式。⽂文字列列中に変数、関数を埋め込める.  Scala  macroで依存関係を抽出 xerial.org/silk 32
  33. 33. Write Once, Make it Scale Silk: Smart Cluster Computing for Data Scientists l  プログラムツリーの変換 l  map:  同じ関数を個々の要素に適⽤用 l  result 並列列化できる演算 result gather Node B Node A Map  ref.align Map  ref.align readFastq readFastq SA0001.fastq Map  ref.align readFastq ref BWT.createIndex scatter broadcast SA0001.fastq ref BWT.createIndex xerial.org/silk 33
  34. 34. ワークフローの最適化 Silk: Smart Cluster Computing for Data Scientists l  Static  Optimization l  l  l  Join  operation l  l  Hash  Join  –  Silkで書かれている Run-‐‑‒time  optimization l  l  map(f).map(g)  =>  map(g・f)  (関数の合成) map(f).filter(p)  =>  mapWithFilter(f,  p)      (出⼒力力データを減らす) 実⾏行行時、利利⽤用可能なノード数に合わせてデータ分割、並列列度度の調整 パイプライン化 l  map  -‐‑‒>  object  serialization  -‐‑‒>  Snappy  compression  -‐‑‒>    network  transfer  -‐‑‒>     Snappy  decompression  -‐‑‒>  object  deserialization  -‐‑‒>reduce l  reducer側が起動したあとでないとデータが流流し込めない l  l  Schedulerの調整が必要 spilling l  データの流流量量が⼤大きいとき、ファイルに書き出す xerial.org/silk 34
  35. 35. その他の実装・設計上の課題 Silk: Smart Cluster Computing for Data Scientists l  データの⽣生存期間  =>  session l  l  sessionに  silk.id  のデータを登録 sessionごとクリア、branchを作って新たな解析結果を上乗せ l  l  l  データ解析⽤用のgit,  mercurial sessionの内容をディスクに書き出す ファイル⼊入出⼒力力 l  l  l  NFS,  glusterfs,  local  diskを中間データの出⼒力力先として使う ZooKeeperにファイルのありか(ノード名、path)を記録 数⼗十GB〜~数百GBのデータ l  l  l  全部読むのに何⼗十分〜~何時間もかかる  -‐‑‒>  あらかじめscatterしてlocal  diskに保存して おく glusterfsのファイルに対し、ブロックごとに並列列にアクセスするのでは速度度が出なかっ た HDFS  (replication  =  1)  を使ってノード分散を楽に実現するか xerial.org/silk 35
  36. 36. クラスタ監視⽤用 Web UI Silk: Smart Cluster Computing for Data Scientists l  Silk  WebUI xerial.org/silk 36
  37. 37. Object-oriented Workflow Programming Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 37
  38. 38. 分散システムの関連研究 Silk: Smart Cluster Computing for Data Scientists l  分散計算の種類 l  Data  Parallel   l  l  Dataflow  Processing l  l  l  l  l  l  l  Pig   Dryad  (Microsoft.  プロジェクト⾃自体は終了了) SQL:  Hive,  Shark,  DryadLINQ Dremel  (Google) summingbird  (Twitter)   Iterative  Processing  (loopの実⾏行行) l  l  MapReduce  (Google  2003) Spark     Differential/Incremental  computing l  Nova:  Continuous  Pig/Hadoop  Workflow  (C.  Olston.  SIGMOD2011) l  Niad  (McSherry,  Microsoft,  2013) Silkの⽴立立ち位置 l  Workflow  +  Programming l  l  この⼆二つを区別しないのがユニーク Programming  distributed  workflows xerial.org/silk 38
  39. 39. Spark + Mesos Silk: Smart Cluster Computing for Data Scientists l  Spark    http://www.spark-‐‑‒project.org/ l  l  l  Mesos    http://incubator.apache.org/mesos/  (2009~∼) l  l  l  l  ⼤大規模データの分散処理理を⼿手軽に⾏行行うための フレームワーク    (2009年年にプロジェクト開始) ScalaによるHigh-‐‑‒level  API   l  分散処理理への変換はフレームワークが⾏行行う クラスタで使⽤用可能なノード、CPU数、メモリ量量を管理理 Spark、Hadoopなどのフレームワークへの資源割り当てを管理理 割り当て⽅方が特徴的 l  Mesosがフレームワークに資源をoffer、各フレームワークが資源を使うかどうかを決定 Consensus  problem l  クラスタ計算機を共調して動かすにはどうすればよいか?   l  l  l  ロックによる同期、情報の共有(group  membership)、リーダーの選択  (leader  election) 分散ステートマシンを動かす  -‐‑‒>  全ノードが同じ状態にあることを保障 Paxos  プロトコル l  2-‐‑‒phase  commit,  3-‐‑‒phase  commitに代わるレプリケーションのためのプロトコル l  同等の実装:ZooKeeper   xerial.org/silk 39
  40. 40. https://github.com/xerial/silk Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 40
  41. 41. Scala Cookbook Silk: Smart Cluster Computing for Data Scientists l  Scalaを使い始めるのは簡単 l  l  http://xerial.org/scala-‐‑‒cookbook/ 15分でセットアップ、コンパイル、テストコードの実⾏行行までできる xerial.org/silk 41
  42. 42. まとめ Silk: Smart Cluster Computing for Data Scientists l  Silk l  l  以下の課題を解決 l  l  l  l  並列列・分散ワークフローを簡単にプログラミングできるプラットフォーム 課題1:ワークフローの並列列・分散実⾏行行 課題2:ワークフローを簡単に記述する 課題3:ワークフローの更更新の管理理 開発状況 l  コードからワークフローの抽出 l  l  分散実⾏行行 l  l  種々の最適化など ノード間の通信、データの共有 TODO l  CPUを有効活⽤用したスケジューラー(version2を作成中) l  l  Apache  mesosの利利⽤用も検討 中間データの保存形態 l  圧縮ストレージの作成 xerial.org/silk 42

×