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
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
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
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
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