🐓

CWL の requirements 一巡り: ResourceRequirement

2020/12/17に公開

この記事は CWL Advent Calendar 2020 の22日目の記事です。

Common Workflow Language (CWL) では、ワークフロー実行処理系が満たさなければならない機能以外にも、Process requirements と呼ばれる optional features についても標準化が行われています[1]

今回は CWL v1.2 で定義されている ResourceRequirement について簡単な解説を行います。また、各サンプルは可能な限り公式の準拠度テストで用いられているファイルを引用します。

対象読者

Conformance test #120: tests/dynresreq.cwl:

#!/usr/bin/env cwl-runner
class: CommandLineTool
cwlVersion: v1.2

requirements:
  ResourceRequirement:
      coresMin: $(inputs.special_file.size)
      coresMax: $(inputs.special_file.size)

inputs:
  special_file: File

outputs:
  output:
    type: stdout

baseCommand: echo

stdout: cores.txt

arguments: [ $(runtime.cores) ]

tests/dynresreq-job.yaml:

special_file:
  class: File
  path: special_file

入力ファイル special_file の情報 (今回はファイルサイズしか利用しません)

$ ls -l tests/special_file | awk '{ print $5 }' # ファイルサイズのみ表示
2

ResourceRequirement を用いて、ツール実行に割り当てる CPU のコア数やメモリ量、ストレージ容量などを制御することができます。上の例はかなりトリッキー(かつ実用的ではない)ですが、coresMin および coresMax に、入力ファイルのサイズ (inputs.special_file.size) を指定しています。この例では入力ファイル tests/special_file のサイズ 2 がツールで利用できるコア数として指定されます。

脚注
  1. つまり、Process requiremens を含むワークフローやツール定義は、全ての CWL 準拠のワークフロー実行処理系で動かせるわけではありません。詳細は別記事を参照してください。 ↩︎

Discussion