

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Spesifikasi definisi alur kerja CWL
<a name="workflow-languages-cwl"></a>

Alur kerja yang ditulis dalam Bahasa Alur Kerja Umum, atau CWL, menawarkan fungsionalitas serupa dengan alur kerja yang ditulis dalam WDL dan Alur Berikutnya. Anda dapat menggunakan Amazon S3 atau HealthOmics penyimpanan URIs sebagai parameter input. 

Jika Anda menentukan input dalam SecondaryFile dalam sub alur kerja, tambahkan definisi yang sama dalam alur kerja utama.

HealthOmics alur kerja tidak mendukung proses operasi. [Untuk mempelajari lebih lanjut tentang proses operasi dalam alur kerja CWL, lihat dokumentasi CWL.](https://www.commonwl.org/user_guide/topics/operations.html)

Praktik terbaik adalah menentukan alur kerja CWL terpisah untuk setiap wadah yang Anda gunakan. Kami menyarankan Anda untuk tidak melakukan hardcode entri DockerPull dengan URI ECR Amazon tetap.

**Topics**
+ [Mengkonversi alur kerja CWL untuk digunakan HealthOmics](#workflow-cwl-convert)
+ [Menyisih dari tugas coba lagi menggunakan `omicsRetryOn5xx`](#workflow-cwl-retry-5xx)
+ [Lingkarkan langkah alur kerja](#workflow-cwl-loop)
+ [Coba lagi tugas dengan peningkatan memori](#workflow-cwl-out-of-memory-retry)
+ [Contoh](#workflow-cwl-examples)

## Mengkonversi alur kerja CWL untuk digunakan HealthOmics
<a name="workflow-cwl-convert"></a>

Untuk mengonversi definisi alur kerja CWL yang ada untuk digunakan HealthOmics, buat perubahan berikut:
+ Ganti semua wadah Docker URIs dengan Amazon URIs ECR.
+ Pastikan bahwa semua file alur kerja dideklarasikan dalam alur kerja utama sebagai input, dan semua variabel didefinisikan secara eksplisit.
+ Pastikan bahwa semua JavaScript kode adalah keluhan mode ketat.

## Menyisih dari tugas coba lagi menggunakan `omicsRetryOn5xx`
<a name="workflow-cwl-retry-5xx"></a>

HealthOmics mendukung percobaan ulang tugas jika tugas gagal karena kesalahan layanan (kode status HTTP 5XX). Secara default, HealthOmics mencoba hingga dua percobaan ulang dari tugas yang gagal. Untuk informasi selengkapnya tentang coba lagi tugas HealthOmics, lihat[Tugas Mencoba Ulang](monitoring-runs.md#run-status-task-retries).

Untuk memilih keluar dari tugas coba lagi untuk kesalahan layanan, konfigurasikan `omicsRetryOn5xx` arahan dalam definisi alur kerja. Anda dapat menentukan arahan ini di bawah persyaratan atau petunjuk. Kami merekomendasikan menambahkan arahan sebagai petunjuk untuk portabilitas.

```
requirements:
  ResourceRequirement:
    omicsRetryOn5xx: false

hints:
  ResourceRequirement:
    omicsRetryOn5xx: false
```

Persyaratan mengesampingkan petunjuk. Jika implementasi tugas menyediakan persyaratan sumber daya dalam petunjuk yang juga disediakan oleh persyaratan dalam alur kerja terlampir, persyaratan terlampir akan diutamakan.

Jika persyaratan tugas yang sama muncul pada tingkat alur kerja yang berbeda, HealthOmics gunakan entri paling spesifik dari `requirements` (atau`hints`, jika tidak ada entri di`requirements`). Daftar berikut menunjukkan urutan prioritas yang HealthOmics digunakan untuk menerapkan pengaturan konfigurasi, dari prioritas terendah hingga tertinggi:
+ Tingkat alur kerja
+ Tingkat langkah
+ Bagian tugas dari definisi alur kerja

Contoh berikut menunjukkan cara mengkonfigurasi `omicsRetryOn5xx` direktif di berbagai tingkat alur kerja. Dalam contoh ini, persyaratan tingkat alur kerja mengesampingkan petunjuk tingkat alur kerja. Konfigurasi persyaratan pada tingkat tugas dan langkah mengesampingkan konfigurasi petunjuk.

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

## Lingkarkan langkah alur kerja
<a name="workflow-cwl-loop"></a>

HealthOmics mendukung perulangan langkah alur kerja. Anda dapat menggunakan loop untuk menjalankan langkah alur kerja berulang kali hingga kondisi tertentu terpenuhi. Ini berguna untuk proses berulang di mana Anda perlu mengulangi tugas beberapa kali atau sampai hasil tertentu tercapai.

**Catatan:** Fungsionalitas loop membutuhkan CWL versi 1.2 atau yang lebih baru. Alur kerja yang menggunakan versi CWL lebih awal dari 1.2 tidak mendukung operasi loop.

Untuk menggunakan loop dalam alur kerja CWL Anda, tentukan persyaratan Loop. Contoh berikut menunjukkan konfigurasi persyaratan loop:

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

`loopWhen`Bidang mengontrol saat loop berakhir. Dalam contoh ini, loop berlanjut selama penghitung kurang dari nilai maksimum. `loop`Bidang mendefinisikan bagaimana parameter input diperbarui antara iterasi. `loopSource`Menentukan output dari umpan iterasi sebelumnya ke iterasi berikutnya. `outputMethod`Bidang diatur untuk `last` mengembalikan hanya output iterasi akhir ini.

## Coba lagi tugas dengan peningkatan memori
<a name="workflow-cwl-out-of-memory-retry"></a>

HealthOmics mendukung percobaan ulang otomatis kegagalan out-of-memory tugas. Ketika tugas keluar dengan kode 137 (out-of-memory), HealthOmics membuat tugas baru dengan peningkatan alokasi memori berdasarkan pengganda yang ditentukan.

**catatan**  
HealthOmics mencoba kembali out-of-memory kegagalan hingga 3 kali atau sampai alokasi memori mencapai 1536 GiB, batas mana pun yang tercapai terlebih dahulu.

Contoh berikut menunjukkan cara mengkonfigurasi out-of-memory coba lagi:

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

Ketika tugas gagal karena out-of-memory, HealthOmics menghitung alokasi memori coba lagi menggunakan rumus:. `previous_run_memory × memoryRetryMultiplier` Pada contoh di atas, jika tugas dengan memori 4096 MB gagal, upaya coba lagi menggunakan memori 4096 × 2,5 = 10.240 MB.

`memoryRetryMultiplier`Parameter mengontrol berapa banyak memori tambahan yang dialokasikan untuk upaya coba lagi:
+ **Nilai default:** Jika Anda tidak menentukan nilai, nilai defaultnya `2` (menggandakan memori)
+ **Rentang yang valid:** Harus angka positif lebih besar dari`1`. Nilai yang tidak valid menghasilkan kesalahan validasi 4XX
+ **Nilai efektif minimum: Nilai** antara `1` dan `1.5` secara otomatis ditingkatkan `1.5` untuk memastikan peningkatan memori yang berarti dan mencegah upaya coba lagi yang berlebihan

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

Berikut ini adalah contoh alur kerja yang ditulis dalam CWL. 

```
cwlVersion: v1.2
class: Workflow

inputs:
in_file:
type: File
secondaryFiles: [.fai]

out_filename: string
docker_image: string


outputs:
copied_file:
type: File
outputSource: copy_step/copied_file

steps:
copy_step:
in:
  in_file: in_file
  out_filename: out_filename
  docker_image: docker_image
out: [copied_file]
run: copy.cwl
```

File berikut mendefinisikan `copy.cwl` tugas.

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

Berikut ini adalah contoh alur kerja yang ditulis dalam CWL dengan persyaratan GPU.

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