CWL の requirements 一巡り: SoftwareRequirement
この記事は CWL Advent Calendar 2020 の9日目の記事です。
Common Workflow Language (CWL) では、ワークフロー実行処理系が満たさなければならない機能以外にも、Process requirements と呼ばれる optional features についても標準化が行われています[1]。
今回は CWL v1.2 で定義されている SoftwareRequirement
について簡単な解説を行います。また、各サンプルは可能な限り公式の準拠度テストで用いられているファイルを引用します。
対象読者
- CWL をかじったことがあるけど
requirements
はよくわからない人- つまり中級者以上が対象です。
- 初心者は CWL Advent Calendar 2020 の初日の記事へ Go!
例
準拠度テストには SoftwareRequirement
を使用したテストが存在しないため、User Guide の例を紹介します。
User Guide: Specifying Software Requirements: custom-types.cwl
cwlVersion: v1.0
class: CommandLineTool
label: "InterProScan: protein sequence classifier"
doc: |
Version 5.21-60 can be downloaded here:
https://github.com/ebi-pf-team/interproscan/wiki/HowToDownload
Documentation on how to run InterProScan 5 can be found here:
https://github.com/ebi-pf-team/interproscan/wiki/HowToRun
requirements:
ResourceRequirement:
ramMin: 10240
coresMin: 3
SchemaDefRequirement:
types:
- $import: InterProScan-apps.yml
hints:
SoftwareRequirement:
packages:
interproscan:
specs: [ "https://identifiers.org/rrid/RRID:SCR_005829" ]
version: [ "5.21-60" ]
inputs:
proteinFile:
type: File
inputBinding:
prefix: --input
applications:
type: InterProScan-apps.yml#apps[]?
inputBinding:
itemSeparator: ','
prefix: --applications
baseCommand: interproscan.sh
arguments:
- valueFrom: $(inputs.proteinFile.nameroot).i5_annotations
prefix: --outfile
- valueFrom: TSV
prefix: --formats
- --disable-precalc
- --goterms
- --pathways
- valueFrom: $(runtime.tmpdir)
prefix: --tempdir
outputs:
i5Annotations:
type: File
format: iana:text/tab-separated-values
outputBinding:
glob: $(inputs.proteinFile.nameroot).i5_annotations
$namespaces:
iana: https://www.iana.org/assignments/media-types/
s: https://schema.org/
$schemas:
- http://schema.org/version/9.0/schemaorg-current-http.rdf
s:license: https://spdx.org/licenses/Apache-2.0
s:copyrightHolder: "EMBL - European Bioinformatics Institute"
それなりに大きな CWL ファイルですが、今回の説明に必要なのは以下の部分だけです。
hints:
SoftwareRequirement:
packages:
interproscan:
specs: [ "https://identifiers.org/rrid/RRID:SCR_005829" ]
version: [ "5.21-60" ]
SoftwareRequirement
にツールの情報を記述することで、実行処理系の実行前に自動的にソフトウェアをインストールさせることが可能になります。上の例の場合、ツール実行に必要なのは InterProScan
というツールのバージョン 5.21-60 であることがわかります。
CWL のリファレンス実装である cwltool の場合、--beta-dependency-resolvers-configuration
や --beta-conda-dependencies
オプションを使用することで、SoftwareRequirement
に書かれたパッケージやモジュールのインストールや有効可が行われます[2]。
重要なのは、上記オプションを用いた場合、パッケージのインストールやモジュールの有効化という破壊的変更が実行環境に対して行われることです。そのため、実行前に動いていた別のソフトウェアが動かなくなる可能性があります(他のツールの動作に必要なパッケージも依存関係に巻き込まれてアップデートされる可能性があるため)。この挙動は再現性という点では望ましくないため、通常は DockerRequirement
などのコンテナを使ったツール実行をおすすめします。
SoftwareRequirement の使い所
多くの場合、SoftwareRequirement
を使ってツールを破壊的にインストールするよりも、DockerRequirement
を使ってコンテナ上でツールを動かすほうが適切です。
一方で SoftwareRequirement
でなければ対応できない状況もあります。具体的には以下の状況です。
- コンテナを利用したツール実行ができない
-
docker
やpodman
、singularity
などのコンテナランタイムの実行が制限された環境、ということです。
-
- 「あらかじめ必要なツールをインストールしたマシンを用意し、そこでワークフローを実行する」という手段も取れず、ワークフロー実行時に必要なツールもインストールする必要がある
例えば、コンテナがサポートされていない計算機クラスター(スパコンなど)にワークフローを動かすジョブを投入する、という状況がこれに該当します。この場合、SoftwareRequirement
に必要なツール情報を記述しておくことで、ワークフロー実行に必要なツールのインストール等のスクリプトを自分で書く必要がなくなり、また同一クラスターでのワークフローの再現性を確保することが容易になります。
-
つまり、Process requiremens を含むワークフローやツール定義は、全ての CWL 準拠のワークフロー実行処理系で動かせるわけではありません。詳細は別記事を参照してください。 ↩︎
-
詳細は cwltool のドキュメントを確認してください。 ↩︎
Discussion