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 rincian tentang jenis dan arahan yang tersedia untuk definisi alur kerja WDL di. HealthOmics
Topik
Konversi tipe implisit di WDL lunak
HealthOmics mendukung konversi tipe implisit dalam file input.json dan definisi alur kerja. Untuk menggunakan casting tipe implisit, tentukan mesin alur kerja sebagai WDL lunak saat Anda membuat alur kerja. WDL lunak dirancang untuk menangani alur kerja yang dimigrasikan dari Cromwell. Ini mendukung arahan pelanggan Cromwell dan beberapa logika non-kesesuaian.
WDL lunak mendukung konversi tipe untuk item berikut dalam daftar pengecualian terbatas WDL:
-
Mengapung 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 casting 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 Bahasa. Dalam API, parameter workflow engine 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 peta WDL ke tipe primitif yang cocok. HealthOmics menyediakan dukungan terbatas untuk pemaksaan tipe, jadi sebaiknya Anda menyetel tipe eksplisit.
| Jenis WDL | Jenis JSON | Contoh WDL | Contoh kunci dan nilai JSON | Catatan |
|---|---|---|---|---|
Boolean |
boolean |
Boolean b |
"b": true |
Nilainya 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 penyimpanan URIs 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/. |
Directory |
string |
Directory d |
"d": "s3://bucket/path/" |
DirectoryJenis ini tidak termasuk dalam WDL 1.0 atau 1.1, jadi Anda harus menambahkan version development ke header file WDL. URI harus berupa URI Amazon S3 dan dengan awalan yang diakhiri dengan '/'. Semua isi direktori akan disalin secara rekursif ke alur kerja sebagai unduhan tunggal. DirectorySeharusnya hanya berisi file yang terkait dengan alur kerja. |
Jenis kompleks di WDL
Tabel berikut menunjukkan bagaimana input dalam peta WDL untuk jenis 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 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. |
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 |
|
|
Nama-nama anggota struct harus sama persis dengan nama-nama kunci objek JSON. Setiap nilai harus menggunakan format JSON dari jenis WDL yang cocok. |
Object |
N/A | N/A | N/A | ObjectJenis WDL sudah usang dan harus diganti dengan Struct dalam semua kasus. |
Arahan di WDL
HealthOmics mendukung arahan berikut di semua versi WDL yang mendukung. HealthOmics
Konfigurasikan sumber daya GPU
HealthOmics mendukung atribut runtime acceleratorType dan acceleratorCount dengan semua instance GPU yang didukung. HealthOmics juga mendukung alias bernama gpuType dangpuCount, yang memiliki fungsi yang sama dengan rekan-rekan akselerator mereka. Jika definisi WDL berisi kedua arahan, HealthOmics gunakan nilai akselerator.
Contoh berikut menunjukkan cara menggunakan arahan ini:
runtime { gpuCount: 2 gpuType: "nvidia-tesla-t4" }
Konfigurasikan coba lagi 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 mencoba maksimal dua percobaan ulang.
Contoh berikut ditetapkan preemptible untuk memilih keluar dari percobaan ulang untuk kesalahan layanan:
{ preemptible: 0 }
Untuk informasi selengkapnya tentang percobaan ulang tugas HealthOmics, lihatTugas Mencoba Ulang.
Konfigurasikan tugas coba lagi 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 maxRetries arahan untuk menentukan jumlah maksimum percobaan ulang.
Contoh berikut ditetapkan maxRetries ke 3, sehingga HealthOmics upaya maksimal empat upaya untuk menyelesaikan tugas (upaya awal ditambah tiga percobaan ulang):
runtime { maxRetries: 3 }
catatan
Coba lagi tugas untuk kehabisan memori membutuhkan 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
Atribut ReturnCodes menyediakan mekanisme untuk menentukan kode pengembalian, atau satu set kode pengembalian, yang menunjukkan keberhasilan pelaksanaan 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 continueOnReturnCode, yang memiliki kemampuan yang sama dengan ReturnCodes. Jika Anda menentukan kedua atribut, HealthOmics menggunakan nilai ReturnCodes.
Contoh definisi alur kerja WDL
Contoh berikut menunjukkan definisi alur kerja pribadi untuk mengkonversi dari CRAM ke BAM dalam WDL. BAMAlur kerja CRAM to mendefinisikan dua tugas dan menggunakan alat dari genomes-in-the-cloud wadah, yang ditampilkan dalam contoh dan tersedia untuk umum.
Contoh berikut menunjukkan cara menyertakan wadah Amazon ECR sebagai parameter. Ini memungkinkan HealthOmics untuk memverifikasi izin akses ke penampung 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 toko urutan, tunjukkan bahwa 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}" } }