SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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

Was ist angesagt? (20)

マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討マルチパラダイム型高水準ハードウェア設計環境の検討
マルチパラダイム型高水準ハードウェア設計環境の検討
 
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder
 
なにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfugなにわTech20170218(tpu) tfug
なにわTech20170218(tpu) tfug
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder
 
Chainer meetup20151014
Chainer meetup20151014Chainer meetup20151014
Chainer meetup20151014
 
Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)
 
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)
 
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
論文紹介:「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」
論文紹介:「End-to-end Sequence Labeling via Bi-directional LSTM-CNNs-CRF」
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
 
2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)
2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)
2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)
 
PythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングPythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミング
 
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
 
第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)第1回 配信講義 計算科学技術特論A (2021)
第1回 配信講義 計算科学技術特論A (2021)
 
NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波NetBSD6.X (i386)が2038年問題に対応、その余波
NetBSD6.X (i386)が2038年問題に対応、その余波
 
第3回nips読み会・関西『variational inference foundations and modern methods』
第3回nips読み会・関西『variational inference  foundations and modern methods』第3回nips読み会・関西『variational inference  foundations and modern methods』
第3回nips読み会・関西『variational inference foundations and modern methods』
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
Hyperoptとその周辺について
Hyperoptとその周辺についてHyperoptとその周辺について
Hyperoptとその周辺について
 
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
 

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

並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
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
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
 
Struggle against cross-domain data complexity in Recruit group
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
 
Struggle against crossdomain data complexity in Recruit Group
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
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriYuta Okamoto
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-Kota Mizushima
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化gree_tech
 
2012研究室紹介(大川)
2012研究室紹介(大川)2012研究室紹介(大川)
2012研究室紹介(大川)猛 大川
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
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 AnalyticsKohei KaiGai
 
[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
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine TranslationDeep Learning JP
 
OSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUGOSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUGHideki Saito
 
[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...
[DL Hacks]Shake-Shake regularization Improved Regularization of Convolutional...Deep Learning JP
 

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

並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
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
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
Struggle against cross-domain data complexity in Recruit group
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
 
Struggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit GroupStruggle against crossdomain data complexity in Recruit Group
Struggle against crossdomain data complexity in Recruit Group
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
 
KMLとR言語
KMLとR言語KMLとR言語
KMLとR言語
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
グラフデータベースNeo4Jでアセットダウンロードの構成管理と最適化
 
2012研究室紹介(大川)
2012研究室紹介(大川)2012研究室紹介(大川)
2012研究室紹介(大川)
 
Myoshimi extreme
Myoshimi extremeMyoshimi extreme
Myoshimi extreme
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
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
 
[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
[DL輪読会]GraphSeq2Seq: Graph-Sequence-to-Sequence for Neural Machine Translation
 
OSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUGOSC2013 Tokyo/Spring JOSUG
OSC2013 Tokyo/Spring JOSUG
 
[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...
[DL Hacks]Shake-Shake regularization Improved Regularization of Convolutional...
 
Spring “BigData”
Spring “BigData”Spring “BigData”
Spring “BigData”
 

Mehr von Taro L. Saito

Unifying Frontend and Backend Development with Scala - ScalaCon 2021
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
 
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
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
 
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020
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
 
td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020
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
 
Airframe Meetup #3: 2019 Updates & AirSpec
Airframe Meetup #3: 2019 Updates & AirSpecAirframe Meetup #3: 2019 Updates & AirSpec
Airframe Meetup #3: 2019 Updates & AirSpecTaro L. Saito
 
Presto At Arm Treasure Data - 2019 Updates
Presto At Arm Treasure Data - 2019 UpdatesPresto At Arm Treasure Data - 2019 Updates
Presto At Arm Treasure Data - 2019 UpdatesTaro L. Saito
 
Reading The Source Code of Presto
Reading The Source Code of PrestoReading The Source Code of Presto
Reading The Source Code of PrestoTaro L. Saito
 
How To Use Scala At Work - Airframe In Action at Arm Treasure Data
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 DataTaro L. Saito
 
Airframe: Lightweight Building Blocks for Scala - Scale By The Bay 2018
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 2018Taro L. Saito
 
Airframe: Lightweight Building Blocks for Scala @ TD Tech Talk 2018-10-17
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-17Taro L. Saito
 
Tips For Maintaining OSS Projects
Tips For Maintaining OSS ProjectsTips For Maintaining OSS Projects
Tips For Maintaining OSS ProjectsTaro L. Saito
 
Learning Silicon Valley Culture
Learning Silicon Valley CultureLearning Silicon Valley Culture
Learning Silicon Valley CultureTaro L. Saito
 
Presto At Treasure Data
Presto At Treasure DataPresto At Treasure Data
Presto At Treasure DataTaro L. Saito
 
Scala at Treasure Data
Scala at Treasure DataScala at Treasure Data
Scala at Treasure DataTaro L. Saito
 
Introduction to Presto at Treasure Data
Introduction to Presto at Treasure DataIntroduction to Presto at Treasure Data
Introduction to Presto at Treasure DataTaro L. Saito
 
Workflow Hacks #1 - dots. Tokyo
Workflow Hacks #1 - dots. TokyoWorkflow Hacks #1 - dots. Tokyo
Workflow Hacks #1 - dots. TokyoTaro L. Saito
 
Presto @ Treasure Data - Presto Meetup Boston 2015
Presto @ Treasure Data - Presto Meetup Boston 2015Presto @ Treasure Data - Presto Meetup Boston 2015
Presto @ Treasure Data - Presto Meetup Boston 2015Taro L. Saito
 
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Taro L. Saito
 

Mehr von Taro L. Saito (20)

Unifying Frontend and Backend Development with Scala - ScalaCon 2021
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
 
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
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
 
Scala for Everything: From Frontend to Backend Applications - Scala Matsuri 2020
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
 
Airframe RPC
Airframe RPCAirframe RPC
Airframe RPC
 
td-spark internals: Extending Spark with Airframe - Spark Meetup Tokyo #3 2020
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
 
Airframe Meetup #3: 2019 Updates & AirSpec
Airframe Meetup #3: 2019 Updates & AirSpecAirframe Meetup #3: 2019 Updates & AirSpec
Airframe Meetup #3: 2019 Updates & AirSpec
 
Presto At Arm Treasure Data - 2019 Updates
Presto At Arm Treasure Data - 2019 UpdatesPresto At Arm Treasure Data - 2019 Updates
Presto At Arm Treasure Data - 2019 Updates
 
Reading The Source Code of Presto
Reading The Source Code of PrestoReading The Source Code of Presto
Reading The Source Code of Presto
 
How To Use Scala At Work - Airframe In Action at Arm Treasure Data
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
 
Airframe: Lightweight Building Blocks for Scala - Scale By The Bay 2018
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
 
Airframe: Lightweight Building Blocks for Scala @ TD Tech Talk 2018-10-17
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
 
Tips For Maintaining OSS Projects
Tips For Maintaining OSS ProjectsTips For Maintaining OSS Projects
Tips For Maintaining OSS Projects
 
Learning Silicon Valley Culture
Learning Silicon Valley CultureLearning Silicon Valley Culture
Learning Silicon Valley Culture
 
Presto At Treasure Data
Presto At Treasure DataPresto At Treasure Data
Presto At Treasure Data
 
Scala at Treasure Data
Scala at Treasure DataScala at Treasure Data
Scala at Treasure Data
 
Introduction to Presto at Treasure Data
Introduction to Presto at Treasure DataIntroduction to Presto at Treasure Data
Introduction to Presto at Treasure Data
 
Workflow Hacks #1 - dots. Tokyo
Workflow Hacks #1 - dots. TokyoWorkflow Hacks #1 - dots. Tokyo
Workflow Hacks #1 - dots. Tokyo
 
Presto @ Treasure Data - Presto Meetup Boston 2015
Presto @ Treasure Data - Presto Meetup Boston 2015Presto @ Treasure Data - Presto Meetup Boston 2015
Presto @ Treasure Data - Presto Meetup Boston 2015
 
Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例Presto As A Service - Treasure DataでのPresto運用事例
Presto As A Service - Treasure DataでのPresto運用事例
 
JNuma Library
JNuma LibraryJNuma Library
JNuma Library
 

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