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

Taro L. Saito
Taro L. SaitoPh.D., Software Engineer at Treasure Data
Silkによる並列列分散ワークフロープログラミング

⻫斉藤  太郎郎
東京⼤大学  情報⽣生命科学科
leo@xerial.org
2013年年  11⽉月28⽇日  

xerial.org/silk

1
情報解析の仕事:プログラミング
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
アルゴリズムさえできれば簡単?
Silk: Smart Cluster Computing for Data Scientists

f

A	

B	

xerial.org/silk

3
ヒト⼀一⼈人分の全ゲノム解析に必要なデータ量量
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
解析の⼯工程数が増えたら?
Silk: Smart Cluster Computing for Data Scientists

g

f

A	

B	

C	

D	

E	

xerial.org/silk

5
ゲノムサイエンスにおける解析は多種多様
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
作成したチャートの数は数百枚に及ぶ
Silk: Smart Cluster Computing for Data Scientists
書き直した回数も含めると1000枚は
軽く超えている
•  論論⽂文に載せられるのはごく⼀一部
なるべくExcelに頼らず、チャートま
でプログラムで⽣生成するように
•  R, JFreeChartなどを活⽤用
•  reviewの際の再計算に備える

xerial.org/silk

7
コマンド、コマンド、コマンド、、、
Silk: Smart Cluster Computing for Data Scientists

l 

線⾍虫TSSの解析で作成したコマンド群  (抜粋)
l 

新しい解析、データ処理理を⾏行行うたびにコードを追加
l 

プログラム中に関数定義するだけで、コマンドを追加できるライブラリを作成  
l 
l 

コマンドライン引数を、関数の引数の型に⾃自動変換
ヘルプメッセージも⾃自動⽣生成

xerial.org/silk

8
コマンド間の依存関係の処理理
Silk: Smart Cluster Computing for Data Scientists
l 

Makefile
l 
l 

l 

コマンド間のデータのやりとり:  ファイル
線⾍虫TSSの解析で使⽤用したMakefile  〜~  1000⾏行行ほど

Makefileの⽋欠点
l 
l 
l 

⽂文法に習熟しても書きにくい
並列列度度の粒粒度度がファイル単位  (それ以上の並列列化ができない)
そもそもコマンドにプログラムを分解するのが⼤大変

xerial.org/silk

9
実際のデータ解析: ⼤大きなデータ  +  多数の解析(ワークフロー)
Silk: Smart Cluster Computing for Data Scientists

g

f

A	

B	

F	

C	

G	

D	

xerial.org/silk

E	

10
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
課題
Silk: Smart Cluster Computing for Data Scientists

l 

課題1:ワークフローの⾼高速な実⾏行行
l 

多数のマシン、CPUを⽤用いて並列列に計算を⾏行行う

xerial.org/silk

12
並列列・分散計算のためのスキル
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
課題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
課題
Silk: Smart Cluster Computing for Data Scientists

l 

課題1:ワークフローの⾼高速な実⾏行行
l 

l 

多数のマシン、CPUを⽤用いて並列列に計算を⾏行行う

課題2:ワークフローを簡単に記述できるようにする
l 

⾼高度度な並列列・分散処理理の知識識をユーザーに要求しない

xerial.org/silk

15
課題2:ワークフローを簡単に記述できるようにする
Silk: Smart Cluster Computing for Data Scientists

l 
l 

Scalaによる簡潔な構⽂文を利利⽤用
例例:
l 

samファイルを読んで、タブ区切切りにし、chr1に含まれるリード数を数える

l 

⼊入⼒力力データのサイズが増えてもコードはそのまま
l 

コードの並列列化・分散化に関する記述は書かなくても良良い

xerial.org/silk

16
プログラムの作成過程
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
ワークフローの追加
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
課題
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
課題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
プログラムへのマーキング(変数名)
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
オペレーションツリーの作成
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
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
Clusterの起動
Silk: Smart Cluster Computing for Data Scientists

xerial.org/silk

24
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
silk-bootstrap
Silk: Smart Cluster Computing for Data Scientists

l 

https://github.com/xerial/silk-‐‑‒bootstrap

xerial.org/silk

26
Silk: Smart Cluster Computing for Data Scientists

l 

silk  evalコマンドには、(class  name):(function  name)を指定

xerial.org/silk

27
Distributed Sorting
Silk: Smart Cluster Computing for Data Scientists

xerial.org/silk

28
Distributed Sorting in Cluster: Sampling Sort
Silk: Smart Cluster Computing for Data Scientists

xerial.org/silk

29
Distributed Sorting – Shuffle Reduce
Silk: Smart Cluster Computing for Data Scientists

xerial.org/silk

30
In-memory sort - OutOfMemory
Silk: Smart Cluster Computing for Data Scientists

xerial.org/silk

31
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
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
ワークフローの最適化
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
その他の実装・設計上の課題
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
クラスタ監視⽤用 Web UI
Silk: Smart Cluster Computing for Data Scientists

l 

Silk  WebUI

xerial.org/silk

36
Object-oriented Workflow Programming
Silk: Smart Cluster Computing for Data Scientists

xerial.org/silk

37
分散システムの関連研究
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
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
https://github.com/xerial/silk
Silk: Smart Cluster Computing for Data Scientists

xerial.org/silk

40
Scala Cookbook
Silk: Smart Cluster Computing for Data Scientists
l 

Scalaを使い始めるのは簡単
l 
l 

http://xerial.org/scala-‐‑‒cookbook/
15分でセットアップ、コンパイル、テストコードの実⾏行行までできる

xerial.org/silk

41
まとめ
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
1 of 42

Recommended

Rでisomap(多様体学習のはなし) by
Rでisomap(多様体学習のはなし)Rでisomap(多様体学習のはなし)
Rでisomap(多様体学習のはなし)Kohta Ishikawa
28.9K views29 slides
LT@Chainer Meetup by
LT@Chainer MeetupLT@Chainer Meetup
LT@Chainer MeetupShunta Saito
84.5K views12 slides
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう by
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようPythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようShinya Takamaeda-Y
4.8K views80 slides
GPU上でのNLP向け深層学習の実装について by
GPU上でのNLP向け深層学習の実装についてGPU上でのNLP向け深層学習の実装について
GPU上でのNLP向け深層学習の実装についてYuya Unno
31.1K views24 slides
20171212 titech lecture_ishizaki_public by
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_publicKazuaki Ishizaki
959 views63 slides
音声認識と深層学習 by
音声認識と深層学習音声認識と深層学習
音声認識と深層学習Preferred Networks
110.3K views34 slides

More Related Content

What's hot

マルチパラダイム型高水準ハードウェア設計環境の検討 by
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討Shinya Takamaeda-Y
2.7K views31 slides
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder by
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder
[DL輪読会]NVAE: A Deep Hierarchical Variational AutoencoderDeep Learning JP
1.9K views22 slides
なにわTech20170218(tpu) tfug by
なにわTech20170218(tpu) tfugなにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfugNatsutani Minoru
4.5K views60 slides
猫でも分かるVariational AutoEncoder by
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoderSho Tatsuno
131.6K views51 slides
Chainer meetup20151014 by
Chainer meetup20151014Chainer meetup20151014
Chainer meetup20151014Jiro Nishitoba
84.3K views7 slides
Tensor flow usergroup 2016 (公開版) by
Tensor flow usergroup 2016 (公開版)Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)Hiroki Nakahara
28.8K views47 slides

What's hot(20)

マルチパラダイム型高水準ハードウェア設計環境の検討 by Shinya Takamaeda-Y
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討
Shinya Takamaeda-Y2.7K views
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder by Deep Learning JP
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder
Deep Learning JP1.9K views
猫でも分かるVariational AutoEncoder by Sho Tatsuno
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder
Sho Tatsuno131.6K views
Chainer meetup20151014 by Jiro Nishitoba
Chainer meetup20151014Chainer meetup20151014
Chainer meetup20151014
Jiro Nishitoba84.3K views
Tensor flow usergroup 2016 (公開版) by Hiroki Nakahara
Tensor flow usergroup 2016 (公開版)Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara28.8K views
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日) by Shinya Takamaeda-Y
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
Shinya Takamaeda-Y3.3K views
Chainerの使い方と自然言語処理への応用 by Seiya Tokui
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Seiya Tokui53.2K views
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」 by Naonori Nagano
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
Naonori Nagano3.4K views
Pythonを用いた高水準ハードウェア設計環境の検討 by Shinya Takamaeda-Y
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
Shinya Takamaeda-Y4.3K views
2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化) by 智啓 出川
2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)
2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)
智啓 出川1.1K views
PythonとVeriloggenを用いたRTL設計メタプログラミング by Shinya Takamaeda-Y
PythonとVeriloggenを用いたRTL設計メタプログラミングPythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミング
Shinya Takamaeda-Y4.8K views
PCAの最終形態GPLVMの解説 by 弘毅 露崎
PCAの最終形態GPLVMの解説PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
弘毅 露崎23.8K views
第1回 配信講義 計算科学技術特論A (2021) by RCCSRENKEI
第1回 配信講義 計算科学技術特論A (2021)第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)
RCCSRENKEI3K views
NetBSD6.X (i386)が2038年問題に対応、その余波 by 洋史 東平
NetBSD6.X (i386)が2038年問題に対応、その余波NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波
洋史 東平3.6K views
第3回nips読み会・関西『variational inference foundations and modern methods』 by koji ochiai
第3回nips読み会・関西『variational inference  foundations and modern methods』第3回nips読み会・関西『variational inference  foundations and modern methods』
第3回nips読み会・関西『variational inference foundations and modern methods』
koji ochiai2.3K views
Hyperoptとその周辺について by Keisuke Hosaka
Hyperoptとその周辺についてHyperoptとその周辺について
Hyperoptとその周辺について
Keisuke Hosaka12.6K views
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発 by Shinya Takamaeda-Y
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
Shinya Takamaeda-Y3.7K views

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

並列対決 Elixir × Go × C# x Scala , Node.js by
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
3.9K views51 slides
ATN No.2 Scala事始め by
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始めAdvancedTechNight
1.3K views29 slides
2014 11-20 Machine Learning with Apache Spark 勉強会資料 by
2014 11-20 Machine Learning with Apache Spark 勉強会資料2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料Recruit Technologies
11K views42 slides
Inside of excel 方眼紙撲滅委員会 #pyfes by
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
2.2K views55 slides
Struggle against cross-domain data complexity in Recruit group by
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit groupRecruit Technologies
2.2K views49 slides
Struggle against crossdomain data complexity in Recruit Group by
Struggle against crossdomain data complexity in Recruit GroupStruggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit GroupDataWorks Summit/Hadoop Summit
1K views49 slides

Similar to Silkによる並列分散ワークフロープログラミング(20)

並列対決 Elixir × Go × C# x Scala , Node.js by Yoshiiro Ueno
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
Yoshiiro Ueno3.9K views
2014 11-20 Machine Learning with Apache Spark 勉強会資料 by Recruit Technologies
2014 11-20 Machine Learning with Apache Spark 勉強会資料2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Inside of excel 方眼紙撲滅委員会 #pyfes by Takeshi Komiya
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
Takeshi Komiya2.2K views
Struggle against cross-domain data complexity in Recruit group by Recruit Technologies
Struggle against cross-domain data complexity in Recruit groupStruggle against cross-domain data complexity in Recruit group
Struggle against cross-domain data complexity in Recruit group
Scalaで萌える関数型プログラミング[1.1.RC1] by Ra Zon
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon2.1K views
なぜリアクティブは重要か #ScalaMatsuri by Yuta Okamoto
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
Yuta Okamoto7.9K views
言語アップデート -Scala編- by Kota Mizushima
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
Kota Mizushima2.2K views
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8 by y_taka_23
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_2321.2K views
Scalaで萌える関数型プログラミング[完全版] by Ra Zon
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon6.9K views
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化 by gree_tech
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
gree_tech4.2K views
2012研究室紹介(大川) by 猛 大川
2012研究室紹介(大川)2012研究室紹介(大川)
2012研究室紹介(大川)
猛 大川656 views
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics by Kohei KaiGai
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
Kohei KaiGai1.1K views
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation by Deep Learning JP
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
Deep Learning JP950 views
OSC2013 Tokyo/Spring JOSUG by Hideki Saito
OSC2013 Tokyo/Spring JOSUGOSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUG
Hideki Saito1.9K views
[DL Hacks]Shake-Shake regularization Improved Regularization of Convolutional... by Deep Learning JP
[DL Hacks]Shake-Shake regularization Improved Regularization of Convolutional...[DL Hacks]Shake-Shake regularization Improved Regularization of Convolutional...
[DL Hacks]Shake-Shake regularization Improved Regularization of Convolutional...
Deep Learning JP2.5K views

More from Taro L. Saito

Unifying Frontend and Backend Development with Scala - ScalaCon 2021 by
Unifying Frontend and Backend Development with Scala - ScalaCon 2021Unifying Frontend and Backend Development with Scala - ScalaCon 2021
Unifying Frontend and Backend Development with Scala - ScalaCon 2021Taro L. Saito
228 views39 slides
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020 by
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020Taro L. Saito
320 views35 slides
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020 by
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020Taro L. Saito
1.8K views39 slides
Airframe RPC by
Airframe RPCAirframe RPC
Airframe RPCTaro L. Saito
754 views32 slides
td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020 by
td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020
td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020Taro L. Saito
939 views21 slides
Airframe Meetup #3: 2019 Updates & AirSpec by
Airframe Meetup #3: 2019 Updates & AirSpecAirframe Meetup #3: 2019 Updates & AirSpec
Airframe Meetup #3: 2019 Updates & AirSpecTaro L. Saito
495 views40 slides

More from Taro L. Saito(20)

Unifying Frontend and Backend Development with Scala - ScalaCon 2021 by Taro L. Saito
Unifying Frontend and Backend Development with Scala - ScalaCon 2021Unifying Frontend and Backend Development with Scala - ScalaCon 2021
Unifying Frontend and Backend Development with Scala - ScalaCon 2021
Taro L. Saito228 views
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020 by Taro L. Saito
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
Taro L. Saito320 views
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020 by Taro L. Saito
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020
Taro L. Saito1.8K views
td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020 by Taro L. Saito
td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020
td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020
Taro L. Saito939 views
Airframe Meetup #3: 2019 Updates & AirSpec by Taro L. Saito
Airframe Meetup #3: 2019 Updates & AirSpecAirframe Meetup #3: 2019 Updates & AirSpec
Airframe Meetup #3: 2019 Updates & AirSpec
Taro L. Saito495 views
Presto At Arm Treasure Data - 2019 Updates by Taro L. Saito
Presto At Arm Treasure Data - 2019 UpdatesPresto At Arm Treasure Data - 2019 Updates
Presto At Arm Treasure Data - 2019 Updates
Taro L. Saito2.8K views
Reading The Source Code of Presto by Taro L. Saito
Reading The Source Code of PrestoReading The Source Code of Presto
Reading The Source Code of Presto
Taro L. Saito4.2K views
How To Use Scala At Work - Airframe In Action at Arm Treasure Data by Taro L. Saito
How To Use Scala At Work - Airframe In Action at Arm Treasure DataHow To Use Scala At Work - Airframe In Action at Arm Treasure Data
How To Use Scala At Work - Airframe In Action at Arm Treasure Data
Taro L. Saito1.3K views
Airframe: Lightweight Building Blocks for Scala - Scale By The Bay 2018 by Taro L. Saito
Airframe: Lightweight Building Blocks for Scala - Scale By The Bay 2018Airframe: Lightweight Building Blocks for Scala - Scale By The Bay 2018
Airframe: Lightweight Building Blocks for Scala - Scale By The Bay 2018
Taro L. Saito659 views
Airframe: Lightweight Building Blocks for Scala @ TD Tech Talk 2018-10-17 by Taro L. Saito
Airframe: Lightweight Building Blocks for Scala @ TD Tech Talk 2018-10-17Airframe: Lightweight Building Blocks for Scala @ TD Tech Talk 2018-10-17
Airframe: Lightweight Building Blocks for Scala @ TD Tech Talk 2018-10-17
Taro L. Saito2.9K views
Tips For Maintaining OSS Projects by Taro L. Saito
Tips For Maintaining OSS ProjectsTips For Maintaining OSS Projects
Tips For Maintaining OSS Projects
Taro L. Saito314 views
Learning Silicon Valley Culture by Taro L. Saito
Learning Silicon Valley CultureLearning Silicon Valley Culture
Learning Silicon Valley Culture
Taro L. Saito4.8K views
Presto At Treasure Data by Taro L. Saito
Presto At Treasure DataPresto At Treasure Data
Presto At Treasure Data
Taro L. Saito5.4K views
Scala at Treasure Data by Taro L. Saito
Scala at Treasure DataScala at Treasure Data
Scala at Treasure Data
Taro L. Saito3.1K views
Introduction to Presto at Treasure Data by Taro L. Saito
Introduction to Presto at Treasure DataIntroduction to Presto at Treasure Data
Introduction to Presto at Treasure Data
Taro L. Saito1.7K views
Workflow Hacks #1 - dots. Tokyo by Taro L. Saito
Workflow Hacks #1 - dots. TokyoWorkflow Hacks #1 - dots. Tokyo
Workflow Hacks #1 - dots. Tokyo
Taro L. Saito3.1K views
Presto @ Treasure Data - Presto Meetup Boston 2015 by Taro L. Saito
Presto @ Treasure Data - Presto Meetup Boston 2015Presto @ Treasure Data - Presto Meetup Boston 2015
Presto @ Treasure Data - Presto Meetup Boston 2015
Taro L. Saito1.9K views
Presto As A Service - Treasure DataでのPresto運用事例 by Taro L. Saito
Presto As A Service - Treasure DataでのPresto運用事例Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例
Taro L. Saito9.9K views

Recently uploaded

Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
88 views41 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
335 views13 slides
The Things Stack説明資料 by The Things Industries by
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
58 views29 slides
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
120 views42 slides
さくらのひやおろし2023 by
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023法林浩之
96 views58 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
60 views26 slides

Recently uploaded(11)

Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka88 views
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4335 views
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.58 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之96 views
SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda355 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)

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

  • 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. アルゴリズムさえできれば簡単? Silk: Smart Cluster Computing for Data Scientists f A B xerial.org/silk 3
  • 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. 解析の⼯工程数が増えたら? Silk: Smart Cluster Computing for Data Scientists g f A B C D E xerial.org/silk 5
  • 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. 作成したチャートの数は数百枚に及ぶ Silk: Smart Cluster Computing for Data Scientists 書き直した回数も含めると1000枚は 軽く超えている •  論論⽂文に載せられるのはごく⼀一部 なるべくExcelに頼らず、チャートま でプログラムで⽣生成するように •  R, JFreeChartなどを活⽤用 •  reviewの際の再計算に備える xerial.org/silk 7
  • 8. コマンド、コマンド、コマンド、、、 Silk: Smart Cluster Computing for Data Scientists l  線⾍虫TSSの解析で作成したコマンド群  (抜粋) l  新しい解析、データ処理理を⾏行行うたびにコードを追加 l  プログラム中に関数定義するだけで、コマンドを追加できるライブラリを作成   l  l  コマンドライン引数を、関数の引数の型に⾃自動変換 ヘルプメッセージも⾃自動⽣生成 xerial.org/silk 8
  • 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. 実際のデータ解析: ⼤大きなデータ  +  多数の解析(ワークフロー) Silk: Smart Cluster Computing for Data Scientists g f A B F C G D xerial.org/silk E 10
  • 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. 課題 Silk: Smart Cluster Computing for Data Scientists l  課題1:ワークフローの⾼高速な実⾏行行 l  多数のマシン、CPUを⽤用いて並列列に計算を⾏行行う xerial.org/silk 12
  • 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. 課題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. 課題 Silk: Smart Cluster Computing for Data Scientists l  課題1:ワークフローの⾼高速な実⾏行行 l  l  多数のマシン、CPUを⽤用いて並列列に計算を⾏行行う 課題2:ワークフローを簡単に記述できるようにする l  ⾼高度度な並列列・分散処理理の知識識をユーザーに要求しない xerial.org/silk 15
  • 16. 課題2:ワークフローを簡単に記述できるようにする Silk: Smart Cluster Computing for Data Scientists l  l  Scalaによる簡潔な構⽂文を利利⽤用 例例: l  samファイルを読んで、タブ区切切りにし、chr1に含まれるリード数を数える l  ⼊入⼒力力データのサイズが増えてもコードはそのまま l  コードの並列列化・分散化に関する記述は書かなくても良良い xerial.org/silk 16
  • 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. ワークフローの追加 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. 課題 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. 課題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. プログラムへのマーキング(変数名) 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. オペレーションツリーの作成 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. 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. Clusterの起動 Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 24
  • 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. silk-bootstrap Silk: Smart Cluster Computing for Data Scientists l  https://github.com/xerial/silk-‐‑‒bootstrap xerial.org/silk 26
  • 27. Silk: Smart Cluster Computing for Data Scientists l  silk  evalコマンドには、(class  name):(function  name)を指定 xerial.org/silk 27
  • 28. Distributed Sorting Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 28
  • 29. Distributed Sorting in Cluster: Sampling Sort Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 29
  • 30. Distributed Sorting – Shuffle Reduce Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 30
  • 31. In-memory sort - OutOfMemory Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 31
  • 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. 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. ワークフローの最適化 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. その他の実装・設計上の課題 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. クラスタ監視⽤用 Web UI Silk: Smart Cluster Computing for Data Scientists l  Silk  WebUI xerial.org/silk 36
  • 37. Object-oriented Workflow Programming Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 37
  • 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. 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. https://github.com/xerial/silk Silk: Smart Cluster Computing for Data Scientists xerial.org/silk 40
  • 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. まとめ 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