1. 生物数据任务编排与调度工程导论
生物信息学早已不是“跑一个脚本、看一张图”的时代。一个典型的人类全基因组重测序分析,从原始 FASTQ 到最终变异注释,往往要经过质控、比对、去重、碱基质量重校准、变异检测、过滤、注释等十几个步骤;每一步又可能因样本量、测序平台、参考基因组版本不同而分裂成几十甚至上百个并行任务。当样本从 10 个变成 1000 个,当分析从单机变成集群,真正决定项目能否按时交付的,往往不再是某个算法本身,而是任务如何被组织、依赖如何被满足、资源如何被分配、失败如何被恢复。这正是“生物数据任务编排与调度工程”要解决的问题。
课程定位:从“会跑流程”到“会管流程”
本课程面向已经掌握基础 Linux、Python 与常见生信工具(如 BWA、GATK、Salmon、STAR)的学习者,目标不是再教一遍比对算法,而是建立一套工程化的流程治理能力。它介于“生信分析”与“数据工程/平台工程”之间:向下要理解测序数据的体量、格式与计算特征,向上要能设计可复现、可扩展、可观测的分析流水线。学完本课程,你应当能够独立把一个多步骤生信分析,从手工命令行脚本,重构为带依赖管理、资源声明、失败重试与日志追踪的自动化工作流。
核心问题:编排与调度到底在管什么
把生信流程工程化,本质上要回答四类问题。第一是依赖关系:哪些任务必须先完成,哪些可以并行?例如比对必须在质控之后,而不同样本的比对彼此独立。第二是资源匹配:比对可能需要 16 核 CPU 与 32 GB 内存,而变异过滤只需 2 核;调度器必须知道每个任务“要什么”,才能把任务放到合适的节点上。第三是状态与容错:一个 500 样本的项目跑到第 380 个样本时某节点宕机,系统应当只重跑失败任务,而不是从头再来。第四是可复现与可观测:同一份输入、同一套参数,半年后能否得到一致结果?每个任务的输入、输出、耗时、退出码是否可追溯?
技术栈全景:一张图看清各层职责
生信工作流技术栈可以按“描述—编排—执行—资源—数据”五个层次理解。最上层是流程描述语言与工具,如 Snakemake、Nextflow、WDL/Cromwell、CWL;中间是编排引擎,负责解析依赖、生成任务图、管理状态;再往下是执行后端,可能是本地进程、Slurm/PBS 集群、Kubernetes 或云批处理;资源层提供 CPU、内存、GPU 与存储;数据层则涉及参考基因组、索引、中间文件与结果的组织方式。下图给出这五层之间的支撑关系与典型代表。
理解这张分层图的关键在于:越靠上的层越接近“分析意图”,越靠下的层越接近“物理执行”。Snakemake 规则里写的是“输入是 trimmed.fq,输出是 aligned.bam,用 bwa mem 跑”,这是描述层;而“这个任务需要 16 核、32 GB,提交到 Slurm 的 compute 队列”,这是资源与调度层。很多初学者把两者混在一行命令里,导致流程无法迁移、无法复用。工程化的第一步,就是有意识地把“做什么”和“在哪做、给多少资源”分开表达。
学习路径:四周建立可运行的心智模型
建议按“先跑通、再管好、后扩展”的节奏推进。第一周聚焦描述层与编排层,用 Snakemake 或 Nextflow 把一个 3~5 步的小流程(如质控→比对→计数)写成 DAG,重点体会依赖声明与自动并行。第二周引入资源声明与本地/集群执行后端,给每个任务标注 CPU、内存,观察调度器如何排队。第三周加入容错与可观测性:配置重试次数、日志目录、退出码检查,并故意制造一次失败,验证断点续跑是否只重跑失败分支。第四周做一次小规模真实数据演练,例如 20 个样本的 RNA-seq 定量,记录总耗时、峰值内存与失败恢复时间,形成自己的流程工程检查清单。