

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Workflow-Definitionsdateien in HealthOmics
<a name="workflow-definition-files"></a>

Sie verwenden eine Workflow-Definition, um Informationen über den Workflow, die Läufe und die Aufgaben in den Läufen anzugeben. Sie erstellen Workflow-Definitionen in einer oder mehreren Dateien mithilfe einer Workflow-Definitionssprache. HealthOmics unterstützt in WDL, Nextflow oder CWL geschriebene Workflow-Definitionen. 

HealthOmics unterstützt die folgenden Optionen für WDL-Workflow-Definitionen: 
+ WDL — Stellt eine spezifikationskonforme WDL-Engine bereit. 
+ WDL lenient — Konzipiert für Workflows, die von Cromwell migriert wurden. Es unterstützt Kundenrichtlinien von Cromwell und einige nichtkonforme Logiken. Details hierzu finden Sie unter [Implizite Typkonvertierung in WDL Lenient](workflow-languages-wdl.md#workflow-wdl-type-conversion).

Informationen zu den einzelnen Workflow-Sprachen finden Sie in den sprachspezifischen Abschnitten weiter unten.

In der Workflow-Definition geben Sie die folgenden Arten von Informationen an:
+ **Language version**— Die Sprache und Version der Workflow-Definition.
+ **Compute and memory**— Die Rechen- und Speicheranforderungen für Aufgaben im Workflow.
+ **Inputs**— Speicherort der Eingaben für die Workflow-Aufgaben. Weitere Informationen finden Sie unter [HealthOmics Eingaben ausführen](workflows-run-inputs.md).
+ **Outputs**— Speicherort für die von den Aufgaben generierten Ausgaben.
+ **Task resources**— Rechen- und Speicheranforderungen für jede Aufgabe.
+ **Accelerators**— andere Ressourcen, die für die Aufgaben erforderlich sind, z. B. Beschleuniger.

**Topics**
+ [HealthOmics Anforderungen an die Workflow-Definition](workflow-defn-requirements.md)
+ [Versionsunterstützung für HealthOmics Workflow-Definitionssprachen](workflows-lang-versions.md)
+ [Rechen- und Speicheranforderungen für HealthOmics Aufgaben](memory-and-compute-tasks.md)
+ [Aufgabenausgaben in einer HealthOmics Workflow-Definition](workflows-task-outputs.md)
+ [Aufgabenressourcen in einer HealthOmics Workflow-Definition](task-resources.md)
+ [Aufgabenbeschleuniger in einer Workflow-Definition HealthOmics](task-accelerators.md)
+ [Besonderheiten der WDL-Workflow-Definition](workflow-languages-wdl.md)
+ [Einzelheiten der Nextflow-Workflow-Definition](workflow-definition-nextflow.md)
+ [Besonderheiten der CWL-Workflow-Definition](workflow-languages-cwl.md)
+ [Beispiele für Workflow-Definitionen](workflow-definition-examples.md)

# HealthOmics Anforderungen an die Workflow-Definition
<a name="workflow-defn-requirements"></a>

Die HealthOmics Workflow-Definitionsdateien müssen die folgenden Anforderungen erfüllen:
+ Aufgaben müssen input/output Parameter, Amazon ECR-Container-Repositorys und Laufzeitspezifikationen wie Speicher- oder CPU-Zuweisung definieren.
+ Stellen Sie sicher, dass Ihre IAM-Rollen über die erforderlichen Berechtigungen verfügen.<a name="lower"></a>
  + Ihr Workflow hat Zugriff auf Eingabedaten aus AWS Ressourcen wie Amazon S3. 
  + Ihr Workflow hat bei Bedarf Zugriff auf externe Repository-Services.
+ Deklarieren Sie die Ausgabedateien in der Workflow-Definition. Um Dateien für Zwischenläufe an den Ausgabespeicherort zu kopieren, deklarieren Sie sie als Workflow-Ausgaben. 
+ Die Eingabe- und Ausgabespeicherorte müssen sich in derselben Region wie der Workflow befinden. 
+ HealthOmics Die Eingaben für den Speicher-Workflow müssen den `ACTIVE` Status haben. HealthOmics importiert keine Eingaben mit einem `ARCHIVED` Status, wodurch der Workflow fehlschlägt. Informationen zu Amazon S3 S3-Objekteingaben finden Sie unter[HealthOmics Eingaben ausführen](workflows-run-inputs.md).
+ Ein **main** Speicherort des Workflows ist optional, wenn Ihr ZIP-Archiv entweder eine einzelne Workflow-Definition oder eine Datei mit dem Namen „main“ enthält.<a name="lower"></a>
  + Beispielpfad: `workflow-definition/main-file.wdl`
+ Bevor Sie einen Workflow von Amazon S3 oder Ihrem lokalen Laufwerk aus erstellen, erstellen Sie ein ZIP-Archiv mit den Workflow-Definitionsdateien und allen Abhängigkeiten, z. B. Unterworkflows.
+ Wir empfehlen, dass Sie Amazon ECR-Container im Workflow als Eingabeparameter für die Validierung der Amazon ECR-Berechtigungen deklarieren. 

Zusätzliche Überlegungen zu Nextflow:
+ **/bin**

  Nextflow-Workflow-Definitionen können einen /bin-Ordner mit ausführbaren Skripten enthalten. Dieser Pfad hat schreibgeschützten und ausführbaren Zugriff auf Aufgaben. Aufgaben, die auf diesen Skripten basieren, sollten einen Container verwenden, der mit den entsprechenden Skriptinterpretern erstellt wurde. Es empfiehlt sich, den Interpreter direkt aufzurufen. Beispiel:

  ```
  process my_bin_task {
     ...
     script:
        """
        python3 my_python_script.py
        """
  }
  ```
+ **includeConfig**

  Auf NextFlow basierende Workflow-Definitionen können nextflow.config-Dateien enthalten, die dabei helfen, Parameterdefinitionen zu abstrahieren oder Ressourcenprofile zu verarbeiten. Um die Entwicklung und Ausführung von Nextflow-Pipelines in mehreren Umgebungen zu unterstützen, verwenden Sie eine HealthOmics -spezifische Konfiguration, die Sie der globalen Konfiguration mithilfe der IncludeConfig-Direktive hinzufügen. Um die Portabilität zu gewährleisten, konfigurieren Sie den Workflow mithilfe des folgenden Codes so, dass er die Datei nur einbezieht, wenn er darauf ausgeführt HealthOmics wird:

  ```
  // at the end of the nextflow.config file
  if ("$AWS_WORKFLOW_RUN") {
      includeConfig 'conf/omics.config'
  }
  ```
+ **Reports**

  HealthOmics unterstützt keine vom Modul generierten Dag-, Trace- und Ausführungsberichte. Sie können Alternativen zu den Trace- und Ausführungsberichten mithilfe einer Kombination aus GetRun und GetRunTask API-Aufrufen generieren. 

Zusätzliche Überlegungen zu CWL:
+ **Container image uri interpolation**

  HealthOmics ermöglicht, dass die DockerPull-Eigenschaft von ein DockerRequirement Inline-Javascript-Ausdruck ist. Beispiel:

  ```
  requirements:
    DockerRequirement:
      dockerPull: "$(inputs.container_image)"
  ```

  Auf diese Weise können Sie das Container-Image URIs als Eingabeparameter für den Workflow angeben.
+ **Javascript expressions**

  Javascript-Ausdrücke müssen `strict mode` konform sein.
+ **Operation process**

  HealthOmics unterstützt keine CWL-Operationsprozesse.

# Versionsunterstützung für HealthOmics Workflow-Definitionssprachen
<a name="workflows-lang-versions"></a>

HealthOmics unterstützt in Nextflow, WDL oder CWL geschriebene Workflow-Definitionsdateien. Die folgenden Abschnitte enthalten Informationen zur HealthOmics Versionsunterstützung für diese Sprachen.

**Topics**
+ [Unterstützung für WDL-Versionen](#workflows-lang-versions-WDL)
+ [Unterstützung für CWL-Versionen](#workflows-lang-versions-CWL)
+ [Unterstützung der Nextflow-Version](#workflows-lang-versions-nextflow)

## Unterstützung für WDL-Versionen
<a name="workflows-lang-versions-WDL"></a>

HealthOmics unterstützt die Versionen 1.0, 1.1 und die Entwicklungsversion der WDL-Spezifikation.

Jedes WDL-Dokument muss eine Versionsanweisung enthalten, aus der hervorgeht, welcher Version (Haupt- und Nebenversion) der Spezifikation es entspricht. [Weitere Informationen zu Versionen finden Sie unter WDL-Versionierung](https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#versioning)

Die Versionen 1.0 und 1.1 der WDL-Spezifikation unterstützen den Typ nicht. `Directory` Um den `Directory` Typ für Eingaben oder Ausgaben zu verwenden, setzen Sie die Version **development** in der ersten Zeile der Datei auf:

```
version development  # first line of .wdl file
     ... remainder of the file ...
```

## Unterstützung für CWL-Versionen
<a name="workflows-lang-versions-CWL"></a>

HealthOmics unterstützt die Versionen 1.0, 1.1 und 1.2 der CWL-Sprache.

Sie können die Sprachversion in der CWL-Workflow-Definitionsdatei angeben. Weitere Informationen zu CWL finden Sie im [CWL-Benutzerhandbuch](https://github.com/common-workflow-language/user_guide)

## Unterstützung der Nextflow-Version
<a name="workflows-lang-versions-nextflow"></a>

HealthOmics unterstützt vier stabile Nextflow-Versionen. Nextflow veröffentlicht normalerweise alle sechs Monate eine stabile Version. HealthOmics unterstützt die monatlichen „Edge“ -Veröffentlichungen nicht.

HealthOmics unterstützt in jeder Version veröffentlichte Funktionen, jedoch keine Vorschaufunktionen.

### Unterstützte Versionen
<a name="workflows-versions-nextflow-list"></a>

HealthOmics unterstützt die folgenden Nextflow-Versionen:
+ Nextflow v22.04.01 DSL 1 und DSL 2
+ Nextflow v23.10.0 DSL 2 (Standard)
+ Nextflow v24.10.8 DSL 2
+ Nextflow v25.10.0 DSL 2

**Anmerkung**  
HealthOmics unterstützt den strikten Syntaxmodus in Nextflow v25.10.0 nicht.

[Folgen Sie der Nextflow-Upgrade-Anleitung, um Ihren Workflow auf die neueste unterstützte Version (v25.10.0) zu migrieren.](https://www.nextflow.io/docs/latest/migrations/25-10.html)

Bei der Migration zu Nextflow v24 und v25 gibt es einige wichtige Änderungen. [Folgen Sie dem Nextflow-Migrationsleitfaden.](https://www.nextflow.io/docs/latest/migrations/index.html)

### Ermitteln und verarbeiten Sie Nextflow-Versionen
<a name="workflows-versions-processing"></a>

HealthOmics erkennt die von Ihnen angegebene DSL-Version und die Nextflow-Version. Basierend auf diesen Eingaben wird automatisch die beste Nextflow-Version für die Ausführung ermittelt.

#### DSL-Version
<a name="workflows-versions-p1"></a>

HealthOmics erkennt die angeforderte DSL-Version in Ihrer Workflow-Definitionsdatei. Sie können beispielsweise Folgendes angeben:`nextflow.enable.dsl=2`.

HealthOmics unterstützt standardmäßig DSL 2. Es bietet Abwärtskompatibilität mit DSL 1, sofern dies in Ihrer Workflow-Definitionsdatei angegeben ist.
+ Wenn Sie DSL 1 angeben, HealthOmics wird Nextflow v22.04 ausgeführt DSL1 (die einzige unterstützte Version, auf der DSL 1 ausgeführt wird).
+ Wenn Sie keine DSL-Version angeben oder die DSL-Informationen aus irgendeinem Grund nicht analysieren HealthOmics können (z. B. Syntaxfehler in Ihrer Workflow-Definitionsdatei), wird HealthOmics standardmäßig DSL 2 verwendet und Nextflow v23.10.0 ausgeführt.
+ [Informationen zum Upgrade Ihres Workflows von DSL 1 auf DSL 2, um die neuesten Versionen und Softwarefunktionen von Nextflow zu nutzen, finden Sie unter Migration von DSL 1.](https://nextflow.io/docs/latest/dsl1.html)

#### Nextflow-Versionen
<a name="workflows-versions-p2"></a>

HealthOmics erkennt die angeforderte Nextflow-Version in der Nextflow-Konfigurationsdatei (nextflow.config), wenn Sie diese Datei angeben. Wir empfehlen, dass Sie die `nextflowVersion` Klausel am Ende der Datei hinzufügen, um unerwartete Überschreibungen durch die enthaltenen Konfigurationen zu vermeiden. Weitere Informationen finden Sie unter [Nextflow-Konfiguration](https://nextflow.io/docs/latest/config.html).

Sie können eine Nextflow-Version oder einen Versionsbereich mit der folgenden Syntax angeben:

```
   // exact match
   manifest.nextflowVersion = '1.2.3'   
            
   // 1.2 or later (excluding 2 and later)
   manifest.nextflowVersion = '1.2+'         
            
   // 1.2 or later
   manifest.nextflowVersion = '>=1.2'
            
   // any version in the range 1.2 to 1.5
   manifest.nextflowVersion = '>=1.2, <=1.5' 
            
   // use the "!" prefix to stop execution if the current version 
   // doesn't match the required version.
   manifest.nextflowVersion = '!>=1.2'
```

HealthOmics verarbeitet die Nextflow-Versionsinformationen wie folgt: 
+ Wenn Sie **=** eine genaue Version angeben, die HealthOmics unterstützt, HealthOmics verwendet diese Version. 
+ Wenn Sie **\$1** eine exakte Version oder einen Bereich von Versionen angeben, die nicht unterstützt werden, HealthOmics löst dies eine Ausnahme aus und die Ausführung schlägt fehl. Erwägen Sie die Verwendung dieser Option, wenn Sie bei Versionsanfragen strikt vorgehen und schnell scheitern möchten, wenn die Anfrage nicht unterstützte Versionen enthält.
+ Wenn Sie einen Versionsbereich angeben, wird die Version mit der höchsten Präferenz in diesem Bereich HealthOmics verwendet. Die bevorzugte Reihenfolge von der höchsten zur niedrigsten ist v23.10.0, v22.04.0, v24.10.8 und v25.10.0. Beispiel:
  + Wenn der Bereich v23.10.0, v24.10.8 und v25.10.0 abdeckt, wählt v23.10.0. HealthOmics 
  + Wenn der Bereich v24.10.8 und v25.10.0 abdeckt, wählt v24.10.8. HealthOmics 
+ Wenn es keine angeforderte Version gibt oder wenn die angeforderten Versionen nicht gültig sind oder aus irgendeinem Grund nicht analysiert werden können:
  + Wenn Sie DSL 1 angegeben haben, HealthOmics wird Nextflow v22.04 ausgeführt.
  + Andernfalls wird Nextflow v23.10.0 ausgeführt HealthOmics .

 Sie können die folgenden Informationen über die Nextflow-Version abrufen, die für jeden Lauf HealthOmics verwendet wurde:
+ Die Run-Logs enthalten Informationen über die tatsächliche Nextflow-Version, die für den Lauf HealthOmics verwendet wurde.
+ HealthOmics fügt Warnungen in die Run-Logs ein, wenn es keine direkte Übereinstimmung mit der von Ihnen angeforderten Version gibt oder wenn eine andere Version als die von Ihnen angegebene verwendet werden musste.
+ Die Antwort auf den **GetRun** API-Vorgang enthält ein Feld (`engineVersion`) mit der tatsächlichen Nextflow-Version, die für den Lauf HealthOmics verwendet wurde. Beispiel:

  ```
  "engineVersion":"22.04.0"
  ```

# Rechen- und Speicheranforderungen für HealthOmics Aufgaben
<a name="memory-and-compute-tasks"></a>

HealthOmics führt Ihre privaten Workflow-Aufgaben in einer Omics-Instanz aus. HealthOmics bietet eine Vielzahl von Instanztypen für verschiedene Arten von Aufgaben. Jeder Instance-Typ hat eine feste Speicher- und vCPU-Konfiguration (und eine feste GPU-Konfiguration für beschleunigte Recheninstanztypen). Die Kosten für die Nutzung einer Omics-Instanz variieren je nach Instanztyp. Einzelheiten finden Sie auf der Seite mit der [HealthOmics Preisgestaltung](https://aws.amazon.com/healthomics/pricing/).

Für Aufgaben in einem Workflow geben Sie den erforderlichen Arbeitsspeicher und v CPUs in der Workflow-Definitionsdatei an. Wenn eine Workflow-Aufgabe ausgeführt wird, HealthOmics ordnet die kleinste Omics-Instanz zu, die den angeforderten Speicher aufnehmen kann, und v. CPUs Wenn eine Aufgabe beispielsweise 64 GiB Speicher und 8 V benötigtCPUs, HealthOmics wählt aus`omics.r.2xlarge`.

Wir empfehlen Ihnen, die Instance-Typen zu überprüfen und die angeforderte V CPUs - und Speichergröße so einzustellen, dass sie der Instanz entsprechen, die Ihren Anforderungen am besten entspricht. Der Task-Container verwendet die Zahl von v CPUs und die Speichergröße, die Sie in Ihrer Workflow-Definitionsdatei angeben, auch wenn der Instance-Typ über zusätzliche V CPUs und zusätzlichen Speicher verfügt. 

Die folgende Liste enthält zusätzliche Informationen zu vCPU und Speicherzuweisung:
+ Bei der Zuweisung von Container-Ressourcen handelt es sich um feste Grenzwerte. Wenn für eine Aufgabe nicht genügend Arbeitsspeicher zur Verfügung steht oder wenn versucht wird, zusätzliche V zu verwendenCPUs , generiert die Aufgabe ein Fehlerprotokoll und wird beendet.
+ Wenn Sie keine Rechen- oder Speicheranforderungen angeben, HealthOmics wählt eine Konfiguration mit 1 vCPU **omics.c.large** und 1 GiB Arbeitsspeicher aus und verwendet diese standardmäßig.
+ Die Mindestkonfiguration, die Sie anfordern können, ist 1 vCPU und 1 GiB Arbeitsspeicher. 
+ Wenn Sie vCPUs, memory oder GPUs that angeben, das die unterstützten Instance-Typen überschreitet, HealthOmics wird eine Fehlermeldung ausgegeben und der Workflow schlägt bei den Validierungen fehl
+ Wenn Sie Brucheinheiten angeben, wird auf die nächste HealthOmics Ganzzahl aufgerundet.
+ HealthOmics reserviert eine kleine Menge an Speicher (5%) für Verwaltungs- und Protokollierungsagenten, sodass der Anwendung in der Aufgabe möglicherweise nicht immer die gesamte Speicherzuweisung zur Verfügung steht.
+ HealthOmics passt die Instanztypen an die von Ihnen angegebenen Rechen- und Speicheranforderungen an und verwendet möglicherweise eine Mischung aus Hardwaregenerationen. Aus diesem Grund kann es zu geringfügigen Abweichungen bei den Ausführungszeiten von Aufgaben für dieselbe Aufgabe kommen.

Diese Themen enthalten Einzelheiten zu den HealthOmics unterstützten Instance-Typen. 

**Topics**
+ [Standard-Instance-Typen](#workflow-task-standard-instances)
+ [Für die Datenverarbeitung optimierte Instanzen](#workflow-task-compute-optimized-instances)
+ [Für den Arbeitsspeicher optimierte Instanzen](#workflow-task-memory-optimized-instances)
+ [Instanzen für beschleunigte Datenverarbeitung](#workflow-task-accelerated-computing-instances)

**Anmerkung**  
 Erhöhen Sie bei standardmäßigen, rechen- und speicheroptimierten Instances die Größe der Instance-Bandbreite, wenn die Instance einen höheren Durchsatz benötigt. Bei Amazon EC2 EC2-Instances mit weniger als 16 vCPUs (Größe 4xl und kleiner) kann es zu Durchsatzsteigerungen kommen. Weitere Informationen zum Durchsatz von Amazon EC2 EC2-Instances finden Sie unter [Verfügbare Amazon EC2 EC2-Instance-Bandbreite](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth).

## Standard-Instance-Typen
<a name="workflow-task-standard-instances"></a>

Bei Standard-Instance-Typen zielen die Konfigurationen auf ein ausgewogenes Verhältnis von Rechenleistung und Arbeitsspeicher ab. 

HealthOmics unterstützt die Instances 32xlarge und 48xlarge in den folgenden Regionen: USA West (Oregon) und USA Ost (Nord-Virginia).


| Instance | Anzahl von v CPUs | Arbeitsspeicher | 
| --- | --- | --- | 
| omics.m.large | 2 | 8 GiB | 
| omics.m.x groß | 4 | 16 GiB | 
| omics.m.2 x groß | 8 | 32 GiB | 
| omics.m.4xgroß | 16 | 64 GiB | 
| omics.m.8xgroß | 32 | 128 GiB | 
| omics.m. 12 x groß | 48 | 192 GiB | 
| omics.m.16x groß | 64 | 256 GiB | 
| omics.m.24x groß | 96 | 384 GiB | 
| omics.m.32x groß | 128 | 512 GiB | 
| omics.m.48x groß | 192 | 768 GiB | 

## Für die Datenverarbeitung optimierte Instanzen
<a name="workflow-task-compute-optimized-instances"></a>

Bei rechenoptimierten Instance-Typen verfügen die Konfigurationen über mehr Rechenleistung und weniger Arbeitsspeicher.

HealthOmics unterstützt die Instances 32xlarge und 48xlarge in den folgenden Regionen: USA West (Oregon) und USA Ost (Nord-Virginia).


| Instance | Anzahl von v CPUs | Arbeitsspeicher | 
| --- | --- | --- | 
| omics.c.large | 2 | 4 GiB | 
| omics.c.xlarge | 4 | 8 GiB | 
| omics.c.2 x groß | 8 | 16 GiB | 
| omics.c.4xlarge | 16 | 32 GiB | 
| omics.c.8xlarge | 32 | 64 GiB | 
| omics.c. 12 x groß | 48 | 96 GiB | 
| omics.c. 16 x groß | 64 | 128 GiB | 
| omics.c.24xlarge | 96 | 192 GiB | 
| omics.c.32xlarge | 128 | 256 GiB | 
| omics.c.48xlarge | 192 | 384 GiB | 

## Für den Arbeitsspeicher optimierte Instanzen
<a name="workflow-task-memory-optimized-instances"></a>

Bei speicheroptimierten Instance-Typen verfügen die Konfigurationen über weniger Rechenleistung und mehr Arbeitsspeicher.

HealthOmics unterstützt die Instances 32xlarge und 48xlarge in den folgenden Regionen: USA West (Oregon) und USA Ost (Nord-Virginia).


| Instance | Anzahl von v CPUs | Arbeitsspeicher | 
| --- | --- | --- | 
| omics.r.large | 2 | 16 GiB | 
| omic s.r.x groß | 4 | 32 GiB | 
| omic s.r.2 x groß | 8 | 64 GiB | 
| omic s.r.4 x groß | 16 | 128 GiB | 
| omic s.r.8 x groß | 32 | 256 GiB | 
| omic s.r.12 x groß | 48 | 384 GiB | 
| omic s.r.16 x groß | 64 | 512 GiB | 
| omic s.r.24 x groß | 96 | 768 GiB | 
| omic s.r.32 x groß | 128 | 1024 GiB | 
| omic s.r.48 x groß | 192 | 1536 GiB | 

## Instanzen für beschleunigte Datenverarbeitung
<a name="workflow-task-accelerated-computing-instances"></a>

Sie können optional GPU-Ressourcen für jede Aufgabe in einem Workflow angeben, sodass der Aufgabe eine Instanz für HealthOmics beschleunigtes Rechnen zugewiesen wird. Informationen zum Angeben der GPU-Informationen in der Workflow-Definitionsdatei finden Sie unter. [Aufgabenbeschleuniger in einer Workflow-Definition HealthOmics](task-accelerators.md)

Wenn Sie einen Task Accelerator angeben, der mehrere Instanztypen unterstützt, HealthOmics wählt der Instanztyp je nach Verfügbarkeit aus. Wenn mehr als ein Instance-Typ verfügbar ist HealthOmics , wird die kostengünstigere Instanz bevorzugt. Die Ausnahme bildet der Task Accelerator nvidia-t4-a10g-l4, der der in Ihrer Region verfügbaren Instance der neuesten Generation den Vorzug gibt.

G4-Instances werden in der Region Israel (Tel Aviv) nicht unterstützt. G5-Instances werden in der Region Asien-Pazifik (Singapur) nicht unterstützt. 



**Topics**
+ [Instance-Typen G6 und G6e](#workflow-task-accelerated-accelerated-g6)
+ [G4- und G5-Instanzen](#workflow-task-accelerated-accelerated-g45)

### Instance-Typen G6 und G6e
<a name="workflow-task-accelerated-accelerated-g6"></a>

HealthOmics unterstützt die folgenden G6-Instance-Konfigurationen für beschleunigtes Rechnen. Alle omics.g6-Instanzen verwenden Nvidia L4. GPUs

HealthOmics unterstützt die G6- und G6e-Instances in den folgenden Regionen: USA West (Oregon) und USA Ost (Nord-Virginia).


| Instance | Anzahl von v CPUs | Arbeitsspeicher | Anzahl von GPUs | GPU-Arbeitsspeicher | 
| --- | --- | --- | --- | --- | 
| omics.g6.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g 6.2 x groß | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g 6.4x groß | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g 6.8 x groß | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g 6.12 x groß | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g 6.16 x groß | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g 6.24x groß | 96 | 384 GiB | 4 | 96 GiB | 

Alle omics.g6e-Instanzen verwenden Nvidia L40s. GPUs


| Instance | Anzahl von v CPUs | Arbeitsspeicher | Anzahl von GPUs | GPU-Arbeitsspeicher | 
| --- | --- | --- | --- | --- | 
| omics.g6e.xlarge | 4 | 32 GiB | 1 | 48 GiB | 
| omics.g6e.2xlarge | 8 | 64 GiB | 1 | 48 GiB | 
| omics.g6e.4x groß | 16 | 128 GiB | 1 | 48 GiB | 
| omics.g6e.8xgroß | 32 | 256 GiB | 1 | 48 GiB | 
| omics.g6e.12xlarge | 48 | 384 GiB | 4 | 192 GiB | 
| omics.g6e.16x groß | 64 | 512 GiB | 1 | 48 GiB | 
| omics.g6e.24x groß | 96 | 768 GiB | 4 | 192 GiB | 

### G4- und G5-Instanzen
<a name="workflow-task-accelerated-accelerated-g45"></a>

HealthOmics unterstützt die folgenden G4- und G5-Instance-Konfigurationen für beschleunigtes Rechnen. 

Alle omics.g5-Instances verwenden Nvidia Tesla A10G. GPUs


| Instance | Anzahl von v CPUs | Arbeitsspeicher | Anzahl von GPUs | GPU-Arbeitsspeicher | 
| --- | --- | --- | --- | --- | 
| omics.g5.xlarge | 4 | 16 GiB | 1 | 24 GiB | 
| omics.g5.2 x groß | 8 | 32 GiB | 1 | 24 GiB | 
| omics.g 5.4 x groß | 16 | 64 GiB | 1 | 24 GiB | 
| omics.g 5.8x groß | 32 | 128 GiB | 1 | 24 GiB | 
| omics.g 5.12 x groß | 48 | 192 GiB | 4 | 96 GiB | 
| omics.g 5.16 x groß | 64 | 256 GiB | 1 | 24 GiB | 
| omics.g 5.24x groß | 96 | 384 GiB | 4 | 96 GiB | 

Alle omics.g4dn-Instanzen verwenden Nvidia Tesla T4. GPUs


| Instance | Anzahl von v CPUs | Arbeitsspeicher | Anzahl von GPUs | GPU-Arbeitsspeicher | 
| --- | --- | --- | --- | --- | 
| omics.g4dn.xlarge | 4 | 16 GiB | 1 | 16 GiB | 
| omics.g4dn.2xlarge | 8 | 32 GiB | 1 | 16 GiB | 
| omics.g4dn.4xgroß | 16 | 64 GiB | 1 | 16 GiB | 
| omics.g4dn.8xgroß | 32 | 128 GiB | 1 | 16 GiB | 
| omics.g4dn.12xlarge | 48 | 192 GiB | 4 | 64 GiB | 
| omics.g4dn.16xlarge | 64 | 256 GiB | 1 | 24 GiB | 

# Aufgabenausgaben in einer HealthOmics Workflow-Definition
<a name="workflows-task-outputs"></a>

Sie geben Aufgabenausgaben in der Workflow-Definition an. Verwirft standardmäßig alle zwischengeschalteten Aufgabendateien, HealthOmics wenn der Workflow abgeschlossen ist. Um eine Zwischendatei zu exportieren, definieren Sie sie als Ausgabe. 

Wenn Sie das Aufruf-Caching verwenden, werden die Ausgaben der Aufgaben im Cache HealthOmics gespeichert, einschließlich aller Zwischendateien, die Sie als Ausgaben definieren.

Die folgenden Themen enthalten Beispiele für Aufgabendefinitionen für jede der Workflow-Definitionssprachen.

**Topics**
+ [Aufgabenausgaben für WDL](#workflow-task-outputs-wdl)
+ [Task-Ausgaben für Nextflow](#workflow-task-outputs-nextflow)
+ [Aufgabenausgaben für CWL](#workflow-task-outputs-cwl)

## Aufgabenausgaben für WDL
<a name="workflow-task-outputs-wdl"></a>

Für in WDL geschriebene Workflow-Definitionen definieren Sie Ihre Ausgaben im **outputs** Workflow-Bereich der obersten Ebene. 

HealthOmics

**Topics**
+ [Aufgabenausgabe für STDOUT](#task-outputs-wdl-stdout)
+ [Aufgabenausgabe für STDERR](#task-outputs-wdl-stderr)
+ [Ausgabe der Aufgabe in eine Datei](#task-outputs-wdl-file)
+ [Ausgabe der Aufgabe in ein Array von Dateien](#task-outputs-wdl-files)

### Aufgabenausgabe für STDOUT
<a name="task-outputs-wdl-stdout"></a>

In diesem Beispiel wird eine Aufgabe mit dem Namen erstellt`SayHello`, die den STDOUT-Inhalt in die Aufgabenausgabedatei zurückgibt. **Die **stdout** WDL-Funktion erfasst den STDOUT-Inhalt (in diesem Beispiel die Eingabezeichenfolge Hello World\$1** ) in einer Datei. **stdout\$1file** 

Da Protokolle für den gesamten STDOUT-Inhalt HealthOmics erstellt werden, wird die Ausgabe zusammen mit anderen CloudWatch STDERR-Protokollierungsinformationen für die Aufgabe auch in Logs angezeigt.

```
version 1.0
 workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File stdout_file = SayHello.stdout_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        echo "~{message}" 
        echo "Current date: $(date)"
        echo "This message was printed to STDOUT"
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File stdout_file = stdout()
    }
}
```

### Aufgabenausgabe für STDERR
<a name="task-outputs-wdl-stderr"></a>

In diesem Beispiel wird eine Aufgabe mit dem Namen erstellt`SayHello`, die den STDERR-Inhalt in die Aufgabenausgabedatei zurückgibt. **Die **stderr** WDL-Funktion erfasst den STDERR-Inhalt (in diesem Beispiel die Eingabezeichenfolge Hello World\$1** ) in einer Datei. **stderr\$1file** 

Da Protokolle für den gesamten STDERR-Inhalt HealthOmics erstellt werden, wird die Ausgabe zusammen mit anderen CloudWatch STDERR-Protokollierungsinformationen für die Aufgabe in Logs angezeigt.

```
version 1.0
 workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File stderr_file = SayHello.stderr_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        echo "~{message}" >&2
        echo "Current date: $(date)" >&2
        echo "This message was printed to STDERR" >&2
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File stderr_file = stderr()
    }
}
```

### Ausgabe der Aufgabe in eine Datei
<a name="task-outputs-wdl-file"></a>

In diesem Beispiel erstellt die SayHello Aufgabe zwei Dateien (message.txt und info.txt) und deklariert diese Dateien explizit als die benannten Ausgaben (message\$1file und info\$1file). 

```
version 1.0
workflow HelloWorld {
    input {
        String message = "Hello, World!"
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call SayHello {
        input:
            message = message,
            container = ubuntu_container
    }

    output {
        File message_file = SayHello.message_file
        File info_file = SayHello.info_file
    }
}

task SayHello {
    input {
        String message
        String container
    }

    command <<<
        # Create message file
        echo "~{message}" > message.txt
        
        # Create info file with date and additional information
        echo "Current date: $(date)" > info.txt
        echo "This message was saved to a file" >> info.txt
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        File message_file = "message.txt"
        File info_file = "info.txt"
    } 
}
```

### Ausgabe der Aufgabe in ein Array von Dateien
<a name="task-outputs-wdl-files"></a>

In diesem Beispiel generiert die `GenerateGreetings` Aufgabe ein Array von Dateien als Aufgabenausgabe. Die Aufgabe generiert dynamisch eine Begrüßungsdatei für jedes Mitglied des Eingabearrays`names`. Da die Dateinamen erst zur Laufzeit bekannt sind, verwendet die Ausgabedefinition die WDL-Funktion glob (), um alle Dateien auszugeben, die dem Muster entsprechen. `*_greeting.txt` 

```
version 1.0
 workflow HelloArray {
    input {
        Array[String] names = ["World", "Friend", "Developer"]
        String ubuntu_container = "123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04"
    }

    call GenerateGreetings {
        input:
            names = names,
            container = ubuntu_container
    }

    output {
        Array[File] greeting_files = GenerateGreetings.greeting_files
    }
}

task GenerateGreetings {
    input {
        Array[String] names
        String container
    }

    command  <<<
        # Create a greeting file for each name
        for name in ~{sep=" " names}; do
            echo "Hello, $name!" > ${name}_greeting.txt
        done
    >>>

    runtime {
        docker: container
        cpu: 1
        memory: "2 GB"
    }

    output {
        Array[File] greeting_files = glob("*_greeting.txt")
    }       
 }
```

## Task-Ausgaben für Nextflow
<a name="workflow-task-outputs-nextflow"></a>

Definieren Sie für in Nextflow geschriebene Workflow-Definitionen eine **publishDir-Direktive**, um Aufgabeninhalte in Ihren Amazon S3 S3-Ausgabe-Bucket zu exportieren. Setzen Sie den Wert **publishDir** auf. `/mnt/workflow/pubdir` 

 HealthOmics Um Dateien nach Amazon S3 exportieren zu können, müssen sich die Dateien in diesem Verzeichnis befinden.

Wenn eine Aufgabe eine Gruppe von Ausgabedateien erzeugt, die als Eingaben für eine nachfolgende Aufgabe verwendet werden sollen, empfehlen wir, diese Dateien in einem Verzeichnis zu gruppieren und das Verzeichnis als Aufgabenausgabe auszugeben. Das Aufzählen jeder einzelnen Datei kann zu einem I/O-Engpass im zugrunde liegenden Dateisystem führen. Zum Beispiel:

```
process my_task {
      ...
      // recommended
      output "output-folder/", emit: output
      
      // not recommended
      // output "output-folder/**", emit: output
      ...
  }
```

## Aufgabenausgaben für CWL
<a name="workflow-task-outputs-cwl"></a>

Bei in CWL geschriebenen Workflow-Definitionen können Sie die Aufgabenausgaben mithilfe von `CommandLineTool` Aufgaben angeben. Die folgenden Abschnitte zeigen Beispiele für `CommandLineTool` Aufgaben, die verschiedene Arten von Ausgaben definieren.

**Topics**
+ [Aufgabenausgabe für STDOUT](#task-outputs-cwl-stdout)
+ [Aufgabenausgabe für STDERR](#task-outputs-cwl-stderr)
+ [Ausgabe der Aufgabe in eine Datei](#task-outputs-cwl-file)
+ [Ausgabe der Aufgabe in ein Array von Dateien](#task-outputs-cwl-files)

### Aufgabenausgabe für STDOUT
<a name="task-outputs-cwl-stdout"></a>

In diesem Beispiel wird eine `CommandLineTool` Aufgabe erstellt, die den STDOUT-Inhalt in einer Textausgabedatei mit dem Namen wiedergibt. **output.txt** **Wenn Sie beispielsweise die folgende Eingabe angeben, lautet die resultierende Aufgabenausgabe Hello World\$1** in der **output.txt** Datei.

```
{
    "message": "Hello World!"
}
```

Die `outputs` Direktive gibt an, dass der Ausgabename **example\$1out** und der Typ lauten`stdout`. Damit eine Downstream-Aufgabe die Ausgabe dieser Aufgabe verarbeitet, würde sie die Ausgabe als bezeichnen`example_out`.

Da Protokolle für den gesamten STDERR- und STDOUT-Inhalt HealthOmics erstellt werden, wird die Ausgabe zusammen mit anderen CloudWatch STDERR-Protokollierungsinformationen für die Aufgabe auch in Logs angezeigt.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: echo
stdout: output.txt
inputs:
  message:
    type: string
    inputBinding:
      position: 1
outputs:
  example_out:
    type: stdout

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Aufgabenausgabe für STDERR
<a name="task-outputs-cwl-stderr"></a>

In diesem Beispiel wird eine `CommandLineTool` Aufgabe erstellt, die den STDERR-Inhalt in einer Textausgabedatei mit dem Namen wiedergibt. **stderr.txt** Die Aufgabe ändert die `baseCommand` so, dass sie in STDERR (statt STDOUT) `echo` schreibt.

Die `outputs` Direktive gibt an, dass der Ausgabename **stderr\$1out** und der Typ lautet. `stderr` 

Da Protokolle für den gesamten STDERR- und STDOUT-Inhalt HealthOmics erstellt werden, wird die Ausgabe zusammen mit anderen CloudWatch STDERR-Protokollierungsinformationen für die Aufgabe in Logs angezeigt.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [bash, -c]
stderr: stderr.txt
inputs:
  message:
    type: string
    inputBinding:
      position: 1
      shellQuote: true
      valueFrom: "echo $(self) >&2"
outputs:
  stderr_out:
    type: stderr

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Ausgabe der Aufgabe in eine Datei
<a name="task-outputs-cwl-file"></a>

In diesem Beispiel wird eine `CommandLineTool` Aufgabe erstellt, die aus den Eingabedateien ein komprimiertes Tar-Archiv erstellt. Sie geben den Namen des Archivs als Eingabeparameter an (archive\$1name). 

Die **outputs** Direktive gibt an, dass der `archive_file` Ausgabetyp ist`File`, und sie verwendet einen Verweis auf den Eingabeparameter`archive_name`, um eine Bindung an die Ausgabedatei herzustellen.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: [tar, cfz]
inputs:
  archive_name:
    type: string
    inputBinding:
      position: 1
  input_files:
    type: File[]
    inputBinding:
      position: 2
      
outputs:
  archive_file:
    type: File
    outputBinding:
      glob: "$(inputs.archive_name)"

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

### Ausgabe der Aufgabe in ein Array von Dateien
<a name="task-outputs-cwl-files"></a>

In diesem Beispiel erstellt die `CommandLineTool` Aufgabe mithilfe des `touch` Befehls ein Array von Dateien. Der Befehl verwendet die Zeichenketten im `files-to-create` Eingabeparameter, um die Dateien zu benennen. Der Befehl gibt ein Array von Dateien aus. Das Array enthält alle Dateien im Arbeitsverzeichnis, die dem `glob` Muster entsprechen. In diesem Beispiel wird ein Platzhaltermuster („\$1“) verwendet, das allen Dateien entspricht.

```
cwlVersion: v1.2
class: CommandLineTool
baseCommand: touch
inputs:
  files-to-create:
    type:
      type: array
      items: string
    inputBinding:
      position: 1
outputs:
  output-files:
    type:
      type: array
      items: File
    outputBinding:
      glob: "*"

requirements:
    DockerRequirement:
        dockerPull: 123456789012.dkr.ecr.us-east-1.amazonaws.com/dockerhub/library/ubuntu:20.04
    ResourceRequirement:
        ramMin: 2048
        coresMin: 1
```

# Aufgabenressourcen in einer HealthOmics Workflow-Definition
<a name="task-resources"></a>

Definieren Sie in der Workflow-Definition für jede Aufgabe Folgendes:
+ Das Container-Image für die Aufgabe. Weitere Informationen finden Sie unter [Container-Images für private Workflows](workflows-ecr.md).
+ Die Anzahl CPUs und der für die Aufgabe benötigte Speicher. Weitere Informationen finden Sie unter [Rechen- und Speicheranforderungen für HealthOmics Aufgaben](memory-and-compute-tasks.md).

HealthOmics ignoriert alle Speicherspezifikationen pro Aufgabe. HealthOmics stellt Ausführungsspeicher bereit, auf den alle Aufgaben in der Ausführung zugreifen können. Weitere Informationen finden Sie unter [Speichertypen in HealthOmics Workflows ausführen](workflows-run-types.md).

------
#### [ WDL ]

```
task my_task {
   runtime {
      container: "<aws-account-id>.dkr.ecr.<aws-region>.amazonaws.com/<image-name>"
      cpu: 2
      memory: "4 GB"
   }
   ...
}
```

Bei einem WDL-Workflow werden bis zu zwei HealthOmics Wiederholungsversuche für eine Aufgabe versucht, die aufgrund von Dienstfehlern fehlschlägt (die API-Anfrage gibt einen 5XX-HTTP-Statuscode zurück). Weitere Informationen zu Wiederholungsversuchen von Aufgaben finden Sie unter. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

Sie können das Wiederholungsverhalten deaktivieren, indem Sie die folgende Konfiguration für die Aufgabe in der WDL-Definitionsdatei angeben:

```
runtime {
   preemptible: 0
}
```

------
#### [ NextFlow ]

```
process my_task {
   container "<aws-account-id>.dkr.ecr.<aws-region>.amazonaws.com/<image-name>"
   cpus 2
   memory "4 GiB"
   ...
}
```

------
#### [ CWL ]

```
cwlVersion: v1.2
class: CommandLineTool
requirements:
    DockerRequirement:
        dockerPull: "<aws-account-id>.dkr.ecr.<aws-region>.amazonaws.com/<image-name>"
    ResourceRequirement:
        coresMax: 2
        ramMax: 4000 # specified in mebibytes
```

------

# Aufgabenbeschleuniger in einer Workflow-Definition HealthOmics
<a name="task-accelerators"></a>

In der Workflow-Definition können Sie optional die GPU-Beschleuniger-Spezifikation für eine Aufgabe angeben. HealthOmics unterstützt die folgenden Beschleunigerspezifikationswerte zusammen mit den unterstützten Instanztypen:


| Beschleuniger-Spezifikation | Instanztypen von Healthomics | 
| --- | --- | 
| nvidia-tesla-t4 | G4 | 
| nvidia-tesla-t4-a 10 g | G4 und G5 | 
| nvidia-tesla-a10 g | G5 | 
| nvidia-t4-a10g-l4 | G4, G5 und G6 | 
| nvidia-l4-a10g | G5 und G6 | 
| nvidia-l4 | G6 | 
| nvidia-l40 s | G6e | 

Wenn Sie einen Beschleunigertyp angeben, der mehrere Instance-Typen unterstützt, HealthOmics wählt der Instance-Typ auf der Grundlage der verfügbaren Kapazität aus. Wenn beide Instance-Typen verfügbar sind HealthOmics , wird die kostengünstigere Instanz bevorzugt. Die Ausnahme bildet der Task Accelerator nvidia-t4-a10g-l4, der der verfügbaren Instanz der neuesten Generation den Vorzug gibt.

Einzelheiten zu den Instanztypen [Instanzen für beschleunigte Datenverarbeitung](memory-and-compute-tasks.md#workflow-task-accelerated-computing-instances) finden Sie unter.

Im folgenden Beispiel gibt die Workflow-Definition `nvidia-l4` als Beschleuniger an:

------
#### [ WDL ]

```
task my_task {
 runtime {
    ...
    acceleratorCount: 1
    acceleratorType: "nvidia-l4"
 }
 ...
}
```

------
#### [ NextFlow ]

```
process my_task {
 ...
 accelerator 1, type: "nvidia-l4"
 ...
}
```

------
#### [ CWL ]

```
cwlVersion: v1.2
class: CommandLineTool
requirements:
  ...
  cwltool:CUDARequirement:
      cudaDeviceCountMin: 1
      cudaComputeCapability: "nvidia-l4"
      cudaVersionMin: "1.0"
```

------

# Besonderheiten der WDL-Workflow-Definition
<a name="workflow-languages-wdl"></a>

Die folgenden Themen enthalten Einzelheiten zu den Typen und Anweisungen, die für WDL-Workflow-Definitionen in verfügbar sind. HealthOmics

**Topics**
+ [Implizite Typkonvertierung in WDL Lenient](#workflow-wdl-type-conversion)
+ [Namespace-Definition in input.json](#workflow-wdl-namespace-defn)
+ [Primitive Typen in WDL](#workflow-wdl-primitive-types)
+ [Komplexe Typen in WDL](#workflow-wdl-complex-types)
+ [Richtlinien in WDL](#workflow-wdl-directives)
+ [Aufgaben-Metadaten in WDL](#workflow-wdl-task-metadata)
+ [Beispiel für eine WDL-Workflow-Definition](#wdl-example)

## Implizite Typkonvertierung in WDL Lenient
<a name="workflow-wdl-type-conversion"></a>

HealthOmics unterstützt die implizite Typkonvertierung in der Datei input.json und der Workflow-Definition. Um implizite Typumwandlung zu verwenden, geben Sie bei der Erstellung des Workflows für die Workflow-Engine den Wert WDL Lenient an. WDL Lenient wurde für Workflows entwickelt, die von Cromwell migriert wurden. Es unterstützt Cromwell-Richtlinien von Kunden und einige nichtkonforme Logiken.

[WDL Lenient unterstützt die Typkonvertierung für die folgenden Elemente in der Liste der eingeschränkten Ausnahmen von WDL:](https://github.com/openwdl/wdl/blob/wdl-1.2/SPEC.md#-limited-exceptions)
+ Float wird in Int umgewandelt, wobei der Zwang zu keinem Genauigkeitsverlust führt (z. B. 1,0 entspricht 1).
+ Von String zu Int/Float, wobei der Zwang zu keinem Genauigkeitsverlust führt.
+ Ordnen Sie [W, X] dem Array [Pair [Y, Z]] zu, falls W gegen Y und X gegen Z erzwingbar ist.
+ Ordnen Sie [Paar [W, X]] an, um [Y, Z] zuzuordnen, falls W gegen Y und X gegen Z erzwingbar ist (z. B. 1,0 entspricht 1).

Um implizites Typ-Casting zu verwenden, geben Sie die Workflow-Engine als WDL\$1LENIENT an, wenn Sie den Workflow oder die Workflow-Version erstellen.

**In der Konsole heißt der Workflow-Engine-Parameter Language.** In der API heißt der Workflow-Engine-Parameter **Engine**. Für weitere Informationen siehe [Erstellen Sie einen privaten Workflow](create-private-workflow.md) oder [Workflow-Version erstellen](workflows-version-create.md).

## Namespace-Definition in input.json
<a name="workflow-wdl-namespace-defn"></a>

HealthOmics unterstützt vollständig qualifizierte Variablen in input.json. Wenn Sie beispielsweise zwei Eingabevariablen mit den Namen number1 und number2 im Workflow deklarieren: **SumWorkflow**

```
workflow SumWorkflow {
  input {
    Int number1
    Int number2
  }
}
```

 Sie können sie als vollqualifizierte Variablen in input.json verwenden: 

```
{
    "SumWorkflow.number1": 15,
    "SumWorkflow.number2": 27
}
```

## Primitive Typen in WDL
<a name="workflow-wdl-primitive-types"></a>

Die folgende Tabelle zeigt, wie Eingaben in WDL den entsprechenden primitiven Typen zugeordnet werden. HealthOmics bietet eingeschränkte Unterstützung für Typenzwang, daher empfehlen wir, explizite Typen festzulegen. 


**Primitive Typen**  

| WDL-Typ | JSON-Typ | Beispiel WDL | Beispiel für einen JSON-Schlüssel und -Wert | Hinweise | 
| --- | --- | --- | --- | --- | 
| Boolean | boolean | Boolean b | "b": true | Der Wert muss in Kleinbuchstaben geschrieben werden und darf keine Anführungszeichen enthalten. | 
| Int | integer | Int i | "i": 7 | Darf nicht in Anführungszeichen gesetzt werden. | 
| Float | number | Float f | "f": 42.2 | Darf nicht in Anführungszeichen stehen. | 
| String | string | String s | "s": "characters" | JSON-Zeichenfolgen, die eine URI sind, müssen einer zu importierenden WDL-Datei zugeordnet werden. | 
| File | string | File f | "f": "s3://amzn-s3-demo-bucket1/path/to/file" | Amazon S3 und HealthOmics Speicher URIs werden importiert, solange die für den Workflow bereitgestellte IAM-Rolle Lesezugriff auf diese Objekte hat. Andere URI-Schemas werden nicht unterstützt (wie file://https://, undftp://). Die URI muss ein Objekt angeben. Es kann kein Verzeichnis sein, was bedeutet, dass es nicht mit einem enden kann/. | 
| Directory | string | Directory d | "d": "s3://bucket/path/" | Der Directory Typ ist nicht in WDL 1.0 oder 1.1 enthalten, daher müssen Sie ihn zum Header der WDL-Datei hinzufügenversion development. Die URI muss eine Amazon S3 S3-URI sein und ein Präfix haben, das mit einem '/' endet. Der gesamte Inhalt des Verzeichnisses wird rekursiv als einziger Download in den Workflow kopiert. Der Directory sollte nur Dateien enthalten, die sich auf den Workflow beziehen. | 

## Komplexe Typen in WDL
<a name="workflow-wdl-complex-types"></a>

Die folgende Tabelle zeigt, wie Eingaben in WDL den entsprechenden komplexen JSON-Typen zugeordnet werden. Komplexe Typen in WDL sind Datenstrukturen, die aus primitiven Typen bestehen. Datenstrukturen wie Listen werden in Arrays umgewandelt.


**Komplexe Typen**  

| Typ WDL | JSON-Typ | Beispiel WDL | Beispiel für einen JSON-Schlüssel und -Wert | Hinweise | 
| --- | --- | --- | --- | --- | 
| Array | array | Array[Int] nums | “nums": [1, 2, 3] | Die Mitglieder des Arrays müssen dem Format des WDL-Arraytyps folgen. | 
| Pair | object | Pair[String, Int] str\$1to\$1i | “str\$1to\$1i": \$1"left": "0", "right": 1\$1 | Jeder Wert des Paares muss das JSON-Format des entsprechenden WDL-Typs verwenden. | 
| Map | object | Map[Int, String] int\$1to\$1string | "int\$1to\$1string": \$1 2: "hello", 1: "goodbye" \$1 | Jeder Eintrag in der Map muss das JSON-Format des entsprechenden WDL-Typs verwenden. | 
| Struct | object | <pre>struct SampleBamAndIndex { <br />  String sample_name <br />  File bam <br />  File bam_index <br />} SampleBamAndIndex b_and_i</pre>  |  <pre>"b_and_i": { <br />   "sample_name": "NA12878", <br />   "bam": "s3://amzn-s3-demo-bucket1/NA12878.bam", <br />   "bam_index": "s3://amzn-s3-demo-bucket1/NA12878.bam.bai" <br />}           </pre>  | Die Namen der Strukturmitglieder müssen exakt mit den Namen der JSON-Objektschlüssel übereinstimmen. Jeder Wert muss das JSON-Format des entsprechenden WDL-Typs verwenden. | 
| Object | – | – | – | Der Object WDL-Typ ist veraltet und sollte Struct in jedem Fall durch ersetzt werden. | 

## Richtlinien in WDL
<a name="workflow-wdl-directives"></a>

HealthOmics unterstützt die folgenden Direktiven in allen WDL-Versionen, die HealthOmics sie unterstützen.

### GPU-Ressourcen konfigurieren
<a name="workflow-wdl-directive-gpu"></a>

HealthOmics unterstützt Laufzeitattribute **acceleratorType** und **acceleratorCount** mit allen unterstützten [GPU-Instanzen](https://docs.aws.amazon.com/omics/latest/dev/task-accelerators.html). HealthOmics unterstützt auch Aliase mit dem Namen **gpuType** und**gpuCount**, die dieselbe Funktionalität wie ihre Accelerator-Gegenstücke haben. Wenn die WDL-Definition beide Direktiven enthält, HealthOmics verwendet die Beschleunigerwerte.

Das folgende Beispiel zeigt, wie diese Direktiven verwendet werden:

```
runtime {
    gpuCount: 2
    gpuType: "nvidia-tesla-t4"
}
```

### Konfigurieren Sie die Aufgabenwiederholung bei Servicefehlern
<a name="workflow-wdl-task-retry"></a>

HealthOmics unterstützt bis zu zwei Wiederholungen für eine Aufgabe, die aufgrund von Dienstfehlern fehlgeschlagen ist (5XX-HTTP-Statuscodes). Sie können die maximale Anzahl von Wiederholungen (1 oder 2) konfigurieren und Wiederholungen aufgrund von Servicefehlern deaktivieren. Standardmäßig werden maximal zwei Wiederholungen HealthOmics versucht. 

Das folgende Beispiel legt fest`preemptible`, dass Wiederholungsversuche bei Dienstfehlern deaktiviert werden:

```
{
  preemptible: 0 
}
```

Weitere Hinweise zu Wiederholungsversuchen von Aufgaben finden Sie unter HealthOmics. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

### Konfigurieren Sie die Aufgabenwiederholung bei fehlendem Arbeitsspeicher
<a name="workflow-wdl-retries"></a>

HealthOmics unterstützt Wiederholungsversuche für eine Aufgabe, die fehlgeschlagen ist, weil ihr nicht genügend Speicherplatz zur Verfügung stand (Container-Exitcode 137, 4XX HTTP-Statuscode). HealthOmics verdoppelt die Speichermenge für jeden Wiederholungsversuch.

Standardmäßig versucht es bei dieser Art von Fehler HealthOmics nicht erneut. Verwenden Sie die `maxRetries` Direktive, um die maximale Anzahl von Wiederholungen anzugeben.

Im folgenden Beispiel wird der `maxRetries` Wert auf 3 gesetzt, sodass HealthOmics maximal vier Versuche unternommen werden, die Aufgabe abzuschließen (der erste Versuch plus drei Wiederholungen):

```
runtime {
    maxRetries: 3
}
```

**Anmerkung**  
Für die Wiederholung der Aufgabe bei fehlendem Arbeitsspeicher sind GNU Findutils 4.2.3\$1 erforderlich. Der Standard-Image-Container enthält dieses Paket HealthOmics . Wenn Sie in Ihrer WDL-Definition ein benutzerdefiniertes Bild angeben, stellen Sie sicher, dass das Bild GNU Findutils 4.2.3\$1 enthält.

### Konfigurieren Sie Rückgabecodes
<a name="workflow-wdl-directive-returnCodes"></a>

Das **ReturnCodes-Attribut** bietet einen Mechanismus zur Angabe eines Rückgabecodes oder einer Reihe von Rückgabecodes, die auf eine erfolgreiche Ausführung einer Aufgabe hinweisen. Das WDL-Modul berücksichtigt die Rückgabecodes, die Sie im **Runtime-Abschnitt** der WDL-Definition angeben, und legt den Aufgabenstatus entsprechend fest. 

```
runtime {
    returnCodes: 1
}
```

HealthOmics **unterstützt auch einen Alias namens **continueOnReturnCode**, der dieselben Funktionen wie ReturnCodes hat.** Wenn Sie beide Attribute angeben, wird der **ReturnCodes-Wert HealthOmics ** verwendet.

## Aufgaben-Metadaten in WDL
<a name="workflow-wdl-task-metadata"></a>

HealthOmics unterstützt die folgenden Metadatenoptionen für WDL-Aufgaben.

### Deaktivieren Sie das Caching auf Aufgabenebene mit dem Attribut volatile
<a name="workflow-wdl-volatile-attribute"></a>

Mit dem **flüchtigen** Attribut können Sie das Caching von Anrufen für bestimmte Aufgaben in Ihrem WDL-Workflow deaktivieren. Wenn eine Aufgabe als flüchtig markiert ist, wird sie immer ausgeführt und verwendet niemals zwischengespeicherte Ergebnisse, selbst wenn das Caching für die Ausführung aktiviert ist.

Fügen Sie das **flüchtige** Attribut zum **Metabereich** Ihrer Aufgabendefinition hinzu:

```
task my_volatile_task {
    meta {
        volatile: true
    }
    
    input {
        String input_file
    }
    
    command {
        echo "Processing ${input_file}" > output.txt
    }
    
    output {
        File result = "output.txt"
    }
}
```

## Beispiel für eine WDL-Workflow-Definition
<a name="wdl-example"></a>

Die folgenden Beispiele zeigen private Workflow-Definitionen für die Konvertierung von `CRAM` zu `BAM` in WDL. Der `CRAM` `BAM` To-Workflow definiert zwei Aufgaben und verwendet Tools aus dem `genomes-in-the-cloud` Container, der im Beispiel gezeigt wird und öffentlich verfügbar ist. 

Das folgende Beispiel zeigt, wie der Amazon ECR-Container als Parameter eingebunden wird. Auf diese Weise können HealthOmics Sie die Zugriffsberechtigungen für Ihren Container überprüfen, bevor der Run gestartet wird.

```
{
   ...
   "gotc_docker":"<account_id>.dkr.ecr.<region>.amazonaws.com/genomes-in-the-cloud:2.4.7-1603303710"
}
```

Das folgende Beispiel zeigt, wie Sie angeben, welche Dateien in Ihrem Lauf verwendet werden sollen, wenn sich die Dateien in einem Amazon S3 S3-Bucket befinden.

```
{
    "input_cram": "s3://amzn-s3-demo-bucket1/inputs/NA12878.cram",
    "ref_dict": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.dict",
    "ref_fasta": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta",
    "ref_fasta_index": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta.fai",
    "sample_name": "NA12878"
}
```

Wenn Sie Dateien aus einem Sequenzspeicher angeben möchten, geben Sie dies wie im folgenden Beispiel gezeigt an, indem Sie den URI für den Sequenzspeicher verwenden.

```
{
    "input_cram": "omics://429915189008.storage.us-west-2.amazonaws.com/111122223333/readSet/4500843795/source1",
    "ref_dict": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.dict",
    "ref_fasta": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta",
    "ref_fasta_index": "s3://amzn-s3-demo-bucket1/inputs/Homo_sapiens_assembly38.fasta.fai",
    "sample_name": "NA12878"
}
```

Anschließend können Sie Ihren Workflow in WDL definieren, wie im folgenden Beispiel gezeigt. 

```
 version 1.0
workflow CramToBamFlow {
    input {
        File ref_fasta
        File ref_fasta_index
        File ref_dict
        File input_cram
        String sample_name
        String gotc_docker = "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-
cloud:latest"
    }
    #Converts CRAM to SAM to BAM and makes BAI.
    call CramToBamTask{
         input:
            ref_fasta = ref_fasta,
            ref_fasta_index = ref_fasta_index,
            ref_dict = ref_dict,
            input_cram = input_cram,
            sample_name = sample_name,
            docker_image = gotc_docker,
     }
     #Validates Bam.
     call ValidateSamFile{
        input:
           input_bam = CramToBamTask.outputBam,
           docker_image = gotc_docker,
     }
     #Outputs Bam, Bai, and validation report to the FireCloud data model.
     output {
         File outputBam = CramToBamTask.outputBam
         File outputBai = CramToBamTask.outputBai
         File validation_report = ValidateSamFile.report
      }
}
#Task definitions.
task CramToBamTask {
    input {
       # Command parameters
       File ref_fasta
       File ref_fasta_index
       File ref_dict
       File input_cram
       String sample_name
       # Runtime parameters
       String docker_image
    }
   #Calls samtools view to do the conversion.
   command {
       set -eo pipefail

       samtools view -h -T ~{ref_fasta} ~{input_cram} |
       samtools view -b -o ~{sample_name}.bam -
       samtools index -b ~{sample_name}.bam
       mv ~{sample_name}.bam.bai ~{sample_name}.bai
    }
    
    #Runtime attributes:
    runtime {
        docker: docker_image
    }

    #Outputs a BAM and BAI with the same sample name
     output {
         File outputBam = "~{sample_name}.bam"
         File outputBai = "~{sample_name}.bai"
    }
}

#Validates BAM output to ensure it wasn't corrupted during the file conversion.
task ValidateSamFile {
   input {
      File input_bam
      Int machine_mem_size = 4
      String docker_image
   }
   String output_name = basename(input_bam, ".bam") + ".validation_report"
   Int command_mem_size = machine_mem_size - 1
   command {
       java -Xmx~{command_mem_size}G -jar /usr/gitc/picard.jar \
       ValidateSamFile \
       INPUT=~{input_bam} \
       OUTPUT=~{output_name} \
       MODE=SUMMARY \
       IS_BISULFITE_SEQUENCED=false
    }
    runtime {
    docker: docker_image
    }
   #A text file is generated that lists errors or warnings that apply.
    output {
        File report = "~{output_name}"
    }
}
```

# Einzelheiten der Nextflow-Workflow-Definition
<a name="workflow-definition-nextflow"></a>

HealthOmics unterstützt DSL1 Nextflow und. DSL2 Details hierzu finden Sie unter [Unterstützung der Nextflow-Version](workflows-lang-versions.md#workflows-lang-versions-nextflow).

Nextflow DSL2 basiert auf der Programmiersprache Groovy, sodass Parameter dynamisch sind und Typenzwang nach den gleichen Regeln wie Groovy möglich ist. Parameter und Werte, die von der JSON-Eingabe bereitgestellt werden, sind in der Parameters () -Map des Workflows verfügbar. `params`

**Topics**
+ [Verwenden Sie die Plug-ins NF-Schema und NF-Validation](#schema-and-validation-plugins-nextflow)
+ [Speicher angeben URIs](#storage-uris-nextflow)
+ [Nextflow-Direktiven](#workflow-nexflow-directives)
+ [Inhalte auf Workflow-Ebene exportieren](#exporting-workflow-content-nextflow)
+ [Aufgabeninhalt exportieren](#exporting-task-content-nextflow)

## Verwenden Sie die Plug-ins NF-Schema und NF-Validation
<a name="schema-and-validation-plugins-nextflow"></a>

**Anmerkung**  
Zusammenfassung der Unterstützung für Plugins HealthOmics :  
v22.04 — keine Unterstützung für Plugins
v23.10 — unterstützt und `nf-schema` `nf-validation`
v24.10 — unterstützt `nf-schema`
v25.10 — unterstützt`nf-schema`,, und `nf-core-utils` `nf-fgbio` `nf-prov`

HealthOmics bietet die folgende Unterstützung für Nextflow-Plugins:
+ Für Nextflow v23.10 ist das Plugin nf-validation @1 HealthOmics .1.1 vorinstalliert. 
+ Für Nextflow v23.10 und höher wird das Plugin nf-schema @2 .3.0 vorinstalliert. HealthOmics 
+ Sie können während einer Workflow-Ausführung keine zusätzlichen Plugins abrufen. HealthOmics ignoriert alle anderen Plugin-Versionen, die Sie in der `nextflow.config` Datei angeben.
+ Für Nextflow v24 und höher `nf-schema` ist dies die neue Version des veralteten Plugins. `nf-validation` Weitere Informationen finden Sie unter [nf-schema im Nextflow-Repository](https://github.com/nextflow-io/nf-schema). GitHub

## Speicher angeben URIs
<a name="storage-uris-nextflow"></a>

Wenn ein Amazon S3 oder HealthOmics URI verwendet wird, um eine Nextflow-Datei oder ein Nextflow-Pfadobjekt zu erstellen, stellt es das entsprechende Objekt für den Workflow zur Verfügung, sofern Lesezugriff gewährt wird. Die Verwendung von Präfixen oder Verzeichnissen ist für Amazon S3 URIs zulässig. Beispiele finden Sie unter [Amazon S3 S3-Eingabeparameterformate](workflows-run-inputs.md#s3-run-input-formats). 

HealthOmics unterstützt teilweise die Verwendung von Glob Patterns in Amazon S3 URIs oder HealthOmics Storage URIs. Verwenden Sie Glob-Muster in der Workflow-Definition für die Erstellung von Or-Kanälen`path`. `file` Informationen zum erwarteten Verhalten und zu den genauen Fällen finden Sie unter[Nextflow-Behandlung von Glob-Mustern in Amazon S3 S3-Eingaben](workflows-run-inputs.md#wd-nextflow-s3-formats).

## Nextflow-Direktiven
<a name="workflow-nexflow-directives"></a>

Sie konfigurieren Nextflow-Direktiven in der Nextflow-Konfigurationsdatei oder Workflow-Definition. Die folgende Liste zeigt die Rangfolge, in der die HealthOmics Konfigurationseinstellungen angewendet werden, von der niedrigsten zur höchsten Priorität:

1. Globale Konfiguration in der Konfigurationsdatei.

1. Aufgabenbereich der Workflow-Definition.

1. Aufgabenspezifische Selektoren in der Konfigurationsdatei.

**Topics**
+ [Strategie zur Wiederholung von Aufgaben unter Verwendung von `errorStrategy`](#workflow-nextflow-errorStrategy)
+ [Versuche, Aufgaben erneut zu versuchen, verwenden `maxRetries`](#workflow-nexflow-task-retry)
+ [Deaktivieren Sie die Wiederholung von Aufgaben mit `omicsRetryOn5xx`](#workflow-nextflow-retry-5xx)
+ [Dauer der Aufgabe unter Verwendung der Direktive `time`](#time-directive-nextflow)

### Strategie zur Wiederholung von Aufgaben unter Verwendung von `errorStrategy`
<a name="workflow-nextflow-errorStrategy"></a>

Verwenden Sie die `errorStrategy` Direktive, um die Strategie für Aufgabenfehler zu definieren. Wenn eine Aufgabe mit einer Fehleranzeige (einem Exit-Status ungleich Null) zurückkehrt, wird die Aufgabe standardmäßig gestoppt und die gesamte HealthOmics Ausführung beendet. Wenn Sie `errorStrategy` auf festlegen, wird HealthOmics versucht`retry`, die fehlgeschlagene Aufgabe erneut zu versuchen. Informationen zur Erhöhung der Anzahl der Wiederholungen finden Sie unter. [Versuche, Aufgaben erneut zu versuchen, verwenden `maxRetries`](#workflow-nexflow-task-retry)

```
process {
    label 'my_label'
    errorStrategy 'retry'

    script:
    """
    your-command-here
    """
}
```

Informationen darüber, wie mit Wiederholungsversuchen HealthOmics von Aufgaben während einer Ausführung umgegangen wird, finden Sie unter. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

### Versuche, Aufgaben erneut zu versuchen, verwenden `maxRetries`
<a name="workflow-nexflow-task-retry"></a>

Führt standardmäßig HealthOmics keine Wiederholungsversuche für eine fehlgeschlagene Aufgabe durch, oder versucht einen erneuten Versuch, wenn Sie dies konfigurieren. `errorStrategy` Um die maximale Anzahl von Wiederholungen zu erhöhen, legen `errorStrategy` Sie die maximale Anzahl von Wiederholungen fest `retry` und konfigurieren Sie sie mithilfe der Direktive. `maxRetries`

Im folgenden Beispiel wird die maximale Anzahl von Wiederholungen in der globalen Konfiguration auf 3 festgelegt.

```
process {
    errorStrategy = 'retry'
    maxRetries = 3
}
```

Das folgende Beispiel zeigt, wie `maxRetries` im Aufgabenbereich der Workflow-Definition festgelegt wird.

```
process myTask {
    label 'my_label'
    errorStrategy 'retry'
    maxRetries 3
    
    script:
    """
    your-command-here
    """
}
```

Das folgende Beispiel zeigt, wie eine aufgabenspezifische Konfiguration in der Nextflow-Konfigurationsdatei auf der Grundlage der Namens- oder Labelselektoren angegeben wird.

```
process {
    withLabel: 'my_label' {
        errorStrategy = 'retry'
        maxRetries = 3
    }

    withName: 'myTask' {
        errorStrategy = 'retry'
        maxRetries = 3
    }
}
```

### Deaktivieren Sie die Wiederholung von Aufgaben mit `omicsRetryOn5xx`
<a name="workflow-nextflow-retry-5xx"></a>

 HealthOmics Unterstützt für Nextflow v23 und höher Aufgabenwiederholungen, wenn die Aufgabe aufgrund von Dienstfehlern fehlgeschlagen ist (5XX-HTTP-Statuscodes). Standardmäßig werden bis zu zwei HealthOmics Wiederholungen einer fehlgeschlagenen Aufgabe versucht. 

Sie können so konfigurieren`omicsRetryOn5xx`, dass die Wiederholung von Aufgaben bei Dienstfehlern deaktiviert wird. Weitere Informationen zur Wiederholung von Aufgaben finden Sie unter HealthOmics. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

Im folgenden Beispiel wird die globale Konfiguration so konfiguriert`omicsRetryOn5xx`, dass die Aufgabenwiederholung deaktiviert wird.

```
process {
    omicsRetryOn5xx = false
}
```

Das folgende Beispiel zeigt, wie die Konfiguration `omicsRetryOn5xx` im Aufgabenbereich der Workflow-Definition erfolgt.

```
process myTask {
    label 'my_label'
    omicsRetryOn5xx = false
    
    script:
    """
    your-command-here
    """
}
```

Das folgende Beispiel zeigt, wie eine aufgabenspezifische Konfiguration in der Nextflow-Konfigurationsdatei auf der Grundlage der Namens- oder Labelauswahl festgelegt `omicsRetryOn5xx` wird.

```
process {
    withLabel: 'my_label' {
        omicsRetryOn5xx = false
    }

    withName: 'myTask' {
        omicsRetryOn5xx = false
    }
}
```

### Dauer der Aufgabe unter Verwendung der Direktive `time`
<a name="time-directive-nextflow"></a>

HealthOmics stellt ein einstellbares Kontingent bereit (siehe[HealthOmics Servicekontingenten](service-quotas.md)), um die maximale Dauer eines Laufs anzugeben. Für Workflows mit Nextflow Version 23 und höher können Sie mithilfe der Nextflow-Direktive auch die maximale Aufgabendauer angeben. `time`

Bei der Entwicklung neuer Workflows hilft Ihnen die Festlegung der maximalen Aufgabendauer dabei, außer catch geratene Aufgaben und lang andauernde Aufgaben zu erkennen. 

Weitere Informationen zur Nextflow-Zeitdirektive finden Sie unter [Zeitdirektive](https://www.nextflow.io/docs/latest/reference/process.html#process-time) in der Nextflow-Referenz.

HealthOmics bietet die folgende Unterstützung für die Nextflow-Zeitdirektive:

1. HealthOmics unterstützt eine Granularität von 1 Minute für die Zeitdirektive. Sie können einen Wert zwischen 60 Sekunden und dem Wert für die maximale Laufzeit angeben.

1. Wenn Sie einen Wert unter 60 eingeben, wird HealthOmics dieser auf 60 Sekunden aufgerundet. Bei Werten über 60 wird auf die nächste Minute HealthOmics abgerundet.

1. Wenn der Workflow Wiederholungsversuche für eine Aufgabe unterstützt, versucht er die Aufgabe HealthOmics erneut, wenn das Timeout überschritten wird.

1. Wenn bei einer Aufgabe das Timeout überschritten wird (oder bei der letzten Wiederholung), wird die Aufgabe HealthOmics abgebrochen. Dieser Vorgang kann eine Dauer von ein bis zwei Minuten haben.

1. Bei Zeitüberschreitung der Aufgabe werden die Ausführung und der Aufgabenstatus auf Fehlgeschlagen gesetzt und die anderen Aufgaben in der Ausführung abgebrochen (für Aufgaben mit dem Status „Gestartet“, „Ausstehend“ oder „Wird ausgeführt“). HealthOmics HealthOmics exportiert die Ausgaben von Aufgaben, die vor dem Timeout abgeschlossen wurden, an den von Ihnen angegebenen S3-Ausgabespeicherort. 

1. Die Zeit, die eine Aufgabe im Status „Ausstehend“ verbringt, wird nicht auf die Dauer der Aufgabe angerechnet.

1. Wenn die Ausführung Teil einer Ausführungsgruppe ist und das Timeout der Ausführungsgruppe vor Ablauf des Task-Timers abläuft, gehen Ausführung und Task in den Status Fehlgeschlagen über.

Geben Sie die Timeoutdauer mit einer oder mehreren der folgenden Einheiten an:`ms`,`s`, `m``h`, oder`d`.

Das folgende Beispiel zeigt, wie die globale Konfiguration in der Nextflow-Konfigurationsdatei angegeben wird. Es legt ein globales Timeout von 1 Stunde und 30 Minuten fest.

```
process {
    time = '1h30m'
}
```

Das folgende Beispiel zeigt, wie eine Zeitanweisung im Aufgabenbereich der Workflow-Definition angegeben wird. In diesem Beispiel wird ein Timeout von 3 Tagen, 5 Stunden und 4 Minuten festgelegt. Dieser Wert hat Vorrang vor dem globalen Wert in der Konfigurationsdatei, hat jedoch keinen Vorrang vor einer aufgabenspezifischen Zeitanweisung für `my_label` in der Konfigurationsdatei.

```
process myTask {
    label 'my_label'
    time '3d5h4m'
        
    script:
    """
    your-command-here
    """
}
```

Das folgende Beispiel zeigt, wie aufgabenspezifische Zeitdirektiven in der Nextflow-Konfigurationsdatei auf der Grundlage der Namens- oder Labelselektoren angegeben werden. In diesem Beispiel wird ein globaler Task-Timeout-Wert von 30 Minuten festgelegt. Es legt einen Wert von 2 Stunden für eine Aufgabe `myTask` und einen Wert von 3 Stunden für Aufgaben mit Bezeichnung `my_label` fest. Bei Aufgaben, die dem Selektor entsprechen, haben diese Werte Vorrang vor dem globalen Wert und dem Wert in der Workflow-Definition.

```
process {
    time = '30m'
    
    withLabel: 'my_label' {
        time = '3h'  
    }

    withName: 'myTask' {
        time = '2h'  
    }
}
```

## Inhalte auf Workflow-Ebene exportieren
<a name="exporting-workflow-content-nextflow"></a>

Für Nextflow v25.10 können Sie Dateien exportieren, die außerhalb einzelner Aufgaben erstellt wurden, z. B. Provenienzberichte oder Pipelines. DAGs Um diese Dateien zu exportieren, schreiben Sie sie in. `/mnt/workflow/output/` HealthOmics exportiert Dateien, die sich in diesem Verzeichnis befinden, an das `output/` Präfix im Amazon S3 S3-Ausgabespeicherort Ihres Laufs.

Das folgende Beispiel zeigt, wie Sie das `nf-prov` Plugin konfigurieren, für das ein Herkunftsbericht geschrieben werden soll`/mnt/workflow/output/`.

```
prov {
    formats {
        bco {
            file = "/mnt/workflow/output/pipeline_info/manifest.bco.json"
        }
    }
}
```

Sie können diesen Pfad auch als Parameter in der JSON-Eingabe Ihres Laufs übergeben. Dieser Ansatz ist bei NF-Core-Workflows üblich, die verwenden. `params.outdir`

```
{
    "outdir": "/mnt/workflow/output/"
}
```

## Aufgabeninhalt exportieren
<a name="exporting-task-content-nextflow"></a>

Definieren Sie für in Nextflow geschriebene Workflows eine **PublishDir-Direktive**, um Aufgabeninhalte in Ihren Amazon S3 S3-Ausgabe-Bucket zu exportieren. Wie im folgenden Beispiel gezeigt, setzen Sie den Wert **publishDir** auf. `/mnt/workflow/pubdir` Um Dateien nach Amazon S3 zu exportieren, müssen sich die Dateien in diesem Verzeichnis befinden.

```
 nextflow.enable.dsl=2
              
  workflow {
    CramToBamTask(params.ref_fasta, params.ref_fasta_index, params.ref_dict, params.input_cram, params.sample_name)
    ValidateSamFile(CramToBamTask.out.outputBam)
  }
  
  process CramToBamTask {
    container "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-cloud"
  
    publishDir "/mnt/workflow/pubdir"
  
    input:
        path ref_fasta
        path ref_fasta_index
        path ref_dict
        path input_cram
        val sample_name
  
    output:
        path "${sample_name}.bam", emit: outputBam
        path "${sample_name}.bai", emit: outputBai
  
    script:
    """
        set -eo pipefail
  
        samtools view -h -T $ref_fasta $input_cram |
        samtools view -b -o ${sample_name}.bam -
        samtools index -b ${sample_name}.bam
        mv ${sample_name}.bam.bai ${sample_name}.bai
    """
  }
  
  process ValidateSamFile {
    container "<account>.dkr.ecr.us-west-2.amazonaws.com/genomes-in-the-cloud"
  
    publishDir "/mnt/workflow/pubdir"
  
    input:
        file input_bam
  
    output:
        path "validation_report"
  
    script:
    """
        java -Xmx3G -jar /usr/gitc/picard.jar \
        ValidateSamFile \
        INPUT=${input_bam} \
        OUTPUT=validation_report \
        MODE=SUMMARY \
        IS_BISULFITE_SEQUENCED=false
    """
  }
```

Für Nextflow v25.10 können Sie alternativ Workflow-Ausgaben verwenden`publishDir`, um Aufgabeninhalte zu exportieren. Das folgende Beispiel zeigt, wie ein `output` Workflow-Block definiert wird, der Aufgabenergebnisse nach Amazon S3 exportiert.

```
process myTask {
    input:
    val data

    output:
    path 'result.txt'

    script:
    """
    echo ${data} > result.txt
    """
}

workflow {
    main:
    output_file = myTask('hello')

    publish:
    results = output_file
}

output {
    results {
        path '.'
    }
}
```

Weitere Informationen zu Workflow-Ausgaben finden Sie unter [Workflow-Ausgaben](https://www.nextflow.io/docs/latest/workflow.html#workflow-output-def) in der Nextflow-Dokumentation.

# Besonderheiten der CWL-Workflow-Definition
<a name="workflow-languages-cwl"></a>

Workflows, die in Common Workflow Language (CWL) geschrieben wurden, bieten ähnliche Funktionen wie Workflows, die in WDL und Nextflow geschrieben wurden. Sie können Amazon S3 oder HealthOmics Storage URIs als Eingabeparameter verwenden. 

Wenn Sie die Eingabe in einer SecondaryFile in einem Unter-Workflow definieren, fügen Sie dieselbe Definition im Haupt-Workflow hinzu.

HealthOmics Workflows unterstützen keine Betriebsprozesse. Weitere Informationen zu Betriebsprozessen in CWL-Workflows finden Sie in der [CWL-Dokumentation](https://www.commonwl.org/user_guide/topics/operations.html).

Es hat sich bewährt, für jeden Container, den Sie verwenden, einen separaten CWL-Workflow zu definieren. Wir empfehlen, den DockerPull-Eintrag nicht mit einer festen Amazon ECR-URI fest zu codieren.

**Topics**
+ [Konvertieren Sie die zu verwendenden CWL-Workflows HealthOmics](#workflow-cwl-convert)
+ [Deaktivieren Sie die Aufgabenwiederholung mit `omicsRetryOn5xx`](#workflow-cwl-retry-5xx)
+ [Einen Workflow-Schritt wiederholen](#workflow-cwl-loop)
+ [Führen Sie Aufgaben mit mehr Arbeitsspeicher erneut aus](#workflow-cwl-out-of-memory-retry)
+ [Beispiele](#workflow-cwl-examples)

## Konvertieren Sie die zu verwendenden CWL-Workflows HealthOmics
<a name="workflow-cwl-convert"></a>

Um eine bestehende CWL-Workflow-Definition zur Verwendung zu konvertieren HealthOmics, nehmen Sie die folgenden Änderungen vor:
+ Ersetzen Sie alle Docker-Container URIs durch Amazon URIs ECR.
+ Stellen Sie sicher, dass alle Workflow-Dateien im Haupt-Workflow als Eingabe deklariert sind und dass alle Variablen explizit definiert sind.
+ Stellen Sie sicher, dass der gesamte JavaScript Code Strict-Mode-konform ist.

## Deaktivieren Sie die Aufgabenwiederholung mit `omicsRetryOn5xx`
<a name="workflow-cwl-retry-5xx"></a>

HealthOmics unterstützt Aufgabenwiederholungen, wenn die Aufgabe aufgrund von Dienstfehlern fehlgeschlagen ist (5XX-HTTP-Statuscodes). Standardmäßig werden bis zu zwei Wiederholungen einer HealthOmics fehlgeschlagenen Aufgabe versucht. Weitere Hinweise zur Wiederholung von Aufgaben finden Sie unter HealthOmics. [Die Aufgabe wird erneut versucht](monitoring-runs.md#run-status-task-retries)

Um die Wiederholung von Aufgaben bei Servicefehlern zu deaktivieren, konfigurieren Sie die `omicsRetryOn5xx` Anweisung in der Workflow-Definition. Sie können diese Direktive unter Anforderungen oder Hinweisen definieren. Wir empfehlen, die Direktive als Hinweis für die Portabilität hinzuzufügen.

```
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false
```

Anforderungen haben Vorrang vor Hinweisen. Wenn eine Aufgabenimplementierung einen Ressourcenbedarf in Hinweisen enthält, der auch durch Anforderungen in einem umschließenden Workflow bereitgestellt wird, haben die einschließenden Anforderungen Vorrang.

Wenn dieselbe Aufgabenanforderung auf verschiedenen Ebenen des Workflows vorkommt, wird der spezifischste Eintrag von HealthOmics verwendet `requirements` (oder`hints`, falls es keine Einträge in gibt). `requirements` Die folgende Liste zeigt die Rangfolge, in der die HealthOmics Konfigurationseinstellungen angewendet werden, von der niedrigsten zur höchsten Priorität:
+ Workflow-Ebene
+ Schrittebene
+ Aufgabenbereich der Workflow-Definition

Das folgende Beispiel zeigt, wie die `omicsRetryOn5xx` Direktive auf verschiedenen Ebenen des Workflows konfiguriert wird. In diesem Beispiel hat die Anforderung auf Workflow-Ebene Vorrang vor den Hinweisen auf Workflow-Ebene. Die Anforderungskonfigurationen auf Aufgaben- und Schrittebene haben Vorrang vor den Hinweiskonfigurationen.

```
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
```

## Einen Workflow-Schritt wiederholen
<a name="workflow-cwl-loop"></a>

HealthOmics unterstützt die Schleife eines Workflow-Schritts. Sie können Schleifen verwenden, um Workflow-Schritte wiederholt auszuführen, bis eine bestimmte Bedingung erfüllt ist. Dies ist nützlich für iterative Prozesse, bei denen Sie eine Aufgabe mehrmals wiederholen müssen oder bis ein bestimmtes Ergebnis erreicht ist.

**Hinweis:** Für die Loop-Funktionalität ist CWL Version 1.2 oder höher erforderlich. Workflows, die CWL-Versionen vor 1.2 verwenden, unterstützen keine Loop-Operationen.

Um Loops in Ihrem CWL-Workflow zu verwenden, definieren Sie eine Loop-Anforderung. Das folgende Beispiel zeigt die Konfiguration der Loop-Anforderungen:

```
requirements:
  - class: "http://commonwl.org/cwltool#Loop"
    loopWhen: $(inputs.counter < inputs.max)
    loop:
      counter:
        loopSource: result
        valueFrom: $(self)
    outputMethod: last
```

Das `loopWhen` Feld steuert, wann die Schleife endet. In diesem Beispiel wird die Schleife fortgesetzt, solange der Zähler unter dem Maximalwert liegt. Das `loop` Feld definiert, wie Eingabeparameter zwischen den Iterationen aktualisiert werden. Das `loopSource` gibt an, welche Ausgabe der vorherigen Iteration in die nächste Iteration einfließen wird. Das `outputMethod` Feld, das auf gesetzt ist, `last` gibt nur die Ausgabe der letzten Iteration zurück.

## Führen Sie Aufgaben mit mehr Arbeitsspeicher erneut aus
<a name="workflow-cwl-out-of-memory-retry"></a>

HealthOmics unterstützt die automatische Wiederholung fehlgeschlagener out-of-memory Aufgaben. Wenn eine Aufgabe mit dem Code 137 (out-of-memory) beendet HealthOmics wird, wird eine neue Aufgabe mit erhöhter Speicherzuweisung auf der Grundlage des angegebenen Multiplikators erstellt.

**Anmerkung**  
HealthOmics wiederholt out-of-memory Fehler bis zu dreimal oder bis die Speicherzuweisung 1536 GiB erreicht, je nachdem, welcher Grenzwert zuerst erreicht wird.

Das folgende Beispiel zeigt, wie Wiederholungen konfiguriert werden: out-of-memory

```
hints:
  ResourceRequirement:
    ramMin: 4096
  http://arvados.org/cwl#OutOfMemoryRetry:
    memoryRetryMultiplier: 2.5
```

Wenn eine Aufgabe aufgrund von fehlschlägt out-of-memory, HealthOmics berechnet die Speicherzuweisung beim erneuten Versuch anhand der Formel:. `previous_run_memory × memoryRetryMultiplier` Wenn im obigen Beispiel die Aufgabe mit 4096 MB Arbeitsspeicher fehlschlägt, verwendet der Wiederholungsversuch 4096 × 2,5 = 10.240 MB Arbeitsspeicher.

Der `memoryRetryMultiplier` Parameter steuert, wie viel zusätzlicher Speicher für Wiederholungsversuche reserviert werden soll:
+ **Standardwert:** Wenn Sie keinen Wert angeben, wird der Standardwert verwendet `2` (verdoppelt den Speicher)
+ **Gültiger Bereich:** Muss eine positive Zahl größer als sein. `1` Ungültige Werte führen zu einem 4XX-Validierungsfehler
+ **Effektiver Mindestwert:** Werte zwischen `1` und `1.5` werden automatisch erhöht, `1.5` um eine sinnvolle Speichererweiterung sicherzustellen und übermäßige Wiederholungsversuche zu verhindern

## Beispiele
<a name="workflow-cwl-examples"></a>

Im Folgenden finden Sie ein Beispiel für einen in CWL geschriebenen Workflow. 

```
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
```

Die folgende Datei definiert die `copy.cwl` Aufgabe.

```
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)"
```

Im Folgenden finden Sie ein Beispiel für einen in CWL geschriebenen Workflow mit einer GPU-Anforderung.

```
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: []
```

# Beispiele für Workflow-Definitionen
<a name="workflow-definition-examples"></a>

Das folgende Beispiel zeigt dieselbe Workflow-Definition in WDL, Nextflow und CWL.

------
#### [ WDL ]

```
version 1.1

task my_task {
   runtime { ... }
   inputs {
       File input_file
       String name
       Int threshold
   }
   
   command <<<
   my_tool --name ~{name} --threshold ~{threshold} ~{input_file}
   >>>
   
   output {
       File results = "results.txt"
   }
}

workflow my_workflow {
   inputs {
       File input_file
       String name
       Int threshold = 50
   }
   
   call my_task {
       input:
          input_file = input_file,
          name = name,
          threshold = threshold
   }
   outputs {
       File results = my_task.results
   }
}
```

------
#### [ Nextflow ]

```
nextflow.enable.dsl = 2

params.input_file = null
params.name = null
params.threshold = 50

process my_task {
   // <directives>
   
   input:
     path input_file
     val name
     val threshold
   
   output:
     path 'results.txt', emit: results
   
   script:
     """
     my_tool --name ${name} --threshold ${threshold} ${input_file}
     """
     
   
}

workflow MY_WORKFLOW {
   my_task(
       params.input_file,
       params.name,
       params.threshold
   )
}

workflow {
   MY_WORKFLOW()
}
```

------
#### [ CWL ]

```
cwlVersion: v1.2
class: Workflow

requirements:
    InlineJavascriptRequirement: {}

inputs:
   input_file: File
   name: string
   threshold: int

outputs:
    result:
        type: ...
        outputSource: ...

steps:
    my_task:
        run:
            class: CommandLineTool
            baseCommand: my_tool
            requirements:
                ...
            inputs:
                name:
                    type: string
                    inputBinding:
                        prefix: "--name"
                threshold:
                    type: int
                    inputBinding:
                        prefix: "--threshold"
                input_file:
                    type: File
                    inputBinding: {}
            outputs:
                results:
                    type: File
                    outputBinding:
                        glob: results.txt
```

------