2. 生物计算任务的特征建模
在生物计算平台中,资源治理失败往往不是因为调度器不够强,而是因为任务画像过于粗糙。把测序比对、变异检测、宏基因组组装、分子对接、冷冻电镜三维重构都归为“计算任务”,只用一个 CPU 核数和一个内存上限去描述,必然导致两类错误:一类是资源给多了,节点长期空转;另一类是资源给少了,任务被 OOM Killer 杀掉或反复重试。因此,特征建模的目标不是给任务贴标签,而是把任务对 CPU、内存、I/O、GPU、网络和存储的真实需求,转化为可度量、可预测、可用于调度决策的参数集合。
一、数据密集型:瓶颈常常不在 CPU
生物计算任务的第一特征是数据体量大且访问模式特殊。以全基因组重测序分析为例,一个 30× 人类样本的 FASTQ 文件约 60~90 GB,BAM 文件约 80~120 GB,变异检测阶段还要反复扫描 BAM 的特定区间。这类任务的 CPU 利用率可能只有 30%~50%,但磁盘吞吐和内存带宽长期处于高位。如果只按 CPU 核数分配资源,会出现“CPU 空闲、I/O 排队”的假饱和现象。
刻画数据密集型任务,至少要采集四类指标:输入数据量(GB)、中间文件峰值(GB)、随机读比例、以及单位数据的处理耗时(s/GB)。例如,BWA-MEM 比对在 16 核、64 GB 内存节点上处理 60 GB FASTQ,典型耗时约 4~6 小时,峰值内存约 20~28 GB,磁盘读吞吐约 200~400 MB/s。这些数值不是固定常数,而是随参考基因组索引、读长和比对参数变化,但可以作为初始画像的锚点。真正用于调度的,是“每 GB 输入所需内存”和“每 GB 输入所需核时”这两个归一化参数,它们让不同规模样本之间可以外推。
二、流程异构性:同一流程内部资源需求差异巨大
生物信息流程通常由多个工具串联而成,而各步骤的资源画像差异极大。以 GATK 最佳实践流程为例:BWA 比对是 CPU 与内存并重;MarkDuplicates 是内存密集型,峰值可达数十 GB;BaseRecalibrator 是 I/O 与 CPU 混合;HaplotypeCaller 则对单核性能和内存局部性敏感。若把整个流程当作一个任务申请固定资源,只能按最大需求分配,造成大量浪费。
更合理的做法是把流程拆成步骤级任务,为每个步骤建立独立的资源画像,并在工作流引擎中按步骤申请和释放资源。下面是一个步骤级画像的示例片段,用于说明字段结构:
step: HaplotypeCaller
cpu_cores: 4
mem_peak_gb: 16
mem_avg_gb: 9
io_read_gb: 45
io_write_gb: 3
gpu: false
expected_runtime_min: 95
retry_policy: on_oom_increase_mem_1.5x
这类画像不需要一开始就精确,而是通过历史运行数据持续回归。关键是把“步骤”作为资源治理的最小单元,而不是把“流程”作为最小单元。
三、突发并发与长尾作业:两类相反的压力
生物计算平台的负载具有明显的双峰特征。一端是突发并发:当测序仪下机或批量样本提交时,数百个比对任务在几分钟内同时到达,队列深度迅速上升。另一端是长尾作业:少数任务运行时间是中位数的 5~20 倍,例如宏基因组组装、大规模系统发育树构建、冷冻电镜颗粒挑选。长尾任务占用资源时间长、失败代价高,且往往难以预测。
对突发并发,治理重点是准入控制和队列分层:设置每用户并发上限、按优先级划分队列、对短任务预留快速通道。对长尾作业,治理重点是检查点、超时策略和资源预留:为超过阈值的长任务分配独占节点或高内存队列,避免它们与短任务争抢。判断一个任务是否属于长尾,可以用历史 P50 与 P95 运行时的比值:若 P95/P50 大于 5,就应进入长尾治理策略。
四、从画像到调度:参数如何真正起作用
特征建模最终要落到调度决策上。一个可操作的映射关系是:数据密集型任务优先匹配高 I/O 带宽节点,并设置内存下限为峰值内存的 1.2 倍;流程异构任务按步骤拆分,每步独立申请资源;突发并发任务进入短任务队列,限制单用户并发数;长尾任务进入独占队列,并启用检查点。以 OOM 为例,若某步骤历史峰值内存为 16 GB,首次分配 20 GB,运行中触发 OOM,则重试策略应将该步骤内存提升至 30 GB,而不是简单重跑。这个“失败—提升—重试”的闭环,正是画像参数在治理中发挥作用的典型方式。
需要强调的是,画像不是一次性标定,而是持续回归。平台应记录每个步骤的实际 CPU 利用率、峰值内存、I/O 吞吐和运行时长,按周或按批次更新画像参数。当某步骤的 P95 内存连续多次超过当前分配值时,自动上调;当长期低于 50% 时,自动下调。这样,资源治理才从静态配置走向动态适应,真正支撑生物计算任务的高效、稳定运行。