1 of 160

作ったツール,どうやってユーザーに届ける?

〜 Galaxy,Docker,クラウドを活用する

会場:大ホール(荘銀タクト鶴岡)

座長:鈴木 治夫(慶應義塾大)志波 優(東京農業大)

10:45~10:50 イントロ 志波 優(東京農業大)

10:50~11:00 ツールをコンテナ化する 菅波 麻衣(東京大学)

11:00~11:30 ツールを Galaxy に載せる 志波 優(東京農業大)

池田 誠(合同会社パーシピア)

新海 典夫(産業技術総合研究所)

11:30~11:50 Galaxy をユーザーに提供する    山中 遼太(オラクル・タイランド)

   那須野 淳(株式会社アスケイド)

11:50~12:10 ツールをワークフロー化して記述する   丹生 智也(国立情報学研究所)

  落合 展(国立がん研究センター)

12:10~12:15 まとめ

1

#iibmp2018, #usegalaxy @pitagora_meetup

2 of 160

twitter はじめました

ID: @pitagora_meetup

hashtag: #iibmp2018, #usegalaxy

講演中の質問・感想も大歓迎です!

スライドも後日公開予定です

2

#iibmp2018, #usegalaxy @pitagora_meetup

3 of 160

作ったツール、どうやってユーザーに届ける?

〜 Galaxy,Docker,クラウドを活用する

  • めんどう
    • GitHubからソースコードをダウンロード、

ビルド&インストール

  • いまどき
    • Conda または Docker で配布
  • さらにフレンドリー
    • Galaxy でツールやワークフローを提供する

3

#iibmp2018, #usegalaxy @pitagora_meetup

4 of 160

作ったツール,どうやってユーザーに届ける?

〜 Galaxy,Docker,クラウドを活用する

会場:大ホール(荘銀タクト鶴岡)

座長:鈴木 治夫(慶應義塾大)志波 優(東京農業大)

10:45~10:50 イントロ 志波 優(東京農業大)

10:50~11:00 ツールをコンテナ化する 菅波 麻衣(東京大学)

11:00~11:30 ツールを Galaxy に載せる 志波 優(東京農業大)

池田 誠(合同会社パーシピア)

新海 典夫(産業技術総合研究所)

11:30~11:50 Galaxy をユーザーに提供する    山中 遼太(オラクル・タイランド)

   那須野 淳(株式会社アスケイド)

11:50~12:10 ツールをワークフロー化して記述する   丹生 智也(国立情報学研究所)

  落合 展(国立がん研究センター)

12:10~12:15 まとめ

4

#iibmp2018, #usegalaxy @pitagora_meetup

5 of 160

細菌叢解析ツールの共有

〜Dockerコンテナ〜

東京大学 生産技術研究所

3部合原研究室 技術補佐員

菅波 麻衣

iibmp2018

#iibmp2018, #usegalaxy @pitagora_meetup

6 of 160

細菌叢解析ツールについて

6

#iibmp2018, #usegalaxy @pitagora_meetup

7 of 160

細菌叢解析ツールについて

MacProを使用

7

#iibmp2018, #usegalaxy @pitagora_meetup

8 of 160

vsearchの仕組�

8

#iibmp2018, #usegalaxy @pitagora_meetup

9 of 160

vsearchの仕組�

この他にも多くのソフト・パッケージ使用・・・

9

#iibmp2018, #usegalaxy @pitagora_meetup

10 of 160

解析ツール共有の問題

10

#iibmp2018, #usegalaxy @pitagora_meetup

11 of 160

解析ツール共有の問題

11

#iibmp2018, #usegalaxy @pitagora_meetup

12 of 160

ツールを共有・配布したい・・・!

複雑!でも便利な細菌叢解析ツールが完成!

そこで、

Dockerの登場です。

12

#iibmp2018, #usegalaxy @pitagora_meetup

13 of 160

Docker とは?

Docker社が開発した、

非常に軽量なコンテナ型の仮想化環境である。�

参考:wiki(https://ja.wikipedia.org/wiki/Docker)

VMに比べて

オーバヘッドが

少ない

13

#iibmp2018, #usegalaxy @pitagora_meetup

14 of 160

Docker とは?

Docker社が開発した、

非常に軽量なコンテナ型の仮想化環境である。�

参考:wiki(https://ja.wikipedia.org/wiki/Docker)

VMに比べて

オーバヘッドが

少ない

14

#iibmp2018, #usegalaxy @pitagora_meetup

15 of 160

Docker イメージを作成しよう!

Dockerイメージって? ��・Dockerコンテナの元

15

#iibmp2018, #usegalaxy @pitagora_meetup

16 of 160

Docker イメージを作成しよう!

Dockerイメージって? ��・Dockerコンテナの元�

・無料でインストールOK�

16

#iibmp2018, #usegalaxy @pitagora_meetup

17 of 160

Docker イメージを作成しよう!

Dockerイメージって? ��・Dockerコンテナの元�

・無料でインストールOK�

Dockerfileから作ってみよう!!

17

#iibmp2018, #usegalaxy @pitagora_meetup

18 of 160

Docker fileについて

  • ベースイメージを決める

  • パッケージ・ソフトを   インストル� 

  • Pythonスクリプトをコピー�

18

#iibmp2018, #usegalaxy @pitagora_meetup

19 of 160

Docker fileについて

  • ベースイメージを決める

  • パッケージ・ソフトを   インストール� 

  • Pythonスクリプトをコピー�

19

#iibmp2018, #usegalaxy @pitagora_meetup

20 of 160

Docker fileについて

  • ベースイメージを決める

  • パッケージ・ソフトを   インストール� 

  • Pythonスクリプトをコピー�

Dockerfileをbuildして�     理想のDockerイメージ完成!

20

#iibmp2018, #usegalaxy @pitagora_meetup

21 of 160

Docker hubでイメージを配布

Dockerfile

21

#iibmp2018, #usegalaxy @pitagora_meetup

22 of 160

Docker hubでイメージを配布

Dockerfile

アップロード

22

#iibmp2018, #usegalaxy @pitagora_meetup

23 of 160

Docker hubでイメージを配布

Dockerfile

アップロード

公開・共有

ダウンロード

23

#iibmp2018, #usegalaxy @pitagora_meetup

24 of 160

まとめ

を使って解決!

1つ作っておけばOK!

24

#iibmp2018, #usegalaxy @pitagora_meetup

25 of 160

ここで、ふり返って考えてみよう。

  もしも、

 使わなかったら・・・?�(めんどくさいに違いない!!!)�

25

#iibmp2018, #usegalaxy @pitagora_meetup

26 of 160

【(例)試行錯誤の苦い思い出】

  1. Pythonをインストール

  • ソフトやツール、自作したPythonスクリプトをコピー

動かない・・・

  • 必要なパッケージ確認し、インストール

動かない・・・

そもそも、この解析ツールはMac用だったことに気づく

26

#iibmp2018, #usegalaxy @pitagora_meetup

27 of 160

【(例)試行錯誤の苦い思い出】

  • Pythonをインストール

  • ソフトやツール、自作したPythonスクリプトをコピー

動かない・・・

  • 必要なパッケージ確認し、インストール

動かない・・・

そもそも、この解析ツールはMac用だったことに気づく

  • ソフトやツール等をWindows用でインストールし直す

動かない・・・

  • 動作するバージョンのソフトやツールをインストールし直す・・・

(以下略)

27

#iibmp2018, #usegalaxy @pitagora_meetup

28 of 160

【(例)試行錯誤の苦い思い出】

  • Pythonをインストール

  • ソフトやツール、自作したPythonスクリプトをコピー

動かない・・・

  • 必要なパッケージ確認し、インストール

動かない・・・

そもそも、この解析ツールはMac用だったことに気づく

  • ソフトやツール等をWindows用でインストールし直す

動かない・・・

  • 動作するバージョンのソフトやツールをインストールし直す・・・

(以下略)

 なんとか動いた

     として、、、� 解析結果は

   同じなんかなぁ?

28

#iibmp2018, #usegalaxy @pitagora_meetup

29 of 160

まとめ2

やっぱり、

での共有は・・・

29

#iibmp2018, #usegalaxy @pitagora_meetup

30 of 160

気になる点・解決策

  • 利用者は Docker のインストールが必要

        

  • 誰にでも簡単に Docker は使える?�→主にCUI(character-based user interface)で作業�→HowToの周知・指導が必要

逆にいえば、一度覚えてしまえば便利。覚えても損はない!!(と私は思います。)�

  • 作成した Docker イメージはバージョン管理等は必要?

→パッケージやソフト、スクリプトの変更などあれば随時更

→作りっぱなし×

30

#iibmp2018, #usegalaxy @pitagora_meetup

31 of 160

気になる点・解決策

  • 軽量と言ってるくせに・・・重いけど?

→作成した Docker イメージのサイズの軽量化

ソフトやパッケージのサイズやレイヤー数が問題かも。。。

(重くなってはDockerとしての利点がなくなる!(汗))

  • イメージのビルド・アップロード・ダウンロードが遅くなる事も

→軽量で高速な Docker イメージになるように要改良

Dockerfileを作成の際には・・・

  • 不要なファイルやパッケージは削除する
  • なるべくRUNはまとめて書く(レイヤーを減らせます)
  • ベースイメージを軽いのにしてみる・・・・などなど

31

#iibmp2018, #usegalaxy @pitagora_meetup

32 of 160

今後について

  • 他の解析ツールも Docker で動かせる?�→RNAseq解析ツール(=時系列解析も含む)も試したい

(※個人的な夢)

  • Docker 以外の選択肢としてクラウドサービスでの提供も?�→Galaxy(このあと、ご説明いただけます!!)

→Google Colaboratory(=googleのサービス)

→Rstudio.cloud ・・・ など�

32

#iibmp2018, #usegalaxy @pitagora_meetup

33 of 160

謝辞 & 案内

petadimensionlab(中岡さんと共同研究)のサイトをご紹介。

※所々工事中�※今回ご紹介しました細菌叢解析ツールの

 dockerfileやpythonスクリプトがあります!

本研究は、JSPS科研費 JP15H05707 の助成を受けて行いました。

Qiitaも

ぜひ入門編として

参考にしてみてください!

33

#iibmp2018, #usegalaxy @pitagora_meetup

34 of 160

Galaxy にツールを実装

公開するまでの流れ

志波 優 (Yuh Shiwa)

東京農業大学 分子微生物学科

iibmp2018

#iibmp2018, #usegalaxy @pitagora_meetup

35 of 160

Galaxy とはなんでしょうか?

  • サイズの大きなデータを分析できます
  • いろいろなツールが入っています
  • ウェブ上で誰でも使えます

35

#iibmp2018, #usegalaxy @pitagora_meetup

36 of 160

Galaxy とはなんでしょうか?

36

#iibmp2018, #usegalaxy @pitagora_meetup

37 of 160

Public Galaxy Server(無料です)

https://galaxyproject.org/public-galaxy-servers/

37

#iibmp2018, #usegalaxy @pitagora_meetup

38 of 160

ワークフローも作成可能

38

#iibmp2018, #usegalaxy @pitagora_meetup

39 of 160

Galaxy にツールを実装・公開するまでに

やったこと

  1. 実装したいツールのスコープを決める
  2. Galaxy環境をDockerで用意
  3. Galaxy環境に対象ツールをインストール
  4. Tool XML ファイルの作成
  5. ツールのテスト
  6. ツールを Tool Shed へ登録
  7. ツールを Tool Shed 経由でインストール

39

#iibmp2018, #usegalaxy @pitagora_meetup

40 of 160

実装したいツールのスコープを決める

1 Tool

1 XML File

  • 依存関係
  • 入出力
  • パラメータ
  • 実行コマンド

などをXMLに記載

40

#iibmp2018, #usegalaxy @pitagora_meetup

41 of 160

NanoPlot のツールをGalaxyに実装してみた

$ Nanoplot --summary sequencing_summary.txt -o summary-plots

41

#iibmp2018, #usegalaxy @pitagora_meetup

42 of 160

Galaxy環境をDockerで用意

# チュートリアル用ファイル(XML、テスト入力)のダウンロード

$ git clone \

https://github.com/youyuh48/galaxy-tutorial-20180920.git

$ cd galaxy-tutorial-20180920

# Docker Galaxyの起動(ホスト上のツール定義XMLをマウント)

$ docker run --name galaxy -d -p 8080:80 \

-v `pwd`:/media --privileged=true \

-e GALAXY_CONFIG_TOOL_CONFIG_FILE=config/tool_conf.xml.sample,/media/mytool_conf.xml \

bgruening/galaxy-stable

42

#iibmp2018, #usegalaxy @pitagora_meetup

43 of 160

Galaxyコンテナに対象ツールをインストール

# コンテナにログイン

$ docker exec -it galaxy /bin/bash

# Bioconda経由でインストール

$ /tool_deps/_conda/bin/conda create \

--name __nanoplot@1.13.0 nanoplot==1.13.0 --channel bioconda

$ source /tool_deps/_conda/bin/activate __nanoplot@1.13.0

$ NanoPlot --help

# Dockerも使える

$ docker run biocontainers/fastqc fastqc --help

43

#iibmp2018, #usegalaxy @pitagora_meetup

44 of 160

Tool XML ファイルの作成

  • 依存関係、入出力、パラメータ、実行コマンドなどをXMLに記載

# NanoPlot/NanoPlot.xml の抜粋

<tool id="NanoPlot" name="NanoPlot" version="0.1.0">

<description>ツールの説明</description>

<requirements>

<requirement type="package" version="1.13.0">nanoplot</requirement>

</requirements>

<command>

<![CDATA[

NanoPlot --summary "$input" -o report

&& mv report/NanoPlot-report.html output.html

]]>

</command>

<inputs>ツールの入力の記載</inputs>

<outputs>ツールの出力の記載</outputs>

44

#iibmp2018, #usegalaxy @pitagora_meetup

45 of 160

Galaxyでツールを動かしてみる

# ツールパネルを定義する mytool_conf.xml から作成したXMLファイルを呼ぶ(抜粋)

<section id="mytools" name="My Tools">

<tool file="/media/NanoPlot/NanoPlot.xml" />

  1. Get Data->Upload File -> /NanoPlot/test-data/ sequencing_summary.txt
  2. My Tools->NanoPlot
  3. Summay fileで1でUploadしたファイルを指定
  4. Execute

45

#iibmp2018, #usegalaxy @pitagora_meetup

46 of 160

Planemo を使って Tool Shed へツールを登録

# planemo shed_init \�--name=nanoplot \�--description="Galaxy wrapper for the NanoPlot package." \�(中略)

# planemo shed_create --shed_target testtoolshed

46

#iibmp2018, #usegalaxy @pitagora_meetup

47 of 160

ツールを Tool Shed 経由でインストール

ログイン→admin/admin→管理者→Install new tools

→Galaxy Test Tool Shed → ツール名 (NanoPlot) で検索 → Install

# Docker Galaxyを新規に起動

$ docker run --name galaxy2 -d -p 8080:80 \

--privileged=true \

-e GALAXY_CONFIG_ENABLE_BETA_MULLED_CONTAINERS=True \

-e ENABLE_TTS_INSTALL=True \

bgruening/galaxy-stable

47

#iibmp2018, #usegalaxy @pitagora_meetup

48 of 160

まとめ

48

#iibmp2018, #usegalaxy @pitagora_meetup

49 of 160

Galaxyにツールを実装する

池田誠

合同会社パーシピア

iibmp2018

#iibmp2018, #usegalaxy @pitagora_meetup

50 of 160

ツールとは何か?

ツール(Tool):

画面の左側に表示されている、

解析の最小の単位

ワークフロー(Workflow):

ツールを組み合わせて解析を実行する

一連の処理手順

50

#iibmp2018, #usegalaxy @pitagora_meetup

51 of 160

ツールとは何か?

51

#iibmp2018, #usegalaxy @pitagora_meetup

52 of 160

ツールとは何か?

52

#iibmp2018, #usegalaxy @pitagora_meetup

53 of 160

実装までの手順

  1. 同じ事ができるツールが既に存在しないか探す
    1. Toolshed という共有場所が準備されている
      1. 同じツールが有るなら
        1. 動作を確認
        2. 利用できれば終了そうでなければ次のステップへ
  2. ツールを作成しテストをする
    • Galaxy自身が動作している環境への影響を避けるために
      • Docker コンテナにしてツールそのものが正常に動作するか確かめる
  3. ツールに与える3つのパラメーターを検討する
    • 入力ファイル
    • 出力ファイル
    • オプション

53

#iibmp2018, #usegalaxy @pitagora_meetup

54 of 160

実装までの手順2

  • インターフェイスとパラメーターを定義するXMLを記述する
    • planemo の利用
      • インターフェイスを記述する
      • インターフェイスをテストする
      • ii. で問題がなければ、Galaxyのインターフェイスを利用して動作を確認してみる
  • Planemoを使ってToolshedに登録する
  • 手元のGalaxyのadmin(管理者)権限で、Toolshedからインストールできる事を確認する

54

#iibmp2018, #usegalaxy @pitagora_meetup

55 of 160

同じ事ができるツールが既に存在しないか探す

55

#iibmp2018, #usegalaxy @pitagora_meetup

56 of 160

同じ事ができるツールが既に存在しないか探す

ただし、過去のGalaxy用に作られていて、�現在は動作しないものも...

56

#iibmp2018, #usegalaxy @pitagora_meetup

57 of 160

ツールを(作成し)テストする

  • ツールを単体でテストする
    • Docker イメージにして動作を確認する

GalaxyでDockerを利用するにはxmlでは次のように記述� <requirements>

<container type="docker">

自分のツールのDockerイメージ

</container>

</requirements>

57

#iibmp2018, #usegalaxy @pitagora_meetup

58 of 160

ツールに与えるパラメーターを検討する

  • ツールに与えるパラメータを検討する
    • input:
      • <inputs></inputs>内部に記述
        • 入力ファイル
          1. ヒストリーから選択
          2. データベースを選択

        • パラメーター
    • output:
      • <outputs></outputs>
      • 出力ファイル
        • ツールが出力する各種のパラメーター

58

#iibmp2018, #usegalaxy @pitagora_meetup

59 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

59

#iibmp2018, #usegalaxy @pitagora_meetup

60 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

  • 凝ったインターフェイスを作らない

    • 内部で分岐したりしないようにしよう�できるだけテンプレートエンジン(cheetah)の機能を利用しない�
    • 複数の機能を持たせない�異なった機能は異なったインターフェイスで提供

    • スクリプトを<command></command>に直接記述するのをやめよう

  • testを必ず準備しよう
    • でもツールそのもののテストは別に...�

60

#iibmp2018, #usegalaxy @pitagora_meetup

61 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

  • 凝ったインターフェイスを作らない

    • 内部で分岐したりしないようにしよう�できるだけテンプレートエンジン(cheetah)の機能を利用しない�
    • 複数の機能を持たせない�異なった機能は異なったインターフェイスで提供

    • スクリプトを<command></command>に直接記述するのをやめよう

  • testを必ず準備しよう
    • でもツールそのもののテストは別に...�

61

#iibmp2018, #usegalaxy @pitagora_meetup

62 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

<tool

id="ツール名"

name="Galaxyのツールに表示される名称" version="2.0.1(バージョン番号)">

</tool>

62

#iibmp2018, #usegalaxy @pitagora_meetup

63 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

<tool …>

<description>

(tool の id="ツール名")が何かを書く

</description>

</tool>

例:

tool の id=”Convert” で

description が delimiters to TABのときには

ツールのウィンドウ部分には

Convert delimiters to TAB

と表記される

63

#iibmp2018, #usegalaxy @pitagora_meetup

64 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

<tool …>

<requirements>

<requirement>

他のツール

Dockerコンテナ等

<requirement>

</requirements>

</tool>

64

#iibmp2018, #usegalaxy @pitagora_meetup

65 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

<tool …>

<command>![CDATA[

ツールで実行するコマンド

]]</command>

</tool>

あくまでもXmlで記載しているので、

記号のエスケープ等に煩わされないようにCDATAを利用

<help></help>も同様

65

#iibmp2018, #usegalaxy @pitagora_meetup

66 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

commandの内部で条件分岐できるけど...

<command><![CDATA[

#if $input1:

samtools view

-b

-h

-@ \${GALAXY_SLOTS:-2}

-o '$bam_native_output'

'$input1'

#elif $input2:

cp '$input2' '$bam_native_output'

#elif $input3:

cp '$input3' '$bam_output'

#elif $input4:

cp '$input4' '$qname_sorted_bam_output'

#elif $input5:

cp '$input5' '$qname_input_sorted_bam_output'

#end if

]]>

</command>

https://github.com/galaxyproject/galaxy/blob/dev/test/functional/tools/sam_to_unsorted_bam.xml

66

#iibmp2018, #usegalaxy @pitagora_meetup

67 of 160

インターフェイスとパラメーターを定義するXML

<tool ...>全体をこの内部に記述する� <description>

“ツール名” は何をするもの...と記述する

</description>� <requirements>

dockerのコンテナの指定等�</requirements>�<command ...>コマンド</command>�<inputs>� 入力ファイルとパラメーター�</inputs>�<outputs>� 出力ファイル�</outputs>�<help>� ツールに関わるヘルプ�</help>

<tests><test></test></tests>

<citations>

<citation>...</citation>

<citations>

</tool>

<tool …>

<inputs>

<param name="入力名"

type="data" format="..."

label="インターフェイスに表示"/>

</inputs>

<outputs>

<data format="..."

name="出力名" />

</outputs>

</tool>

command部分で

your_command -i ‘$入力名’ -o ‘$出力名’

等のように利用する

67

#iibmp2018, #usegalaxy @pitagora_meetup

68 of 160

Planemoの利用方法(docker)を利用

  • Dockerを利用してplanemoを使う
    • Dockerの利用環境は既に構築されているものとする
    • イメージの取得�(理研の石井さんが提供しているイメージを利用)

$ docker pull manabuishii/docker-planemo:0.55.0

planemo lint で構文チェック

> planemo lint 作成したxml

planemo testでインターフェイスのチェック

> planemo test 作成したxml

planemo でツールを組み込んだサーバーを起動して最終確認

> planemo serve 作成したxml

planemoでtoolshedに登録

68

#iibmp2018, #usegalaxy @pitagora_meetup

69 of 160

Planemoの利用方法(docker)を利用

  • planemoのDockerコンテナを起動する

> docker run \

--entrypoint /bin/bash \

--rm \

--privileged=true \

-p 8010:80 \

-p 9090:9090 \

-v /var/run/docker.sock:/var/run/docker.sock \

-v `pwd`:/opt/galaxy/tools \

-i \

-t \

\manabuishii/docker-planemo:0.55.0

69

#iibmp2018, #usegalaxy @pitagora_meetup

70 of 160

Planemoの利用方法(docker)を利用

  • コンテナ内でDocker環境を構築

# apt-get update -y

# apt-get install -y \

apt-transport-https \

ca-certificates \

curl \

gnupg2 \

software-properties-common

# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

# add-apt-repository \

"deb [arch=amd64] https://download.docker.com/linux/debian \

$(lsb_release -cs) \

stable"

# apt-get update

# apt-get install -y docker-ce

70

#iibmp2018, #usegalaxy @pitagora_meetup

71 of 160

Planemoの利用方法(docker)を利用

planemo lint で構文チェック

> planemo lint 作成したxml

# planemo lint ./randomlines.xml

Linting tool /opt/galaxy/tools/mytools/randomlines.xml

Applying linter tests... CHECK

.. CHECK: 2 test(s) found.

Applying linter stdio... CHECK

.. INFO: No stdio definition found, tool indicates error conditions with output written to stderr.

Applying linter output... CHECK

.. INFO: 1 outputs found.

Applying linter inputs... CHECK

.. INFO: Found 4 input parameters.

Applying linter help... CHECK

.. CHECK: Tool contains help section.

.. CHECK: Help contains valid reStructuredText.

Applying linter general... CHECK

.. CHECK: Tool defines a version [2.0.1].

.. CHECK: Tool defines a name [Select random lines].

.. CHECK: Tool defines an id [random_lines1].

.. CHECK: Tool targets 16.01 Galaxy profile.

Applying linter command... CHECK

.. INFO: Command uses deprecated 'interpreter' attribute.

.. INFO: Tool contains a command with interpreter of type [python].

Applying linter tool_xsd... CHECK

.. INFO: File validates against XML schema.

71

#iibmp2018, #usegalaxy @pitagora_meetup

72 of 160

Planemoの利用方法(docker)を利用

planemo testでインターフェイスのチェック

> planemo test 作成したxml

# planemo test randomlines.xml

All 2 test(s) executed passed.

random_lines1[0]: passed

random_lines1[1]: passed

一度 planemo testを実行した後はこのplanemoの

コンテナイメージを保存すると幸せになれる

72

#iibmp2018, #usegalaxy @pitagora_meetup

73 of 160

Planemoの利用方法(docker)を利用

planemo testでインターフェイスのチェック

73

#iibmp2018, #usegalaxy @pitagora_meetup

74 of 160

Planemoの利用方法(docker)を利用

planemo でツールを組み込んだサーバーを起動して最終確認

> planemo serve --host=0.0.0.0 ./randomlines.xml

74

#iibmp2018, #usegalaxy @pitagora_meetup

75 of 160

Planemoの利用方法(docker)を利用

xmlを変更して左側のToolのリンクをクリックすることで、すぐにインターフェイスの変更を確認できる

75

#iibmp2018, #usegalaxy @pitagora_meetup

76 of 160

もしPlanemoが無かったら

  • ひたすら面倒...
    • XMLの誤りをチェックするのに手間がかかる
    • インターフェイスをチェックするのにGalaxyを再起動しなくてはならない

76

#iibmp2018, #usegalaxy @pitagora_meetup

77 of 160

Planemoについて

***上記のページ内のリンクが切れている部分があるので注意

77

#iibmp2018, #usegalaxy @pitagora_meetup

78 of 160

変異解析パイプラインを Galaxy Docker で提供する

国立研究開発法人産業技術総合研究所

人工知能研究センター 機械学習研究チーム

新海典夫

iibmp2018

#iibmp2018, #usegalaxy @pitagora_meetup

79 of 160

話す内容

  • galaxy-dockerに自作wrapper等を突っ込もうとして実装に苦労した話
    • BAMを食べない
      • unsorted_bamをgalaxyが拒絶することが原因だった
    • 止めたGalaxy Dockerをもう一度動かそうとすると動かない
      • 実際の配布どうしよう…などと迷う
    • GATK4がopen-javaでダメだったりcondaで色々とインストールを要求したりと…
  • その辺り実際にどうやったか、というかその際に実際にどう苦労したか等を話す予定?

#iibmp2018, #usegalaxy @pitagora_meetup

80 of 160

今日話すこと

  • Docker-galaxy環境で作成wrapperによる変異解析パイプラインを作成する際の作業ログ
  • 色々と試行錯誤したので、その情報をご提供して皆様のご参考になれば…。
  • (重要)結論としては上手くいきました。

80

#iibmp2018, #usegalaxy @pitagora_meetup

81 of 160

やってること/やりたいこと

  • やってること
    • 他所から預かった配列データを解析
    • Fastqをマッピングして変異にコールして…
    • 返却物としては変異リスト(vcf)等
  • やりたいこと
    • 共同研究先等でも直接パイプラインを試せるようにしたい
    • 先方のPC/サーバーに解析環境を比較的容易に導入して、デフォルトでのfastqから変異候補出力までを行えるようにしたい
    • 試してもらう、という用途の他に、個人情報保護でデータを持ち出せない時への対応等も想定

81

#iibmp2018, #usegalaxy @pitagora_meetup

82 of 160

選択肢:galaxy on docker

  • GalaxyはGUIでパイプラインを動かせる
  • Dockerならオーバーヘッドも少ない状況で、環境を移植しやすいのでは…?

82

#iibmp2018, #usegalaxy @pitagora_meetup

83 of 160

どうやって実装?

  • galaxy project公式によりdocker版galaxyの環境は提供
  • ここに実際に運用しているパイプラインを突っ込む

83

#iibmp2018, #usegalaxy @pitagora_meetup

84 of 160

実装の為の手順

  1. 作成済みパイプラインをgalaxy環境で動くようにする
    • 必要な各ツールのwrapperを作成
    • それを組み合わせてパイプラインに
  2. dockerの形で提供可能な、ポータブルなものにする
    • HDDでデータ一式をコピーすれば実行可能なかたちに

84

#iibmp2018, #usegalaxy @pitagora_meetup

85 of 160

実装の為の手順

  • 作成済みパイプラインをgalaxy環境で動くようにする
    • 必要な各ツールのwrapperを作成
    • それを組み合わせてパイプラインに
  • dockerの形で提供可能な、ポータブルなものにする
    • HDDでデータ一式をコピーすれば実行可能なかたちに

…と考えていましたがそれぞれの段階で色々と苦労しました。

85

#iibmp2018, #usegalaxy @pitagora_meetup

86 of 160

galaxy環境に関して発生した問題その1

  • bamを食べない
    • Galaxy公式でもbwaは提供されていたが、細かなオプション等の問題があったため、自作でfastq→sorted.bamのwrapperを実装
    • だがエラーを吐く�

[samopen] SAM header is present: 24 sequences.

[E::hts_idx_push] Unsorted positions on sequence #2: 26499387 followed by 24745767

86

#iibmp2018, #usegalaxy @pitagora_meetup

87 of 160

galaxy環境に関して発生した問題その1

  • 原因:unsorted bamをgalaxyがbamとして受け入れない。丁寧に「これはbamとして間違っている」といって止めてしまう

87

#iibmp2018, #usegalaxy @pitagora_meetup

88 of 160

galaxy環境に関して発生した問題その1

  • 原因:unsorted bamをgalaxyがbamとして受け入れない。丁寧に「これはbamとして間違っている」といって止めてしまう

88

#iibmp2018, #usegalaxy @pitagora_meetup

89 of 160

galaxy環境に関して発生した問題その1

  • 対応:mapping→sort→indexを一つのwrapperにして、galaxyに中身を触らせない

89

#iibmp2018, #usegalaxy @pitagora_meetup

90 of 160

galaxy環境に関して発生した問題その2

  • gatk4が動かない
    • そもそもgatk4は要求環境がそれなりに厳しく、動かすだけでも多少苦労する
    • 公式の掲示板でも環境についてのやりとりが時々繰り返されている
  • 原因:要求環境
    • Gatk4はpython3+それなりに突っ込んだパッケージを要求
    • ついでにjavaもoracle-javaのみを要求(当時)

90

#iibmp2018, #usegalaxy @pitagora_meetup

91 of 160

galaxy環境に関して発生した問題その2

  • GATK4を動かす為の手順(python3)
    • minicondaをインストール
    • gatk4に同梱されている”gatkcondaenv.yml”を用いて必要パッケージをインストール
      • 具体的には、condaをインストールした上で以下の作業が必要になる

#install miniconda

$conda env create -n gatk -f /path/to/gatkcondaenv.yml

$source activate gatk

91

#iibmp2018, #usegalaxy @pitagora_meetup

92 of 160

galaxy環境に関して発生した問題その2

  • 対応:docker-galaxyの中身のpythonを、minicondaを後からインストールして入れ替えてしまう
    • そのうえで必要なものを突っ込む
  • その他java等も適宜必要なものに差し替える

92

#iibmp2018, #usegalaxy @pitagora_meetup

93 of 160

とりあえず実際に動作するgalaxy-docker-containerは用意できた→問題2(galaxy-dockerの問題)

  • じゃあこれをcommitして、新しいdocker imageを作成すれば、ポータブルにコピーができる!
    • だけど…、docker exportしたものが再起動しない
    • 正確に言えば、再起動はするが、galaxyがどうあっても動かない

"/galaxy_venv/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 130, in connect

conn = _connect(dsn, connection_factory=connection_factory, **kwasync)

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused

Is the server running on host "localhost" (127.0.0.1) and accepting

TCP/IP connections on port 5432?

could not connect to server: Cannot assign requested address

Is the server running on host "localhost" (::1) and accepting

TCP/IP connections on port 5432?

(Background on this error at: http://sqlalche.me/e/e3q8)

こんなエラーを延々と吐き続ける

93

#iibmp2018, #usegalaxy @pitagora_meetup

94 of 160

とりあえず実際に動作するgalaxy-docker-containerは用意できた→問題2(galaxy-dockerの問題)

  • はじめは、フォルダ構造等の問題を疑ったりもしたが…
    • しばらく調べて分かったのが、一度起動したgalaxy-docker-mageは、commitしてimage化したものからは、galaxyが再起動しない。(未変更でも)

公式galaxy-docker image

commit

galaxy-docker container

run

新galaxy-docker image

94

#iibmp2018, #usegalaxy @pitagora_meetup

95 of 160

とりあえず実際に動作するgalaxy-docker-containerは用意できた→問題2(galaxy-dockerの問題)

  • そもそも、公式のdocker imageは、データ処理ディレクトリ(作業及びログ保存ディレクトリ)を別に指定するように求めており、これにより、galaxy-docker本体はcommitせずとも、データ処理ログ等を残せるようにしていた。
    • (推測:公式はentry pointの管理とかの煩雑さからこのような方法を取っている?)

公式galaxy-docker image

galaxy-docker container

run

DATA

CONTAINER

こちらだけを維持

こちらはRUNの度に新しく�container作成

95

#iibmp2018, #usegalaxy @pitagora_meetup

96 of 160

対応:docker buildで一から作る

  • Dockerfileを使用してbuildすれば、

「galaxyの起動前に」galaxy-dockerの中身に手を加えたimageを作成できる。

公式galaxy-docker image

galaxy-docker container

run

DATA

CONTAINER

build

カスタマイズgalaxy-docker image

96

#iibmp2018, #usegalaxy @pitagora_meetup

97 of 160

実際のDockerfileの中身

#java

#sudo tar xvfo /local_tools/tools/java/jdk-8u172-linux-x64.tar.gz

RUN mkdir -p /usr/lib/jvm

ADD ./jdk-8u172-linux-x64.tar.gz /usr/lib/jvm

RUN ln -s /usr/lib/jvm/jdk1.8.0_172 /usr/lib/jvm/java-8-oracle-amd64

#conda install and source activate gatk

ENV MINICONDA Miniconda3-latest-Linux-x86_64.sh

RUN mkdir -p /dockerbuild_tmp

WORKDIR /dockerbuild_tmp

COPY gatkcondaenv.yml /dockerbuild_tmp/

COPY gatkPythonPackageArchive.zip /dockerbuild_tmp/

RUN wget --quiet https://repo.continuum.io/miniconda/$MINICONDA && \

bash $MINICONDA -b && \

rm $MINICONDA && \

export PATH="/home/galaxy/miniconda3/bin:$PATH" && \

conda install -y conda && \

conda update -y conda && \

conda env create -f gatkcondaenv.yml

 #local_tool copy

 ADD ./local_tools_data.tar.gz /

 #local_reference_and_test_data_copy

 ADD ./test_data_set.tar.gz /

oracle-javaを導入

minicondaをダウンロード

gatkcondaenv.yml を内部にコピー�↓�それをminicondaに�読み込ませる

必要なツール、及びそのwrapper、レファレンスを内部にコピー

97

#iibmp2018, #usegalaxy @pitagora_meetup

98 of 160

まとめ

  • ポータブルなgalaxy上のパイプライン環境を作成
  • 色々と苦労したが動く(容易に環境が移せる)�ものはできました
  • 今後:内部ツールのdocker化(docker in docker)によるよりシンプルな環境の構築

98

#iibmp2018, #usegalaxy @pitagora_meetup

99 of 160

こんな感じに実装できました。

99

#iibmp2018, #usegalaxy @pitagora_meetup

100 of 160

作成した Galaxy の�ワークフローを共有

山中遼太

オラクル・タイランド

Pitagora is � your friendly � neighbourhood!

iibmp2018

#iibmp2018, #usegalaxy @pitagora_meetup

101 of 160

それでも共有できない!

  • 私のツールは、
    • Docker で動くようになった!
    • Galaxy からも使えるようになった!
    • Tool Shed にも登録した!

  • では、Galaxy でワークフローを�共有できるようになったのか…

Galaxy

XML

Docker

Tool

101

#iibmp2018, #usegalaxy @pitagora_meetup

102 of 160

それでも共有できない!

  • ワークフローに必要なツールやリファレンスがちゃんとインストールされればいいわけだが

  動かない事件が多発!

 (チュートリアルさえ…)

  • その原因は:� ワークフローがテスト� されているわけではない!

Galaxy

1

2

3

102

#iibmp2018, #usegalaxy @pitagora_meetup

103 of 160

それでも共有できない!

  • 対処として:
    • ワークフローのテストの仕組みを�考えることはおいおい重要だが、
    • まずは同じ環境でワークフローの�開発と配布しよう

   

    それが、ピタゴラ ▶

Galaxy

1

2

3

103

#iibmp2018, #usegalaxy @pitagora_meetup

104 of 160

ピタゴラでワークフローを共有

  • 提案していたフロー
    • ピタゴラ Galaxy VM を入手する
    • その上で自分のワークフローをテストする
    • 動作確認したらワークフローを共有する

    • 必要なツールのリストも…?
    • テスト用のデータも…?

Galaxy

1

2

3

104

#iibmp2018, #usegalaxy @pitagora_meetup

105 of 160

ピタゴラでワークフローを共有

  • VM でやってみた結果
    • ワークフローの収集が必要!(負担が集中)
    • ツールの収集も結局必要!
    • 再度テストも必要!

    • VM のサイズが肥大…

Galaxy

1

2

3

1

2

3

1

2

3

1

2

3

105

#iibmp2018, #usegalaxy @pitagora_meetup

106 of 160

今後はこうしてみます

  • 提案するフロー

1. Docker イメージを作成して公開

2. Galaxy ツール化(XML作成)して公開�3. Galaxy ワークフローを作成して公開�  → 公開する場所(GitHub, Wiki)を提供

106

#iibmp2018, #usegalaxy @pitagora_meetup

107 of 160

今後はこうしてみます

  • 提案するフロー 
    • ピタゴラ Galaxy Docker イメージ 公開
    • ここでワークフローを実行すると、�ツールがインストールされる!(理研 石井さん)

Galaxy

1

2

3

1

2

3

107

#iibmp2018, #usegalaxy @pitagora_meetup

108 of 160

クラウド環境で

Galaxyを利用する

株式会社アスケイド

那須野 淳

iibmp2018

#iibmp2018, #usegalaxy @pitagora_meetup

109 of 160

「クラウドとは何か?」について再確認

  • オンデマンドセルフサービス (On-demand self-service)
  • 幅広いネットワーク経由のアクセス (Broad network access)
  • リソースの共用 (Resource pooling)
  • 迅速な伸縮性 (Rapid elasticity)
  • 計測されるサービス (Measured Service)

クラウドコンピューティングは、共用の構成可能なコンピューティングリソース(ネットワーク、サーバー、ストレージ、アプリケーション、サービス)の集積に、どこからでも、簡便に、必要に応じて、�ネットワーク経由でアクセスすることを可能とするモデルであり、�最小限の利用手続きまたはサービスプロバイダとのやりとりで速やかに割当てられ提供されるものである。

IPA(2011) NIST* によるクラウドコンピューティングの定義 https://www.ipa.go.jp/files/000025366.pdf

* アメリカ国立標準技術研究所� National Institute of Standards and Technology: NIST

109

#iibmp2018, #usegalaxy @pitagora_meetup

110 of 160

Galaxy の主な利用形態

  • Public Galaxy サーバ
    • 世界中の様々な機関により提供されている無料ですぐに利用可能なGalaxyが多数あります!
    • 使いたいツールがあればこれで事足りる?
  • 専用サーバ
    • オンプレミス* … 自組織内設備として構築・運用
    • クラウド … Public Cloud に構築、� インターネット経由で利用
  • 研究者個人のPC
    • Mac で動きます! でも複数ユーザ利用は困難...

* On-Premises: premise は構内の意。クラウドと対比する従来型システム形態を表現する言葉として利用される。

110

#iibmp2018, #usegalaxy @pitagora_meetup

111 of 160

Galaxy をクラウド環境で使う理由は?

  • Galaxyのセットアップに時間をかけたくない

.。oO ネットワーク周りとかインフラ構築で悩むのは本末転倒だ…

  • 新しいツールやゲノムリファレンスデータを使ってGalaxyをカスタマイズする必要がある

.。oO 独自のツールを自由にインストールしたい…

  • 公共Galaxyサーバ利用のクォータに達した

.。oO ディスク容量制限に引っかかった…

  • コンピューティング、ストレージリソースへの可変または高い要件がある

.。oO あのツールはかなりのメモリを食うし…

111

#iibmp2018, #usegalaxy @pitagora_meetup

112 of 160

クラウド利用時の気になる点 (1)

  • 利用コストの観点 (Compute)

例えば、HISAT2→Cufflinks のような一般的なワークフロー実行時の�クラウド料金 (AWS EC2 M5/C5/R5, us-east-1) を可視化してみると…

入力データ: ERR204893

Paired RNA-Seq

HiSeq 2000

10,234,883 read

112

#iibmp2018, #usegalaxy @pitagora_meetup

113 of 160

クラウド利用時の気になる点 (2)

  • 利用コストの観点 (Network, Storage)
    • データ転送量
      • 主な Public Cloud では、データのアップロードには通常は課金されない。
      • 最終的なoutputデータが小さければダウンロードにかかるコストも抑えられる。�中間ファイルは破棄するなどの工夫もあるか?
    • ストレージ容量
      • ブロックストレージへの課金は意識しておく。
      • 例: 1TBディスクを1ヶ月放置すると約100USD�(AWS EBSの場合)

113

#iibmp2018, #usegalaxy @pitagora_meetup

114 of 160

クラウド / オンプレミス どちらでも…

  • 運用コストの観点

複数ユーザで利用する場合、組織の運用ポリシーに沿ったインフラ管理が�求められます。

    • バックアップ(実施タイミング、保存期間、保存場所)
    • OS、ライブラリ等の(セキュリティ)アップデート
    • Galaxy ツールの追加インストール、アップデート
    • モニタリング・監視
    • インシデント対応
    • ユーザ管理(追加、削除)

etc ...

114

#iibmp2018, #usegalaxy @pitagora_meetup

115 of 160

クラウド環境にGalaxyをどう構築する?

手段の選択肢が多いので、悩みますよね。

  1. ソースコードを取得、All-in-One 構成で起動

⇒ インストールされるツールは最小限、� 実運用のためには多くの設定変更 (DBMS, HTTP Server など) が必須。

  • 構成管理ツールを利用
  • Galaxy CloudMan
  • Docker Galaxy
  • その他

git clone -b master https://github.com/galaxyproject/galaxy.git

cd galaxy && sh run.sh

115

#iibmp2018, #usegalaxy @pitagora_meetup

116 of 160

構成管理ツールによるセットアップ

  • Ansibleによる構築方法は Galaxy Training! * にも紹介されています。

  • プロダクション環境のサーバ構成 (postgresql, nginx, slurm)
  • 多数の実用的なツール、ワークフローのインストールまで自動化�(ToolShedからインストールするための Ansible role を内包)

git clone https://github.com/ARTbio/GalaxyKickStart.git

cd GalaxyKickStart/

ansible-galaxy install -r requirements_roles.yml -p roles

ansible-playbook \

--inventory-file inventory_files/galaxy-kickstart galaxy.yml

* http://galaxyproject.github.io/training-material/

> Galaxy Server administration > Ansible

116

#iibmp2018, #usegalaxy @pitagora_meetup

117 of 160

Galaxy CloudMan

  • Webブラウザだけでクラスタ構成のGalaxyを�手軽にデプロイ可能
    • プロダクション用に事前設定されたサーバ構成
    • Auto-Scaling 可能 (“worker” nodes 増減)
    • NGS解析関連の一般的なツールがインストール済
  • 現在は AWS のみ対応
    • 次期バージョンで GCP、Azure なども追加予定
    • 最新AMI (Galaxy CloudMan 161101b2) は直接�EC2コンソールから起動しても使えない!�⇒ CloudLaunch* で開始することが前提

117

#iibmp2018, #usegalaxy @pitagora_meetup

118 of 160

CloudLaunch の利用手順

CatalogからCloudManを選択

AWSリージョン選択および�クレデンシャル情報の入力

AWSインスタンスタイプ指定�“LAUNCH” 実行

“RUNNING” 状態で構築完了�クラスタ管理用UIのURL表示

クラスタ構成管理用コンソール

Galaxy Web UI

118

#iibmp2018, #usegalaxy @pitagora_meetup

119 of 160

Docker Galaxy

  • Galaxyサーバ自体をコンテナで動かす
    • Galaxy開発メンバーの Björn Grüning 氏が�コンテナイメージを作成 (galaxy-stable*)
    • 手元のPCで試した環境と同じものをクラウドへ
    • プロダクション用に事前設定済みだが、変更もOK

フレーバーの組み合わせは自在。

119

#iibmp2018, #usegalaxy @pitagora_meetup

120 of 160

学認クラウドオンデマンド構築サービス

NII :国立情報学研究所では10月から本運用を開始します!

  • SINET L2VPNでのクラウド接続を支援 (AWS, Azure など)
  • クラウドの差異を吸収した制御インタフェースを提供
  • アプリケーション構築手順書の共有で環境構築支援 (Galaxy など)�

ご興味のある方は vcp@nii.ac.jp まで。

120

#iibmp2018, #usegalaxy @pitagora_meetup

121 of 160

関連サイト

⇒ 特に “Deployment and Platform options” のスライドは� クラウド利用を検討する際の参考になる。

121

#iibmp2018, #usegalaxy @pitagora_meetup

122 of 160

ワークフローを

Common Workflow Language で記述する

丹生 智也 (Tomoya Tanjo)

国立情報学研究所

クラウド基盤研究開発センター

Pitagora is �your friendly neighbourhood!

iibmp2018

#iibmp2018, #usegalaxy @pitagora_meetup

123 of 160

できるようになったこと

  • ツールを Docker 化してポータブルにする
  • Galaxy からツールを利用できるようにする
  • Galaxy でワークフローを作成・共有する
  • クラウド上に Galaxy 環境を構築する
  • 世界に平和が訪れ、みんながワークフローを

共有できるように…

123

#iibmp2018, #usegalaxy @pitagora_meetup

124 of 160

「俺のワークフローエンジンで動くの?」

  • 突然襲いかかるワークフローエンジン間の

ポータビリティ

124

#iibmp2018, #usegalaxy @pitagora_meetup

125 of 160

ツールはポータブル。ワークフローは?

  • Galaxy で作ったワークフローは、

他のワークフローエンジンでは動かない

    • 定義ファイルはエンジンごとに異なる
    • つらい
  • どこでも動くワークフローは書けないの?

125

#iibmp2018, #usegalaxy @pitagora_meetup

126 of 160

書けるよ!

126

#iibmp2018, #usegalaxy @pitagora_meetup

127 of 160

Common Workflow Language (CWL)

  • ワークフローやツール定義を記述する言語
    • ツール設定の記述にも使われるYAMLがベース
  • 仕様がオープン
    • https://www.commonwl.org
  • 複数のワークフローエンジンでサポート
  • コミッタの約6%が日本人 (4/70)
    • この場所にも2人います

127

#iibmp2018, #usegalaxy @pitagora_meetup

128 of 160

つまり

CWLで書けばどのエンジンでも

同じワークフローが動く(はず)!

他の人に渡すときも…

128

#iibmp2018, #usegalaxy @pitagora_meetup

129 of 160

ワークフローを共有しない人は

  • Q. CWL で書くと何が嬉しいの?

129

#iibmp2018, #usegalaxy @pitagora_meetup

130 of 160

ワークフローを共有しない人は

  • Q. CWL で書くと何が嬉しいの?
  • A. 用途に応じて好きなエンジンを使える!
    • ワークフローはそのまま、利点のみ得られる
    • CWLEXEC
      • IBM LSF と連携して、失敗時により大きなメモリで再実行
    • hotsub (https://hotsub.github.io)
      • 自動でクラウド上に環境を作って実行し、結果だけ取得
    • cwltool + CWL-metrics (https://inutano.github.io/cwl-metrics/)
      • 実行時の情報を収集して活用

130

#iibmp2018, #usegalaxy @pitagora_meetup

131 of 160

早速書いて…

class: CommandLineTool

cwlVersion: v1.0

baseCommand: cat

inputs:

- id: file

type: File

inputBinding:

position: 0

outputs:

- id: output

type: stdout

stdout: output.txt

class: Workflow

cwlVersion: v1.0

inputs:

- id: inp

type: File

outputs:

- id: output

type: File

outputSource: sort/output

steps:

- id: cat

run: cat.cwl

in:

- id: file

source: inp

out: [output]

- id: sort

run: sort.cwl

in:

- id: file

source: cat/output

out: [output]

ワークフロー定義

ツール定義

131

#iibmp2018, #usegalaxy @pitagora_meetup

132 of 160

書きたくない…

  • Q. CWL を書くのは大変そう…

132

#iibmp2018, #usegalaxy @pitagora_meetup

133 of 160

書きたくない!!!

  • Q. CWL を書くのは大変そう…
  • A. 手で書くのは20世紀まで!

これからは GUI の時代!!

133

#iibmp2018, #usegalaxy @pitagora_meetup

134 of 160

GUI で CWL を作成

  • Rabix composer (Windows、Linux、Mac 対応)
    • GUI でツール定義やワークフロー定義を書ける
    • 組み込みのエンジンで実行もできる

134

#iibmp2018, #usegalaxy @pitagora_meetup

135 of 160

おまけ: 玄人向け

  • 既存のエディタ・IDE 用の編集モードもある
    • Atom
    • Emacs
    • Gedit
    • IntelliJ
    • Vim
    • VisualStudio Code

135

#iibmp2018, #usegalaxy @pitagora_meetup

136 of 160

まとめ

  • CWL でワークフローを書くと
  • いろんなエンジンで動かせるので
  • 世界に平和が訪れる!

  • 注意
    • サポート状況が不完全なエンジンもあります
      • e.g. Galaxy ではまだアルファ版
      • 温かく見守りましょう

136

#iibmp2018, #usegalaxy @pitagora_meetup

137 of 160

まとめ

  • CWL でワークフローを書くと
  • いろんなエンジンで動かせるので
  • 世界に平和が訪れる!

  • 注意
    • サポート状況が不完全なエンジンもあります
      • e.g. Galaxy ではまだアルファ版
      • 温かく見守りましょう
      • 今ならあなたもコミッタに!

137

#iibmp2018, #usegalaxy @pitagora_meetup

138 of 160

関連リンク

  • Common Workflow Language (公式サイト)
    • https://www.commonwl.org
    • 対応エンジンや関連ツールも載っている
  • CWL User Guide
  • はじめての CWL (日本語)
  • ピタゴラ提供のツール・ワークフロー定義

138

#iibmp2018, #usegalaxy @pitagora_meetup

139 of 160

使い捨てクラウドで

「今日だけ」

そのワークフローを試す方法

国立がん研究センター

落合 展

iibmp2018

#iibmp2018, #usegalaxy @pitagora_meetup

140 of 160

共通規格で書かれたWorkflow

Common Workflow Language

140

#iibmp2018, #usegalaxy @pitagora_meetup

141 of 160

を、ちょっと試したい

Common Workflow Language

141

#iibmp2018, #usegalaxy @pitagora_meetup

142 of 160

バイオインフォマティクスにおける

「ちょっと試したい」のジレンマ

142

#iibmp2018, #usegalaxy @pitagora_meetup

143 of 160

バイオインフォマティクスにおける

「ちょっと試したい」のジレンマ

143

#iibmp2018, #usegalaxy @pitagora_meetup

144 of 160

バイオインフォマティクスにおける

「ちょっと試したい」のジレンマ

144

#iibmp2018, #usegalaxy @pitagora_meetup

145 of 160

クラウドでちょっと試すのわりと良いと思います

145

#iibmp2018, #usegalaxy @pitagora_meetup

146 of 160

コンピューティングリソースの選択

永続的

一時的

データサイズ小

データサイズ大

自分の

ローカル環境

自分の

ローカルに作ったVM

オンプレミス

HPC環境

パブリック

クラウドサービス

146

#iibmp2018, #usegalaxy @pitagora_meetup

147 of 160

プラットフォームの選択

有料

無料

オンプレミス

クラウド

スパコンの

使用契約

自前で

スパコン持ってる

(ローカル?)

パブリック

クラウドサービス

Galaxy

147

#iibmp2018, #usegalaxy @pitagora_meetup

148 of 160

課金モデルの選択

高頻度

低頻度

小規模並列

大規模並列

Galaxy

オンプレミス

HPC環境

パブリック

クラウドサービス

パブリック

クラウドサービス

148

#iibmp2018, #usegalaxy @pitagora_meetup

149 of 160

コミュニティの選択

プラグインや拡張の実装が

活発

技術として

いい意味で枯れてる

相談できるひとがいない

相談できる

149

#iibmp2018, #usegalaxy @pitagora_meetup

150 of 160

「クラウド上でちょっとだけやる」方法

あるある

  1. ファイアウォールの設定して
  2. インスタンスつくって
  3. sshして
  4. apt-get install して
  5. ツールのソースダウンロードして
  6. makeして
  7. 手元のサンプルをアップロードして
  8. どこぞのリファレンスをダウンロードして
  9. 動かない

150

#iibmp2018, #usegalaxy @pitagora_meetup

151 of 160

BOF的には

このへんで終わるのがいいと思います

151

#iibmp2018, #usegalaxy @pitagora_meetup

152 of 160

「クラウドでちょっとやる」エンジン

「hotsub」の紹介

$ hotsub run \

--cwl star-alignment.cwl \

--cwl-job sample_01.json \

--cwl-out s3://my-bucket/cwl-star

152

#iibmp2018, #usegalaxy @pitagora_meetup

153 of 160

「クラウドでちょっとやる」エンジン

「hotsub」の紹介

$ hotsub run \

--cwl star-alignment.cwl \

--cwl-job sample_01.json \

--cwl-out s3://my-bucket/cwl-star

153

#iibmp2018, #usegalaxy @pitagora_meetup

154 of 160

「クラウドでちょっとやる」エンジン

「hotsub」の紹介

$ hotsub run \

--cwl star-alignment.cwl \

--cwl-job sample_01.json \

--cwl-out s3://my-bucket/cwl-star

154

#iibmp2018, #usegalaxy @pitagora_meetup

155 of 160

「クラウドでちょっとやる」エンジン

「hotsub」の紹介

$ hotsub run \

--cwl star-alignment.cwl \

--cwl-job sample_01.json \

--cwl-out s3://my-bucket/cwl-star

155

#iibmp2018, #usegalaxy @pitagora_meetup

156 of 160

「クラウドでちょっとやる」エンジン

「hotsub」の紹介

$ hotsub run \

--cwl star-alignment.cwl \

--cwl-job sample_01.json \

--cwl-out s3://my-bucket/cwl-star

156

#iibmp2018, #usegalaxy @pitagora_meetup

157 of 160

「クラウドでちょっとやる」エンジン

「hotsub」の紹介

$ hotsub run \

--cwl star-alignment.cwl \

--cwl-job sample_01.json \

--cwl-out s3://my-bucket/cwl-star

157

#iibmp2018, #usegalaxy @pitagora_meetup

158 of 160

「クラウドでちょっとやる」エンジン

「hotsub」の紹介

$ hotsub run \

--cwl star-alignment.cwl \

--cwl-job sample_01.json \

--cwl-out s3://my-bucket/cwl-star

158

#iibmp2018, #usegalaxy @pitagora_meetup

159 of 160

「クラウドでちょっとやる」エンジン

「hotsub」の紹介(P-69)

$ hotsub run \

--cwl star-alignment.cwl \

--cwl-job sample_01.json \

--cwl-out s3://my-bucket/cwl-star

159

#iibmp2018, #usegalaxy @pitagora_meetup

160 of 160

twitter はじめました

ID: @pitagora_meetup

hashtag: #iibmp2018, #usegalaxy

講演中の質問・感想も大歓迎です!

スライドも後日公開予定です

160

#iibmp2018, #usegalaxy @pitagora_meetup