比对并行计算
FASTQ 比对并行计算
在整个分析流程中,read 比对(Read alignment)与基因注释(Annotation)通常是资源消耗最大、最耗时的步骤。因此,实现转录组比对的并行处理显得尤为关键。无论是在本地模式(local mode)还是集群模式(cluster mode)下,系统是否能够启用并行计算,完全取决于当前可用的内存总量以及为该分析任务分配的线程总数。
并行任务(同时运行的子任务)的数量由以下两者的较小值决定:
[最大空闲内存 / 单个比对子任务所需的内存][总分配线程数 / 单个比对子任务所需的线程数]
资源配置
例如:配置 150 GB 内存和 24 个线程来启动 saw count 分析任务,运行命令如下:
#analysis script
saw count \
...
--id=FASTQ_parallel_alignment \
--memory=150 \
--threads-num=24 \
...
查看资源配置YAML文件,通常在 /saw-8.X.X/config/resources.yaml ,内容如下:
#resource configuration yaml
version: "1.0"
global:
scheduler: "sge"
default_setting:
max_retries: 0
schedulers:
sge:
queue: " "
rules:
...
alignment: # Read 比对
threads: 16
mem_gb: null ## 假设该子任务实际消耗的内存为 60 GB
retry_factor: 1.5
...
无需在配置文件中设置处理一对 FASTQ 文件所需的内存,程序运行时会自动根据 Stereo-seq 芯片 Mask 文件(chip-mask)中的 CID 位点数量,动态、智能地计算出实际所需的内存。
并行情况分析
假设比对一对 FASTQ 文件(即一个 Read 比对子任务)实际需要 60 GB 内存。根据前文的计算公式:
- 内存维度可支持的并行数:
150 GB / 60 GB= 2 组 - 线程维度可支持的并行数:
24 / 16= 1 组
取两者的较小值(1 组)。显而易见,在上述参数设置下,该分析任务无法实现并行,只能以串行(单任务逐个执行)的方式运行。
如何优化以启用并行计算?
最直接的解决办法是调整您的资源设置,您可以通过以下两种方式之一来解锁并行:
方式一:增加任务的总分配线程数(推荐) 保持单个子任务的线程配置不变,直接在运行脚本中给任务分配更多总线程(例如从 24 提升到 32,此时 32 / 16 = 2,可满足 2 组并行):
#analysis script
saw count \
...
--id=FASTQ_parallel_alignment \
--memory=150 \ # 内存充足 (150/60 = 2)
--threads-num=32 \ # 增加总线程数,此时 32/16 = 2,成功启用 2 组并行
...
方式二:降低单个子任务的线程占用在 YAML 配置文件中,调低单个比对子任务所占用的线程数(例如从 16 降低到 12,此时总线程 24 运行两个子任务 24 / 12 = 2,即可满足 2 组并行):
#resource configuration yaml
version: "1.0"
global:
scheduler: "sge"
default_setting:
max_retries: 0
schedulers:
sge:
queue: " "
rules:
...
alignment: #read alignment
threads: 12 # 降低单个子任务的线程数,此时总线程 24/12 = 2,成功启用 2 组并行
mem_gb: null ## 假设该子任务实际消耗的内存为 60 GB
retry_factor: 1.5
...