【阅读原文】戳:如何使用Argo Workflows编排基因计算工作流?
在基因计算这一高度复杂且数据密集型的领域,科研人员和生物信息分析师面临着非常大的挑战,这不仅仅体现在数据量的爆炸性增长上,也在于如何高效、准确地整合和分析这些数据,以揭示生命的奥秘。为了应对这些挑战,工作流的自动化编排成为了一项关键技术,而容器化、灵活、易用的工作流引擎Argo Workflows在其中脱颖而出,成为串联基因计算各个环节的得力助手。本文介绍如何使用Argo Workflows编排基因计算工作流。
基因计算工作流
基因计算工作流是指在基因组学研究中,为了完成特定的分析目标,将一系列相互依赖的计算任务和数据处理步骤组织在一起,形成有序执行的流程。这些工作流通常包括数据预处理、序列比对、变异检测、基因表达分析、进化树构建等多种复杂步骤。
Argo Workflows基因计算工作流的价值
Argo Workflows是一个开源的Kubernetes原生工作流引擎,它专为容器化环境设计,能够灵活、高效地编排复杂的工作流程。在基因计算场景中,Argo的优势尤为显著:
• 容器化与环境一致性:基因分析涉及众多软件工具和依赖库,通过将每个分析步骤封装进Docker容器,确保了跨平台的一致性和可复现性,减少了“它只在我机器上能跑”的问题。
• 灵活的编排能力:基因组学研究中的工作流往往包含多步骤、条件分支和并行处理需求,Argo Workflows支持复杂逻辑和条件控制,使得按需定制工作流程变得简单直接。
尽管开源Argo Workflows在基因计算工作流的编排领域展现了显著的实力,但在实际应用中仍需克服若干挑战:
• 大规模运维难题:面对庞大的任务规模,加之科研背景的用户可能缺乏深度的集群运维经验,导致难以实施高效的集群优化与维护策略。
• 复杂工作流编排挑战:科研实验的特性决定了参数空间的广阔及流程步骤的繁多,往往涉及成千上万的作业项,开源工作流引擎难于支持。
• 资源优化与弹性伸缩困难:基因数据分析往往消耗大量计算资源,用户希望能够根据工作负载智能调度资源,实现资源的高效利用,并支持根据需求自动扩展计算能力,开源方案难以满足。
面对基因计算场景下大规模运维、复杂工作流编排、资源优化与弹性伸缩等挑战,阿里云ACK One团队推出了分布式工作流Argo集群。
分布式工作流Argo集群
阿里云分布式工作流Argo集群基于开源项目Argo Workflows实现,采用无服务器模式,使用阿里云弹性容器实例ECI运行工作流,通过优化Kubernetes集群参数,实现大规模工作流的高效弹性调度,同时配合抢占式ECI实例,优化成本。支持并发、循环、重试等多种执行策略等典型的基因计算过程和高度复杂的工作流任务编排。
使用Argo Workflows编排基因计算工作流
以一个经典的BWA测序比对流程来展示如何使用Argo Workflows编辑并运行基因计算工作流:
1. 创建分布式工作流Argo集群。
2. 挂载阿里云OSS存储卷,以便工作流可以像操作本地文件一样操作OSS上的文件。
具体操作,请参见使用存储卷。
3. 使用以下YAML创建一个工作流。具体操作,请参见创建工作流。
流程主要包括三个阶段:
1)bwaprepare: 数据准备阶段,下载并解压fastq、reference文件,对参考基因组建立索引。
2)bwamap:将测序数据与参考基因组进行比对并生成对齐结果,该阶段并行处理多个文件。
3)bwaindex:从原始测序数据比对到参考基因组,生成、排序、索引BAM文件,并浏览比对结果。
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: bwa-oss- spec: entrypoint: bwa-oss arguments: parameters: - name: fastqFolder # 下载文件的保存路径 value: /gene - name: reference # 参考基因组文件 value: https://ags-public.oss-cn-beijing.aliyuncs.com/alignment/subset_assembly.fa.gz - name: fastq1 # 原始测序数据 value: https://ags-public.oss-cn-beijing.aliyuncs.com/alignment/SRR1976948_1.fastq.gz - name: fastq2 value: https://ags-public.oss-cn-beijing.aliyuncs.com/alignment/SRR1976948_2.fastq.gz volumes: # 远端存储路径挂载 - name: ossdir persistentVolumeClaim: claimName: pvc-oss templates: - name: bwaprepare #数据准备阶段,下载并解压fastq、reference文件,对参考基因组建立索引。 container: image: registry.cn-beijing.aliyuncs.com/geno/alltools:v0.2 imagePullPolicy: Always command: [sh,-c] args: - mkdir -p /bwa{{workflow.parameters.fastqFolder}}; cd /bwa{{workflow.parameters.fastqFolder}}; rm -rf SRR1976948*; wget {{workflow.parameters.reference}}; wget {{workflow.parameters.fastq1}}; wget {{workflow.parameters.fastq2}}; gzip -d subset_assembly.fa.gz; gunzip -c SRR1976948_1.fastq.gz | head -800000 > SRR1976948.1; gunzip -c SRR1976948_2.fastq.gz | head -800000 > SRR1976948.2; bwa index subset_assembly.fa; volumeMounts: - name: ossdir mountPath: /bwa retryStrategy: # 重试机制 limit: 3 - name: bwamap # 将测序数据与参考基因组进行比对预处理并生成对齐结果。 inputs: parameters: - name: object container: image: registry.cn-beijing.aliyuncs.com/geno/alltools:v0.2 imagePullPolicy: Always command: - sh - -c args: - cd /bwa{{workflow.parameters.fastqFolder}}; bwa aln subset_assembly.fa {{inputs.parameters.object}} > {{inputs.parameters.object}}.untrimmed.sai; volumeMounts: - name: ossdir mountPath: /bwa retryStrategy: limit: 3 - name: bwaindex # 从原始测序数据比对到参考基因组,生成、排序、索引BAM文件,并浏览比对结果。 container: args: - cd /bwa{{workflow.parameters.fastqFolder}}; bwa sampe subset_assembly.fa SRR1976948.1.untrimmed.sai SRR1976948.2.untrimmed.sai SRR1976948.1 SRR1976948.2 > SRR1976948.untrimmed.sam; samtools import subset_assembly.fa SRR1976948.untrimmed.sam SRR1976948.untrimmed.sam.bam; samtools sort SRR1976948.untrimmed.sam.bam -o SRR1976948.untrimmed.sam.bam.sorted.bam; samtools index SRR1976948.untrimmed.sam.bam.sorted.bam; samtools tview SRR1976948.untrimmed.sam.bam.sorted.bam subset_assembly.fa -p k99_13588:1000 -d T; command: - sh - -c image: registry.cn-beijing.aliyuncs.com/geno/alltools:v0.2 imagePullPolicy: Always volumeMounts: - mountPath: /bwa/ name: ossdir retryStrategy: limit: 3 - name: bwa-oss # 各阶段流程编排 dag: tasks: - name: bwaprepare # 先执行数据准备 template: bwaprepare - name: bwamap # 预处理,并生成对齐结果 template: bwamap dependencies: [bwaprepare] # 依赖数据准备阶段 arguments: parameters: - name: object value: "{{item}}" withItems: ["SRR1976948.1","SRR1976948.2"] # 并行处理多个文件 - name: bwaindex # 比对并浏览比对结果 template: bwaindex dependencies: [bwamap] # 依赖预处理阶段
4. 查看工作流状态:
可以看到工作流状态成功,在oss对应文件夹中也能发现,比对结果文件已经顺利产生:
总结
Argo Workflows以其容器化、灵活编排、简单易用等特性在基因计算领域及其他数据密集型科研领域展现出了显著的优势,能够极大地提升基因计算的自动化水平、资源利用率和分析效率。阿里云ACK One团队是国内最早使用Argo Workflows进行大规模任务编排的团队之一,并在基因计算、自动驾驶、金融模拟等场景下积累了诸多的最佳实践,欢迎联系ACKOne团队,加入钉钉群号一同交流:35688562。
参考:
分布式Argo工作流:
Argo Workflows:
https://github.com/argoproj/argo-workflows
创建工作流:
使用存储卷:
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~