Merge branch '20602-queue-metrics'
[arvados.git] / sdk / cwl / arvados_cwl / arv-cwl-schema-v1.2.yml
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: Apache-2.0
4
5 $base: "http://arvados.org/cwl#"
6 $namespaces:
7   cwl: "https://w3id.org/cwl/cwl#"
8   cwltool: "http://commonwl.org/cwltool#"
9 $graph:
10 - $import: https://w3id.org/cwl/CommonWorkflowLanguage.yml
11
12 - name: cwltool:Secrets
13   type: record
14   inVocab: false
15   extends: cwl:ProcessRequirement
16   fields:
17     class:
18       type: string
19       doc: "Always 'Secrets'"
20       jsonldPredicate:
21         "_id": "@type"
22         "_type": "@vocab"
23     secrets:
24       type: string[]
25       doc: |
26         List one or more input parameters that are sensitive (such as passwords)
27         which will be deliberately obscured from logging.
28       jsonldPredicate:
29         "_type": "@id"
30         refScope: 0
31
32 - name: RunInSingleContainer
33   type: record
34   extends: cwl:ProcessRequirement
35   inVocab: false
36   doc: |
37     Indicates that a subworkflow should run in a single container
38     and not be scheduled as separate steps.
39   fields:
40     - name: class
41       type: string
42       doc: "Always 'arv:RunInSingleContainer'"
43       jsonldPredicate:
44         _id: "@type"
45         _type: "@vocab"
46
47 - name: OutputDirType
48   type: enum
49   symbols:
50     - local_output_dir
51     - keep_output_dir
52   doc:
53     - |
54       local_output_dir: Use regular file system local to the compute node.
55       There must be sufficient local scratch space to store entire output;
56       specify this with `outdirMin` of `ResourceRequirement`.  Files are
57       batch uploaded to Keep when the process completes.  Most compatible, but
58       upload step can be time consuming for very large files.
59     - |
60       keep_output_dir: Use writable Keep mount.  Files are streamed to Keep as
61       they are written.  Does not consume local scratch space, but does consume
62       RAM for output buffers (up to 192 MiB per file simultaneously open for
63       writing.)  Best suited to processes which produce sequential output of
64       large files (non-sequential writes may produced fragmented file
65       manifests).  Supports regular files and directories, does not support
66       special files such as symlinks, hard links, named pipes, named sockets,
67       or device nodes.
68
69
70 - name: RuntimeConstraints
71   type: record
72   extends: cwl:ProcessRequirement
73   inVocab: false
74   doc: |
75     Set Arvados-specific runtime hints.
76   fields:
77     - name: class
78       type: string
79       doc: "Always 'arv:RuntimeConstraints'"
80       jsonldPredicate:
81         _id: "@type"
82         _type: "@vocab"
83     - name: keep_cache
84       type: int?
85       doc: |
86         Size of file data buffer for Keep mount in MiB. Default is 256
87         MiB. Increase this to reduce cache thrashing in situations such as
88         accessing multiple large (64+ MiB) files at the same time, or
89         performing random access on a large file.
90     - name: outputDirType
91       type: OutputDirType?
92       doc: |
93         Preferred backing store for output staging.  If not specified, the
94         system may choose which one to use.
95
96 - name: PartitionRequirement
97   type: record
98   extends: cwl:ProcessRequirement
99   inVocab: false
100   doc: |
101     Select preferred compute partitions on which to run jobs.
102   fields:
103     - name: class
104       type: string
105       doc: "Always 'arv:PartitionRequirement'"
106       jsonldPredicate:
107         _id: "@type"
108         _type: "@vocab"
109     - name: partition
110       type:
111         - string
112         - string[]
113
114 - name: APIRequirement
115   type: record
116   extends: cwl:ProcessRequirement
117   inVocab: false
118   doc: |
119     Indicates that process wants to access to the Arvados API.  Will be granted
120     limited network access and have ARVADOS_API_HOST and ARVADOS_API_TOKEN set
121     in the environment.
122   fields:
123     - name: class
124       type: string
125       doc: "Always 'arv:APIRequirement'"
126       jsonldPredicate:
127         _id: "@type"
128         _type: "@vocab"
129
130 - name: IntermediateOutput
131   type: record
132   extends: cwl:ProcessRequirement
133   inVocab: false
134   doc: |
135     Specify desired handling of intermediate output collections.
136   fields:
137     class:
138       type: string
139       doc: "Always 'arv:IntermediateOutput'"
140       jsonldPredicate:
141         _id: "@type"
142         _type: "@vocab"
143     outputTTL:
144       type: int
145       doc: |
146         If the value is greater than zero, consider intermediate output
147         collections to be temporary and should be automatically
148         trashed. Temporary collections will be trashed `outputTTL` seconds
149         after creation.  A value of zero means intermediate output should be
150         retained indefinitely (this is the default behavior).
151
152         Note: arvados-cwl-runner currently does not take workflow dependencies
153         into account when setting the TTL on an intermediate output
154         collection. If the TTL is too short, it is possible for a collection to
155         be trashed before downstream steps that consume it are started.  The
156         recommended minimum value for TTL is the expected duration of the
157         entire the workflow.
158
159 - name: WorkflowRunnerResources
160   type: record
161   extends: cwl:ProcessRequirement
162   inVocab: false
163   doc: |
164     Specify memory or cores resource request for the CWL runner process itself.
165   fields:
166     class:
167       type: string
168       doc: "Always 'arv:WorkflowRunnerResources'"
169       jsonldPredicate:
170         _id: "@type"
171         _type: "@vocab"
172     ramMin:
173       type: int?
174       doc: Minimum RAM, in mebibytes (2**20)
175       jsonldPredicate: "https://w3id.org/cwl/cwl#ResourceRequirement/ramMin"
176     coresMin:
177       type: int?
178       doc: Minimum cores allocated to cwl-runner
179       jsonldPredicate: "https://w3id.org/cwl/cwl#ResourceRequirement/coresMin"
180     keep_cache:
181       type: int?
182       doc: |
183         Size of collection metadata cache for the workflow runner, in
184         MiB.  Default 256 MiB.  Will be added on to the RAM request
185         when determining node size to request.
186       jsonldPredicate: "http://arvados.org/cwl#RuntimeConstraints/keep_cache"
187     acrContainerImage:
188       type: string?
189       doc: |
190         The container image containing the correct version of
191         arvados-cwl-runner to use when invoking the workflow on
192         Arvados.
193
194 - name: ClusterTarget
195   type: record
196   extends: cwl:ProcessRequirement
197   inVocab: false
198   doc: |
199     Specify where a workflow step should run
200   fields:
201     class:
202       type: string
203       doc: "Always 'arv:ClusterTarget'"
204       jsonldPredicate:
205         _id: "@type"
206         _type: "@vocab"
207     cluster_id:
208       type: string?
209       doc: The cluster to run the container
210     project_uuid:
211       type: string?
212       doc: The project that will own the container requests and intermediate collections
213
214
215 - name: OutputStorageClass
216   type: record
217   extends: cwl:ProcessRequirement
218   inVocab: false
219   doc: |
220     Specify the storage class to be used for intermediate and final output
221   fields:
222     class:
223       type: string
224       doc: "Always 'arv:StorageClassHint"
225       jsonldPredicate:
226         _id: "@type"
227         _type: "@vocab"
228     intermediateStorageClass:
229       type:
230         - "null"
231         - string
232         - type: array
233           items: string
234       doc: One or more storages classes
235     finalStorageClass:
236       type:
237         - "null"
238         - string
239         - type: array
240           items: string
241       doc: One or more storages classes
242
243
244 - type: record
245   name: PropertyDef
246   doc: |
247     Define a property that will be set on the submitted container
248     request associated with this workflow or step.
249   fields:
250     - name: propertyName
251       type: string
252       doc: The property key
253     - name: propertyValue
254       type: [Any]
255       doc: The property value
256
257
258 - name: ProcessProperties
259   type: record
260   extends: cwl:ProcessRequirement
261   inVocab: false
262   doc: |
263     Specify metadata properties that will be set on the submitted
264     container request associated with this workflow or step.
265   fields:
266     class:
267       type: string
268       doc: "Always 'arv:ProcessProperties"
269       jsonldPredicate:
270         _id: "@type"
271         _type: "@vocab"
272     processProperties:
273       type: PropertyDef[]
274       jsonldPredicate:
275         mapSubject: propertyName
276         mapPredicate: propertyValue
277
278
279 - name: cwltool:CUDARequirement
280   type: record
281   extends: cwl:ProcessRequirement
282   inVocab: false
283   doc: |
284     Require support for NVIDA CUDA (GPU hardware acceleration).
285   fields:
286     class:
287       type: string
288       doc: 'cwltool:CUDARequirement'
289       jsonldPredicate:
290         _id: "@type"
291         _type: "@vocab"
292     cudaVersionMin:
293       type: string
294       doc: |
295         Minimum CUDA version to run the software, in X.Y format.  This
296         corresponds to a CUDA SDK release.  When running directly on
297         the host (not in a container) the host must have a compatible
298         CUDA SDK (matching the exact version, or, starting with CUDA
299         11.3, matching major version).  When run in a container, the
300         container image should provide the CUDA runtime, and the host
301         driver is injected into the container.  In this case, because
302         CUDA drivers are backwards compatible, it is possible to
303         use an older SDK with a newer driver across major versions.
304
305         See https://docs.nvidia.com/deploy/cuda-compatibility/ for
306         details.
307     cudaComputeCapability:
308       type:
309         - 'string'
310         - 'string[]'
311       doc: |
312         CUDA hardware capability required to run the software, in X.Y
313         format.
314
315         * If this is a single value, it defines only the minimum
316           compute capability.  GPUs with higher capability are also
317           accepted.
318
319         * If it is an array value, then only select GPUs with compute
320           capabilities that explicitly appear in the array.
321     cudaDeviceCountMin:
322       type: ['null', int, cwl:Expression]
323       default: 1
324       doc: |
325         Minimum number of GPU devices to request.  If not specified,
326         same as `cudaDeviceCountMax`.  If neither are specified,
327         default 1.
328     cudaDeviceCountMax:
329       type: ['null', int, cwl:Expression]
330       doc: |
331         Maximum number of GPU devices to request.  If not specified,
332         same as `cudaDeviceCountMin`.
333
334 - name: UsePreemptible
335   type: record
336   extends: cwl:ProcessRequirement
337   inVocab: false
338   doc: |
339     Specify a workflow step should opt-in or opt-out of using preemptible (spot) instances.
340   fields:
341     class:
342       type: string
343       doc: "Always 'arv:UsePreemptible"
344       jsonldPredicate:
345         _id: "@type"
346         _type: "@vocab"
347     usePreemptible: boolean
348
349 - name: OutputCollectionProperties
350   type: record
351   extends: cwl:ProcessRequirement
352   inVocab: false
353   doc: |
354     Specify metadata properties that will be set on the output
355     collection associated with this workflow or step.
356   fields:
357     class:
358       type: string
359       doc: "Always 'arv:OutputCollectionProperties"
360       jsonldPredicate:
361         _id: "@type"
362         _type: "@vocab"
363     outputProperties:
364       type: PropertyDef[]
365       jsonldPredicate:
366         mapSubject: propertyName
367         mapPredicate: propertyValue
368
369
370 - name: KeepCacheType
371   type: enum
372   symbols:
373     - ram_cache
374     - disk_cache
375   doc:
376     - |
377         ram_cache: Keep blocks will be cached in RAM only.
378     - |
379         disk_cache: Keep blocks will be cached to disk and
380         memory-mapped.  The disk cache leverages the kernel's virtual
381         memory system so "hot" data will generally still be kept in
382         RAM.
383
384 - name: KeepCacheTypeRequirement
385   type: record
386   extends: cwl:ProcessRequirement
387   inVocab: false
388   doc: |
389     Choose keep cache strategy.
390   fields:
391     - name: class
392       type: string
393       doc: "'arv:KeepCacheTypeRequirement'"
394       jsonldPredicate:
395         _id: "@type"
396         _type: "@vocab"
397     - name: keepCacheType
398       type: KeepCacheType?
399       doc: |
400         Whether Keep blocks loaded by arv-mount should be kept in RAM
401         only or written to disk and memory-mapped.  The disk cache
402         leverages the kernel's virtual memory system so "hot" data will
403         generally still be kept in RAM.
404
405
406 - name: OutOfMemoryRetry
407   type: record
408   extends: cwl:ProcessRequirement
409   inVocab: false
410   doc: |
411     Detect when a failed tool run may have run out of memory, and
412     re-submit the container with more RAM.
413   fields:
414     - name: class
415       type: string
416       doc: "'arv:OutOfMemoryRetry"
417       jsonldPredicate:
418         _id: "@type"
419         _type: "@vocab"
420     - name: memoryErrorRegex
421       type: string?
422       doc: |
423         A regular expression that will be used on the text of stdout
424         and stderr produced by the tool to determine if a failed job
425         should be retried with more RAM.  By default, searches for the
426         substrings 'bad_alloc' and 'OutOfMemory'.
427     - name: memoryRetryMultipler
428       type: float
429       doc: |
430         If the container failed on its first run, re-submit the
431         container with the RAM request multiplied by this factor.