再現性のあるシステム構築download.pitagora-galaxy.org/data/document/gwt2016/... ·...
TRANSCRIPT
再現性のあるシステム構築Reproducible Galaxy Workflow
version 1.3.2
2016-04-28理化学研究所
バイオインフォマティクス研究開発ユニット石井学
自己紹介
自己紹介
● バイオインフォマティクスの研究室でインフラ整備等をやっています○ 最近良くみる計測値
■ load average■ iowait■ network traffic
○ よく使うコマンド
■ kitchen■ knife■ docker■ qstat■ less
● バイオインフォマティクスのことはわかりません。
2
Agenda
● 今日話したいこと、話さないこと
● 再現性のあるシステム構築に必要なもの○ なぜ、WorkflowのCIが必要なのか?
● WorkflowのCIのはじめかた○ その取り組み紹介
● まとめ
● 依存性地獄(Dependency Hell)○ バージョニング
○ Galaxy Wofkflowの場合
○ Galaxy の場合
○ 他のバイオインフォマティクスのソフトウェアの場合
○ その他の業界の場合の例
3
謝辞(さいごに間に合わないきがするので先に)
● 理化学研究所、情報基盤センター、バイオインフォマティクス研究開発ユニットのみ
なさま○ とくに
■ 二階堂さん
■ 芳村さん
■ 松嶋さん
○ みなさん、いろいろお世話になったのですが、あげきれないので、、、スミマセン
● Pitagora Galaxy関係者のみなさま○ とくに
■ やまなかさん、おおたさん
○ 以下、(ry
4
用語集
今日は以下のような用語が出てきます。
簡単に今日の発表における石井による定義を書いておきます。
*1: https://ja.wikipedia.org/wiki/継続的インテグレーション
用語 今日の発表における定義
Workflow(または、WF) GalaxyのWorkflow
依存性地獄(Dependency Hell) 何かのバージョンをあげると、何かのバージョンがあがるが、ほかの何かが動かなくなる地獄、もしくはその恐怖にさらされる地獄
Continuous Integration(以下、CI) 継続的にビルドやテスト、インスペクションなどを実行していくこと *1
Bioinformatics 地獄。以外になにかありますかね???
5
今日話したいこと、話さないこと
今日話したいこと
● 再現性のあるシステム構築○ なぜWorkflowのCIが必要なのか
キーワード
● 同じデータをいれた場合に、想定される答えが返ってくる。
● 常にチェックする
● 1つでもいいので始めてみる
今日話さないこと、話せないこと
● バイオインフォマティクスの話○ 解析方法
○ プログラムのパラメータの細かい話
● dockerとか
6
なぜWorkflowのCIが必要なのか、そもそも
● 「再現性のあるシステム構築」というタイトルだが、フォーカスがかなり絞ってありま
すが、どうしてですか?○ 答え
■ たくさんありすぎて、全部を説明することは難しい
■ 人それぞれだよねってこともあるので、、、
● そもそも「再現性のあるシステム」ってなんですか?○ 答え
■ 石井なりの答えを考えてみました。
■ 「何を」再現したいのか
● 今回は「Workflowがいつも想定の通りに動くことを再現したい」
■ 「何が」想定通りなのか
● 同じデータをいれた場合に、想定される答えが返ってくる。
7
なぜWorkflowのCIが必要なのか、今昔
● バイオインフォマティクスに携わっていると、
突然こんなことを言われたことはありませんか?○ 「この前動いていたこれが、動かないのですがどうしてですかね?」
○ 「何も変えてないんですが、動かないのですがどうしてですかね?」
○ 「手元で動くのですが、本番環境で動きません」
● 10年前も、「10年前の話なんですけど」っていってましたが、今日も通じそうな気が
します
● どんな時に、言われて、どんなときに、言われないのか、考えてみました。
8
なぜWorkflowのCIが必要なのか、どんな時
● こんなときは、何も言われません○ 定期的に動いている時
○ 動かしていない時
● こんなときに、何か言われます○ 動かなくなってから。
● 誰に言われるのか
9
なぜWorkflowのCIが必要なのか、Who complain ?
● 自分でした。。。○ 過去の自分に対する文句を現在の自分が言っていました
● 他の人からは、、、○
● 失敗学実践講義、畑村洋太郎著。背表紙より引用
事故や失敗は必ず起こるもの。重要なのはその失敗から何を学ぶかである
10
なぜWorkflowのCIが必要なのか、動かない理由
● 以前動いていたものがある日動かなくなることはたくさんあります○ たとえば
■ システムの状態の更新
● ライブラリ
● ソフトウェア
● セキュリティパッチ
■ ローカル環境の変化
● 必要なディレクトリの中に何か変更があった。
■ 外的環境
● ファイアウォールの設置
■ データ
● インターネットに接続して何かを取得するものなど
● 実験データに想定外のことが、、、
■ そもそも、動いていなかった
● 動いていたといえないかもしれないが、1ステップ目のみ確認しただけだったとか
11
なぜWorkflowのCIが必要なのか、、、
● こんなこと言われませんか?○ 「とにかく動かして」
■ 結局うごかせないので、うごかせそうな人のところに話がくる。
● もう少し前にいってくれたら、、、
○ 「これ1回しか使わないから、いまだけなんとかして」
■ そういうものしか2度目を動かしたいと言われないような。。。
● 突然のリクエストがくるし、答えるのが仕事のような気がするが、、○ 他にも仕事があるが、動かなくなったものを動かすには以下のことが必要
■ 原因特定
■ 修正
■ 必要があれば、他の環境を壊していないかのチェック
○ 常にチェックしていれば、動かなくなる直前と動かなくなった直後がある程度わかるので、作業がし
やすい
■ そこでCI
12
WorkflowをCIする、下準備
● 必要(あるとやりやすい)とおもったもの○ まわりの人の理解、協力
■ ボス
■ パイプライン作成者
■ パイプライン関係者
○ 必要なマシンのスペックの把握
■ CI環境に本番環境と同じものを用意できるとは限らない
● メモリが足りなくなることが多い
● CPUについては1度に流せるジョブの量を知る必要がある
○ テストに必要なデータの大きさの把握
■ 大きすぎる場合は、小さいデータセットを用意してもらえるか
○ 検証方法の確認
■ 細かいデータを突き合わせることができるならば、それがよいのだが、そうでない場合は、ど
のようなデータがでてくればよいのかを、関係者の確認のもと決める。
● ここは結構頑張ってきめた方が良い。
■ 経験則では、まずはざっくりでもよい。
● テストがないより全然よかった。
○ ファイルがある、ファイルサイズが0でないくらいでもよい。
13
WorkflowをCIする、我々の取り組み、実例
● 「RNA-seq 発現解析パイプライン」
○ 以下のものとその先
■ http://download.pitagora-galaxy.org/data/document/GWT2015_Yoshimura.pdf
● 大きく3つのパートがある
○ WF01 :■ リードのQC、マッピング、および結果の可視化 (シーケンスがうまくいっ
ているかを見る)○ WF02 :
■ 各マッピング結果からカウントデータを収集し、PCA&相関係数を計算・
可視化 (サンプル間での発現量のばらつきを見る)○ WF03 :
■ 発現変動遺伝子の検出 (群間で発現量の差がある遺伝子を検定する)
14
WorkflowをCIする、我々の取り組み、環境作成
● 今回使用したもの○ Selenium
■ ブラウザテスト用
● ブラウザへの入力の自動化
● APIでも良いのではないか?
○ 今回はブラウザで動くことをチェックしたかった。
○ APIでは挙動がブラウザと同じなのかわかっていない。
○ 最終的に何が動かないと困るのかを考えておくこと
● 各ステップのスクリーンショット
○ bioblend■ Wofkflowの結果のチェック、及び、Workflowが終了したかのチェック
● ヒストリーを取り出して調べる
○ Jenkins■ 定期的に実行させることに使っています。
● 長く使っていて、 jenkins職人みたいになってしまった。。。
○ Docker■ 上のものは、全てdockerで動いています。
■ 検証用のGalaxyもdockerのものもある
15
WorkflowをCIする、我々の取り組み
● パイプラインの様子
● 主な流れ○ なにかを計算する
○ 計算が終わるのをまつ
○ 計算結果が期待するものであるかをチェック
○ 必要があれば、つぎの計算、なければ終了
16
WorkflowをCIする、我々の取り組み
● パイプラインの様子
● 主な流れ○ なにかを計算する
○ 計算が終わるのをまつ
○ 計算結果が期待するものであるかをチェック
○ 必要があれば、つぎの計算、なければ終了
17
WorkflowをCIする、我々の取り組み
● パイプラインの様子
● 主な流れ○ なにかを計算する
○ 計算が終わるのをまつ
○ 計算結果が期待するものであるかをチェック
○ 必要があれば、つぎの計算、なければ終了
18
WorkflowをCIする、我々の取り組み
● パイプラインの様子
● 主な流れ○ なにかを計算する
○ 計算が終わるのをまつ
○ 計算結果が期待するものであるかをチェック
○ 必要があれば、つぎの計算、なければ終了
19
WorkflowをCIする、実際のコード例(抜粋)
● ヒストリーを取得する部分に問題がないかを検証している部分○ ファイルの存在のチェック
○ ファイルのサイズが0でないかのチェック
● 1つでもいいので始めて見る
20
WorkflowをCIする、作成にあたって
● 良いと思っているプラクティス○ 何も考えずに、実行できると良い
○ CI環境と、手元で実行するスクリプトは同じである方が良い
○ 手がかりになりそうなものは、出力しておいた方が良い
■ どこが問題がなかったとか、チェックした項目を出力しておくとエラー時に調査が楽
○ 可能ならスクリーンショットとか
21
取り組んでよかったこと
● bayes linux 1.2.0 をリリースした後、数日で以下のようなことがおこった○ bayes linuxとはについては、今回触れません。
■ 「bayes linux qiita」で検索してください。 m(__)m
○ Rのバージョンアップ
■ 新しいバージョンにしても、ボタン1つで問題ないことが確認できた
○ pandasの更新 0.17系から0.18系■ まず問題があることがわかった
● deprecatedなメソッドがついになくなったらしい
■ WFの作者の人に、新しくなって壊れたことを見せることができた
● 前のバージョンでは壊れていないこともみせることができた
● 素早く修正してもらえた
● 修正が問題ないことをボタン1つで確認することができた
● 現在○ 新しいWFをdocker上で作っている
■ 同じワークフローでも、 sailfishのバージョンが違うとエラーになるということをーを WFの作者
の人と共有できた
● どのバージョンのsailfishがどう動くか
22
まとめ
実現したこと
● WorkflowのCIを行えるようにした○ 同じデータをいれた場合に、想定される答えが返ってくる。
○ 常にチェックする
○ 1つでもいいので始めてみる
今後
● 自動でチェックするようにしたい○ Workflowに対する追加変更
○ 毎日、0からスタートして同じ環境が作れるのか
23
ご清聴ありがとうございました。
Happy CI and Happy … !!
このプレゼンのVersion
● 1.0.0 最初の出来上がり
● 1.0.1 スクリーンショットについて追記。
● 1.1.0 1つでもいいから実行するについてを追加
● 1.1.1 タイプミス修正
● 1.2.0 サブタイトル変更
● 1.3.0 Whoを追加
● 1.3.1 単語の修正
● 1.3.2 不要なスライドの削除
実際のコードは
https://github.com/manabuishii/test_galaxy_in_docker_custom_bit_wf
24