1、课程介绍:RNA-seq 技术背景、Cromwell 优势、全流程概述
RNA-seq 到底是什么?
RNA-seq,全称是 RNA 测序。说白了,就是把细胞里所有的 RNA 分子(主要是 mRNA)拿出来,打成小片段,上高通量测序仪读出来,然后通过计算分析,回答两个核心问题:
- 哪些基因在表达? —— 定性分析
- 表达量有多高? —— 定量分析
我记得刚入行时,手写脚本跑一套简单的 RNA-seq 流程,从 fastq 到表达矩阵,大概要折腾三天。中间但凡有一个工具版本不兼容,或者服务器掉线,就得从头再来。到现在,我们用 Cromwell 这样的工作流引擎,一次配置,全自动化执行,还能自动重试失败的任务。效率完全不在一个量级上。
你可能会问:RNA-seq 分析流程有那么复杂吗?我举个例子你就明白了:
| 步骤 | 核心工具 | 输入 | 输出 |
|---|---|---|---|
| 质量控制 | FastQC, MultiQC | 原始 fastq | 质量报告 |
| 修剪 | Trimmomatic, cutadapt | 原始 fastq | 干净 fastq |
| 比对 | STAR, HISAT2 | 干净 fastq + 参考基因组 | BAM 文件 |
| 表达定量 | featureCounts, Salmon | BAM 文件 + 基因注释 GTF | 表达矩阵(counts 或 TPM) |
| 差异分析 | DESeq2, edgeR | 表达矩阵 + 实验设计 | 差异基因列表 |
| 报告汇总 | MultiQC, custom R Markdown | 中间结果 + 日志 | HTML 报告 |
嗯,光是工具链就有6个环节,每个环节还有参数调优、版本兼容、资源分配的问题。以前我都是靠 Bash 脚本串联,但脚本一旦跑起来,想要监控进度、断点续跑、并行调度,基本靠运气。这也是为什么 Cromwell 成了我个人最推荐的方案。
Cromwell 的优势在哪里?
Cromwell 是 Broad Institute 开发的开源工作流管理系统。专门用来编排、调度、监控复杂的生物信息学流程。
我个人习惯用 Cromwell 替代传统 Shell 脚本,主要看中这几点:
- 原生支持 WDL(Workflow Description Language) —— 描述工作流就像写函数定义,输入、输出、步骤依赖写清楚就行,引擎自动调度。
- 自动并行与重试 —— 样本多的时候,Cromwell 会自动分配资源并行跑;任务失败后自动重试,不用人工盯着。
- 可移植性强 —— 同一份 WDL 可以在本地、HPC 集群、Google Cloud、AWS 上无缝运行。只需要改配置文件,不用改流程本身。
- 断点续跑能力 —— 如果流程跑到一半服务器宕机了,重启 Cromwell 后,它会自动从失败的任务继续,不会从头再来。
全流程概述:从 fastq 到差异基因
下面这张图是我们整个 RNA-seq 全流程的核心骨架。它不是工具列表,而是数据流和决策点的抽象。你往后学每一章,都会回到这张图来定位位置。
这个流程看起来是线性的,但实际上每一步都有分支。比如质量控制不过关,你得回到修剪步骤调整参数;比对率太低,可能要换参考基因组或比对器。Cromwell 能很好地处理这种「判断-再跑」的逻辑,因为它支持条件分支和任务依赖。
一个完整的 WDL 工作流长什么样?
这里我给出一个精简版的 WDL 骨架,让你先有个直观印象。不用担心看不懂,后面每一章我都会拆开来讲。
version 1.0
workflow rnaseq_pipeline {
input {
Array[File] fastqs
File genome_fasta
File gtf
}
call quality_control {
input: fastqs = fastqs
}
call trimming {
input: fastqs = quality_control.clean_fastqs
}
call alignment {
input: fastqs = trimming.trimmed_fastqs,
genome = genome_fasta
}
call quantification {
input: bam = alignment.sorted_bam,
gtf = gtf
}
output {
File counts_matrix = quantification.counts
File alignment_bam = alignment.sorted_bam
}
}
task quality_control {
input {
Array[File] fastqs
}
command {
fastqc ${sep=' ' fastqs}
multiqc .
}
output {
File report = "multiqc_report.html"
}
runtime {
docker: "biocontainers/fastqc:latest"
cpu: 2
memory: "4 GB"
}
}
你也要注意,WDL 的
runtime 块不是强制的,但不写就等于把可靠性交给了环境。建议每个 task 都写上 docker、cpu、memory。
这个课程会怎么带你学?
整个课程共 30 章,会按照这张骨架图从顶到底顺序展开。每一章我都会给出一份可运行的 WDL 代码、配置文件、测试数据,还会讲清楚背后的原理和我在实战中踩过的坑。
我建议你准备一台能跑 Docker 的 Linux 或 macOS 机器,至少 8 核 CPU、16 GB 内存。Windows 用户可以用 WSL2。后面我们会一起从零搭建 Cromwell 环境,再从单个 task 写到完整流程,最后部署到云上。
好,第一章的概述就到这。现在你心里应该有了全景图,也知道 Cromwell 为什么值得学。下一节开始,我们就动手搭环境了。
- RNA-seq 分析链:fastq → 质控 → 修剪 → 比对 → 定量 → 差异分析
- Cromwell 核心优势:WDL 描述、自动并行、可移植、断点续跑
- WDL 工作流骨架:workflow + task + input/output + runtime
- 实践注意事项:版本锁定、运行时资源声明、Docker 镜像管理