View a markdown version of this page

Spesifikasi definisi alur kerja WDL - AWS HealthOmics

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

Spesifikasi definisi alur kerja WDL

Topik berikut memberikan detail tentang jenis dan arahan yang tersedia untuk definisi alur kerja WDL di HealthOmics.

Konversi tipe implisit dalam WDL lunak

HealthOmics mendukung konversi tipe implisit dalam file input.json dan definisi alur kerja. Untuk menggunakan pengecoran tipe implisit, tentukan mesin alur kerja sebagai WDL lunak saat Anda membuat alur kerja. WDL lenient mencakup semua fitur WDL standar ditambah perilaku kompatibilitas tambahan yang dirancang untuk alur kerja yang dimigrasikan dari Cromwell. Ini mendukung arahan Cromwell pelanggan dan beberapa logika yang tidak sesuai.

WDL lenient mendukung konversi tipe untuk item berikut dalam daftar pengecualian terbatas WDL: https://github.com/openwdl/wdl/blob/wdl-1.1/SPEC.md#-limited-exceptions

  • Float ke Int, di mana paksaan tidak menghasilkan kehilangan presisi (seperti 1.0 peta ke 1).

  • String ke Int/Float, di mana paksaan tidak menghasilkan kehilangan presisi.

  • Petakan [W, X] ke Array [Pair [Y, Z]], dalam kasus di mana W dapat dipaksakan ke Y dan X dapat dipaksakan ke Z.

  • Array [Pasangkan [W, X]] ke Peta [Y, Z], dalam kasus di mana W dapat dipaksakan ke Y dan X dapat dipaksakan ke Z (seperti 1.0 peta ke 1).

Untuk menggunakan pengecoran tipe implisit, tentukan mesin alur kerja sebagai WDL_LENIENT saat Anda membuat alur kerja atau versi alur kerja.

Di konsol, parameter mesin alur kerja diberi nama Langu age. Di API, parameter mesin alur kerja diberi nama engine. Untuk informasi selengkapnya, lihat Buat alur kerja pribadi atau Buat versi alur kerja.

Definisi namespace di input.json

HealthOmics mendukung variabel yang sepenuhnya memenuhi syarat di input.json. Misalnya, jika Anda mendeklarasikan dua variabel input bernama number1 dan number2 dalam alur kerja: SumWorkflow

workflow SumWorkflow { input { Int number1 Int number2 } }

Anda dapat menggunakannya sebagai variabel yang sepenuhnya memenuhi syarat di input.json:

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

Tipe primitif di WDL

Tabel berikut menunjukkan bagaimana input dalam WDL memetakan ke tipe primitif yang cocok. HealthOmics menyediakan dukungan terbatas untuk paksaan tipe, jadi sebaiknya Anda menetapkan tipe eksplisit.

Tipe primitif
Jenis WDL Jenis JSON Contoh WDL Contoh kunci dan nilai JSON Catatan
Boolean boolean Boolean b "b": true Nilai harus huruf kecil dan tidak dikutip.
Int integer Int i "i": 7 Harus tidak dikutip.
Float number Float f "f": 42.2 Harus tidak dikutip.
String string String s "s": "characters" String JSON yang merupakan URI harus dipetakan ke file WDL untuk diimpor.
File string File f "f": "s3://amzn-s3-demo-bucket1/path/to/file" Amazon S3 dan HealthOmics URI penyimpanan diimpor selama peran IAM yang disediakan untuk alur kerja memiliki akses baca ke objek ini. Tidak ada skema URI lain yang didukung (sepertifile://,https://, danftp://). URI harus menentukan objek. Itu tidak bisa menjadi direktori yang berarti tidak dapat diakhiri dengan a/.
Directory string Directory d "d": "s3://bucket/path/" Jenis Directory ini tidak termasuk dalam WDL 1.0 atau 1.1, jadi Anda perlu menambahkan version development ke header file WDL. URI harus berupa URI Amazon S3 dan dengan awalan yang diakhiri dengan '/'. Semua konten direktori akan disalin secara rekursif ke alur kerja sebagai unduhan tunggal. Se Directory harusnya hanya berisi file yang terkait dengan alur kerja.

Jenis kompleks dalam WDL

Tabel berikut menunjukkan bagaimana input dalam WDL memetakan ke tipe JSON kompleks yang cocok. Tipe kompleks dalam WDL adalah struktur data yang terdiri dari tipe primitif. Struktur data seperti daftar akan dikonversi ke array.

Jenis kompleks
Jenis WDL Jenis JSON Contoh WDL Contoh kunci dan nilai JSON Catatan
Array array Array[Int] nums “nums": [1, 2, 3] Anggota array harus mengikuti format tipe array WDL.
Pair object Pair[String, Int] str_to_i “str_to_i": {"left": "0", "right": 1} Setiap nilai pasangan harus menggunakan format JSON dari jenis WDL yang cocok. Nama kunci string dalam representasi JSON WDL Pair dicocokkan secara tidak peka huruf besar-kecil. Misalnya, {"left”: “0", “right”: 1} dan {"LEFT”: “0", “Right”: 1} diperlakukan setara saat deserialisasi menjadi tipe Pair.
Map object Map[Int, String] int_to_string "int_to_string": { 2: "hello", 1: "goodbye" } Setiap entri di peta harus menggunakan format JSON dari jenis WDL yang cocok.
Struct object
struct SampleBamAndIndex { String sample_name File bam File bam_index } SampleBamAndIndex b_and_i
"b_and_i": { "sample_name": "NA12878", "bam": "s3://amzn-s3-demo-bucket1/NA12878.bam", "bam_index": "s3://amzn-s3-demo-bucket1/NA12878.bam.bai" }
Nama-nama anggota struct harus sama persis dengan nama kunci objek JSON. Setiap nilai harus menggunakan format JSON dari jenis WDL yang cocok.
Object N/A N/A N/A Jenis WDL Object sudah usang dan harus diganti Struct dalam semua kasus.

Arahan dalam WDL

HealthOmics mendukung arahan berikut di semua versi WDL yang HealthOmics mendukung.

Konfigurasikan sumber daya GPU

HealthOmics mendukung atribut runtime acceleratorType dan acceleratorCount dengan semua instans GPU yang didukung. HealthOmics juga mendukung alias bernama gpuType dangpuCount, yang memiliki fungsi yang sama dengan rekan-rekan akseleratornya. Jika definisi WDL berisi kedua arahan, HealthOmics menggunakan nilai akselerator.

Contoh berikut menunjukkan cara menggunakan arahan ini:

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

Konfigurasikan percobaan ulang tugas untuk kesalahan layanan

HealthOmics mendukung hingga dua percobaan ulang untuk tugas yang gagal karena kesalahan layanan (kode status HTTP 5XX). Anda dapat mengonfigurasi jumlah maksimum percobaan ulang (1 atau 2) dan Anda dapat memilih keluar dari percobaan ulang untuk kesalahan layanan. Secara default, HealthOmics coba maksimal dua kali percobaan ulang.

Contoh berikut diatur preemptible untuk memilih keluar dari percobaan ulang untuk kesalahan layanan:

{ preemptible: 0 }

Untuk informasi selengkapnya tentang percobaan ulang tugas di HealthOmics, lihatTugas Mencoba Ulang.

Konfigurasikan percobaan ulang tugas untuk kehabisan memori

HealthOmics mendukung percobaan ulang untuk tugas yang gagal karena kehabisan memori (kode keluar wadah 137, kode status HTTP 4XX). HealthOmics menggandakan jumlah memori untuk setiap upaya coba lagi.

Secara default, HealthOmics tidak mencoba lagi untuk jenis kegagalan ini. Gunakan direk maxRetries tif untuk menentukan jumlah maksimum percobaan ulang.

Contoh berikut ditetapkan maxRetries ke 3, sehingga HealthOmics mencoba maksimal empat upaya untuk menyelesaikan tugas (upaya awal ditambah tiga percobaan ulang):

runtime { maxRetries: 3 }
catatan

Coba ulang tugas untuk kehabisan memori memerlukan GNU findutils 4.2.3+. Wadah HealthOmics gambar default menyertakan paket ini. Jika Anda menentukan gambar kustom dalam definisi WDL Anda, pastikan bahwa gambar tersebut menyertakan GNU findutils 4.2.3+.

Konfigurasikan kode pengembalian

A tribut returnCodes menyediakan mekanisme untuk menentukan kode pengembalian, atau sekumpulan kode pengembalian, yang menunjukkan keberhasilan eksekusi tugas. Mesin WDL menghormati kode pengembalian yang Anda tentukan di bagian runtime definisi WDL, dan menetapkan status tugas yang sesuai.

runtime { returnCodes: 1 }

HealthOmics juga mendukung alias bernama continue OnReturnCode, yang memiliki kemampuan yang sama dengan Retur nCodes. Jika Anda menentukan kedua atribut, HealthOmics menggunakan nilai ReturnCodes.

Bentuk disk WDL yang didukung

HealthOmics menerima semua formulir standar WDL 1.1disks. Jalur pemasangan dan penentu tipe disk (SSD,HDD) diabaikan — hanya ukuran numerik yang diekstraksi. Jika beberapa entri dideklarasikan, ukuran dijumlahkan menjadi satu /tmp alokasi.

Formulir yang diterima Contoh Ukuran yang diselesaikan
Bilangan Bulatdisks: 700700 GiB
Stringdisks: "700"700 GiB
String dengan unitdisks: "700 GiB" atau "700 GB"700 GiB
Cromwell-style dengan jalur dan tipedisks: "local-disk 700 SSD"700 GiB (jalur dan tipe diabaikan)
Comma-separated entridisks: "local-disk 300 SSD, /scratch 200 SSD"500 GiB (dijumlahkan)
Array stringdisks: ["/tmp 300 GiB", "/scratch 200 GiB"]500 GiB (dijumlahkan)

HealthOmics memasang semua penyimpanan sementara di. /tmp Jika definisi alur kerja Anda mendeklarasikan beberapa disks entri, ukuran akan dijumlahkan dan total disediakan sebagai satu /tmp volume. Untuk informasi selengkapnya tentang atribut disks runtime WDL, lihat spesifikasi WDL 1.1.

Atribut runtime lain yang didukung

Konfigurasikan batas waktu tingkat tugas dengan atribut runtime OmicsTimeOut

HealthOmics menyediakan omicsTimeout atribut khusus untuk mengatur durasi tugas maksimum dalam alur kerja Anda. Tentukan durasi batas waktu sebagai bilangan bulat (detik) atau string menggunakan satu atau lebih unit berikut:s,, mh, ataud. Sebagai contoh, "40m", "1h30m", atau "1m3s".

Contoh berikut menunjukkan cara menentukan omicsTimeout atribut di runtime bagian definisi tugas WDL. Contoh ini menetapkan batas waktu 40 menit.

runtime { omicsTimeout: "40m" }

HealthOmics menyediakan dukungan berikut untuk atribut omicsTimeout runtime WDL:

  1. HealthOmics mendukung granularitas 1 menit untuk nilai batas waktu. Anda dapat menentukan nilai antara 60 detik dan nilai durasi berjalan maksimum.

  2. Jika Anda memasukkan nilai kurang dari 60, HealthOmics bulatkan hingga 60 detik. Untuk nilai di atas 60, HealthOmics bulatkan ke bawah ke menit terdekat.

  3. Jika waktu tugas habis, tugas HealthOmics akan dibatalkan. Operasi ini dapat memiliki durasi satu hingga dua menit.

  4. Pada batas waktu tugas, HealthOmics setel status run dan task menjadi gagal, dan membatalkan tugas lain yang sedang dijalankan (untuk tugas dalam status Mulai, Tertunda, atau Berjalan). HealthOmics mengekspor output dari tugas yang diselesaikan sebelum batas waktu ke lokasi keluaran S3 yang Anda tentukan.

  5. Waktu yang dihabiskan tugas dalam status tertunda tidak dihitung dalam durasi tugas.

  6. Jika run adalah bagian dari grup run dan waktu grup run habis lebih cepat daripada pengatur waktu tugas, transisi run dan tugas ke status gagal.

Semua lari memiliki durasi maksimum yang kuota yang dapat disesuaikan dalam HealthOmics kuota layanan kontrol. Anda dapat meminta kenaikan kuota ini.

Metadata tugas di WDL

HealthOmics mendukung opsi metadata berikut untuk tugas WDL.

Nonaktifkan caching tingkat tugas dengan atribut volatile

A tribut volatile memungkinkan Anda menonaktifkan cache panggilan untuk tugas-tugas tertentu dalam alur kerja WDL Anda. Ketika tugas ditandai sebagai volatile, itu akan selalu dieksekusi dan tidak pernah menggunakan hasil cache, bahkan ketika caching diaktifkan untuk dijalankan.

Tambahkan atribut volatile ke bagian meta definisi tugas Anda:

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

Contoh definisi alur kerja WDL

Contoh berikut menunjukkan definisi alur kerja pribadi untuk mengonversi dari CRAM ke BAM dalam WDL. Alu CRAM r BAM kerja to mendefinisikan dua tugas dan menggunakan alat dari genomes-in-the-cloud wadah, yang ditunjukkan dalam contoh dan tersedia untuk umum.

Contoh berikut menunjukkan cara memasukkan wadah Amazon ECR sebagai parameter. Ini memungkinkan HealthOmics untuk memverifikasi izin akses ke wadah Anda sebelum memulai menjalankan proses.

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

Contoh berikut menunjukkan cara menentukan file mana yang akan digunakan dalam proses Anda, saat file berada di bucket Amazon S3.

{ "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" }

Jika Anda ingin menentukan file dari penyimpanan urutan, tunjukkan seperti yang ditunjukkan dalam contoh berikut, menggunakan URI untuk penyimpanan urutan.

{ "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" }

Anda kemudian dapat menentukan alur kerja Anda di WDL seperti yang ditunjukkan pada contoh berikut.

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}" } }