翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CWL ワークフロー定義の詳細
Common Workflow Language または CWL で記述されたワークフローは、WDL および Nextflow で記述されたワークフローと同様の機能を提供します。Amazon S3 または HealthOmics ストレージ URIs を入力パラメータとして使用できます。
サブワークフローの secondaryFile で入力を定義する場合は、メインワークフローに同じ定義を追加します。
HealthOmics ワークフローはオペレーションプロセスをサポートしていません。CWL ワークフローのオペレーションプロセスの詳細については、CWL ドキュメント
ベストプラクティスは、使用するコンテナごとに個別の CWL ワークフローを定義することです。固定 Amazon ECR URI を使用して dockerPull エントリをハードコードしないことをお勧めします。
トピック
HealthOmics を使用するように CWL ワークフローを変換する
既存の CWL ワークフロー定義を HealthOmics を使用するように変換するには、次の変更を行います。
-
すべての Docker コンテナ URIs Amazon ECR URIs。
-
すべてのワークフローファイルがメインワークフローで入力として宣言され、すべての変数が明示的に定義されていることを確認します。
-
すべての JavaScript コードが厳格モードの苦情であることを確認します。
を使用してタスクの再試行をオプトアウトする omicsRetryOn5xx
HealthOmics は、サービスエラー (5XX HTTP ステータスコード) が原因でタスクが失敗した場合、タスクの再試行をサポートします。デフォルトでは、HealthOmics は失敗したタスクを最大 2 回再試行します。HealthOmics でのタスクの再試行の詳細については、「」を参照してくださいタスクの再試行。
サービスエラーのタスク再試行をオプトアウトするには、ワークフロー定義で omicsRetryOn5xx ディレクティブを設定します。このディレクティブは、要件またはヒントに基づいて定義できます。移植性のヒントとして ディレクティブを追加することをお勧めします。
requirements: ResourceRequirement: omicsRetryOn5xx: false hints: ResourceRequirement: omicsRetryOn5xx: false
要件はヒントを上書きします。タスク実装が、囲みワークフローの要件によっても提供されるヒントでリソース要件を提供する場合、囲み要件が優先されます。
ワークフローの異なるレベルに同じタスク要件が表示されるhints場合、HealthOmics は からの最も具体的なエントリを使用します requirements ( にエントリがない場合は )requirements。次のリストは、HealthOmics が構成設定を適用するために使用する優先順位を、優先順位の低いものから最も高いものまで示しています。
-
ワークフローレベル
-
ステップレベル
-
ワークフロー定義のタスクセクション
次の例は、ワークフローのさまざまなレベルで omicsRetryOn5xxディレクティブを設定する方法を示しています。この例では、ワークフローレベルの要件がワークフローレベルのヒントを上書きします。タスクレベルとステップレベルの要件設定は、ヒント設定を上書きします。
class: Workflow # Workflow-level requirement and hint requirements: ResourceRequirement: omicsRetryOn5xx: false hints: ResourceRequirement: omicsRetryOn5xx: false # The value in requirements overrides this value steps: task_step: # Step-level requirement requirements: ResourceRequirement: omicsRetryOn5xx: false # Step-level hint hints: ResourceRequirement: omicsRetryOn5xx: false run: class: CommandLineTool # Task-level requirement requirements: ResourceRequirement: omicsRetryOn5xx: false # Task-level hint hints: ResourceRequirement: omicsRetryOn5xx: false
ワークフローステップをループする
HealthOmics はワークフローステップのループをサポートしています。ループを使用して、指定された条件が満たされるまでワークフローステップを繰り返し実行できます。これは、タスクを複数回、または特定の結果が得られるまで繰り返す必要がある反復プロセスに役立ちます。
注: ループ機能には CWL バージョン 1.2 以降が必要です。1.2 より前のバージョンの CWL を使用するワークフローは、ループオペレーションをサポートしていません。
CWL ワークフローでループを使用するには、ループ要件を定義します。次の例は、ループ要件設定を示しています。
requirements: - class: "http://commonwl.org/cwltool#Loop" loopWhen: $(inputs.counter < inputs.max) loop: counter: loopSource: result valueFrom: $(self) outputMethod: last
loopWhen フィールドは、ループが終了するタイミングを制御します。この例では、カウンターが最大値より小さい限り、ループは続行されます。loop フィールドは、反復間で入力パラメータを更新する方法を定義します。は、前の反復のどの出力を次の反復にフィードするかloopSourceを指定します。に設定された outputMethodフィールドは、最終イテレーションの出力のみlastを返します。
メモリを増やしてタスクを再試行する
HealthOmics out-of-memoryタスクの失敗の自動再試行をサポートしています。タスクがコード 137 (out-of-memory) で終了すると、HealthOmics は指定された乗数に基づいてメモリ割り当てを増やした新しいタスクを作成します。
注記
HealthOmics はout-of-memory障害を最大 3 回再試行するか、メモリ割り当てが 1536 GiB に達するまで、いずれかの制限に達するまで再試行します。
次の例は、out-of-memory再試行を設定する方法を示しています。
hints: ResourceRequirement: ramMin: 4096 http://arvados.org/cwl#OutOfMemoryRetry: memoryRetryMultiplier: 2.5
out-of-memoryが原因でタスクが失敗した場合、HealthOmics は式 を使用して再試行メモリ割り当てを計算しますprevious_run_memory × memoryRetryMultiplier。上記の例では、4096 MB のメモリを持つタスクが失敗した場合、再試行は 4096 × 2.5 = 10,240 MB のメモリを使用します。
memoryRetryMultiplier パラメータは、再試行に割り当てる追加のメモリの量を制御します。
-
デフォルト値: 値を指定しない場合、デフォルト値は になります
2(メモリが 2 倍になります)。 -
有効な範囲: より大きい正の数である必要があります
1。無効な値の場合、4XX 検証エラーが発生します。 -
有効な最小値: 意味のあるメモリの増加を確保し
1.5、過剰な再試行を防ぐために、1と の間の値は自動的に に増加1.5します。
例
以下は、CWL で記述されたワークフローの例です。
cwlVersion: v1.2 class: Workflow inputs: in_file: type: File secondaryFiles: [.fai] out_filename: string docker_image: string outputs: copied_file: type: File outputSource: copy_step/copied_file steps: copy_step: in: in_file: in_file out_filename: out_filename docker_image: docker_image out: [copied_file] run: copy.cwl
次のファイルは、copy.cwlタスクを定義します。
cwlVersion: v1.2 class: CommandLineTool baseCommand: cp inputs: in_file: type: File secondaryFiles: [.fai] inputBinding: position: 1 out_filename: type: string inputBinding: position: 2 docker_image: type: string outputs: copied_file: type: File outputBinding: glob: $(inputs.out_filename) requirements: InlineJavascriptRequirement: {} DockerRequirement: dockerPull: "$(inputs.docker_image)"
以下は、GPU 要件を使用して CWL で記述されたワークフローの例です。
cwlVersion: v1.2 class: CommandLineTool baseCommand: ["/bin/bash", "docm_haplotypeCaller.sh"] $namespaces: cwltool: http://commonwl.org/cwltool# requirements: cwltool:CUDARequirement: cudaDeviceCountMin: 1 cudaComputeCapability: "nvidia-tesla-t4" cudaVersionMin: "1.0" InlineJavascriptRequirement: {} InitialWorkDirRequirement: listing: - entryname: 'docm_haplotypeCaller.sh' entry: | nvidia-smi --query-gpu=gpu_name,gpu_bus_id,vbios_version --format=csv inputs: [] outputs: []