1. 生物计算任务资源治理工程导论

生物计算任务资源治理工程,研究的不是某一个生信软件怎么用,也不是某一台服务器怎么装,而是一个更上位的问题:当测序、组装、比对、变异检测、单细胞分析、结构预测等任务持续进入计算环境时,我们如何让 CPU、内存、存储、GPU、网络、许可证和调度队列这些资源,被稳定、可解释、可复用、可审计地分配给正确的任务。它介于生物信息学、高性能计算运维与平台工程之间,核心目标是把"能跑通"提升为"可治理"。

课程定位:从"跑得动"到"管得住"

很多实验室的第一阶段是"脚本能跑"。一名分析人员写一个 shell 脚本,把 fastq 送进比对工具,再调用变异检测,最后输出 VCF。这个阶段关注的是算法正确性。第二阶段是"多人能跑",样本量上升、人员增加、集群出现,问题就从算法转向资源:谁占了 64 核、谁把 512 GB 内存节点跑满、临时文件把 /scratch 写爆、GPU 队列排了三天。第三阶段才是"可治理":资源有配额、任务有优先级、失败可归因、成本可核算、结果可追溯。

本课程面向第三阶段。它不替代生信算法课,也不替代 Linux 基础课,而是补齐"任务—资源—策略—证据"这条链路。学完后,你应当能够为一个真实的生物计算任务定义资源画像,设计队列与配额策略,判断一次失败是算法问题、数据问题还是资源治理问题,并能用日志和指标证明你的判断。

核心问题:四类反复出现的矛盾

资源治理之所以必要,是因为存在四类结构性矛盾。第一,需求异质性:比对任务可能吃满 CPU 但内存平稳,而组装或宏基因组拼接常常是"低 CPU、高内存、长时运行",GPU 任务则对显存和驱动版本敏感。第二,资源有限性:集群总核数、总内存、存储带宽和许可证数量都是硬约束,不可能无限扩容。第三,公平与效率冲突:严格公平会让大任务频繁被抢占,纯效率优先又会让小任务长期饥饿。第四,可观测性不足:任务失败时,日志往往只写"killed",不写是被 OOM killer 终止、被调度器抢占,还是超时。

这四类矛盾决定了治理工程的基本动作:把任务分类、把资源量化、把策略显式化、把证据留存下来。缺少任何一环,治理都会退化为"凭经验拍脑袋"。

治理对象:任务、资源、策略、证据

治理对象可以拆成四个层次。最上层是任务,包括任务类型、输入数据规模、预期运行时长、依赖关系与重试语义。第二层是资源,包括计算资源(CPU 核、GPU 卡与显存)、内存、存储(本地 scratch、共享并行文件系统、对象存储)、网络带宽以及软件许可证。第三层是策略,包括队列划分、优先级、配额、抢占规则、超时与重试上限。第四层是证据,包括调度日志、资源使用曲线、退出码、失败原因分类和成本记录。

四层之间是双向的:策略作用于任务与资源,证据反过来修正策略。例如,若发现某类比对任务长期只用到申请核数的 40%,就应下调其默认核数申请,把释放出的资源还给其他队列。这就是治理的闭环。

生物计算任务资源治理的四层对象与闭环 ① 任务层 类型:比对 / 组装 / 变异检测 / 单细胞 / 结构预测 输入规模:fastq 体积、参考基因组大小、样本数 运行特征:预期时长、依赖关系、重试语义 示例:WGS 比对,30×,约 90 GB fastq → 决定资源画像的起点 ② 资源层 计算:CPU 核数、GPU 卡与显存 内存:单节点容量、每任务上限 存储:本地 scratch、并行文件系统、对象存储 其他:网络带宽、软件许可证数量 → 硬约束,不可无限扩容 ③ 策略层 队列划分:短任务 / 长任务 / GPU / 高内存 优先级与配额:组配额、用户上限 抢占规则、超时上限、重试次数 示例:高内存队列单任务 ≤ 512 GB → 把公平与效率显式化 ④ 证据层 调度日志:提交、排队、启动、结束时间 资源曲线:CPU / 内存 / GPU 使用率 退出码与失败原因分类 成本记录:核时、卡时、存储占用 → 用于归因与策略修正 证据修正策略 策略约束任务 治理闭环:任务分类 → 资源量化 → 策略显式化 → 证据留存 → 策略修正 缺少任一环,治理退化为凭经验拍脑袋

工程边界:治理不做什么

明确边界同样重要。资源治理工程不负责算法本身的正确性,不负责生物学解释,也不负责重写生信工具。它负责的是:任务提交时的资源声明是否合理、调度策略是否与任务特征匹配、失败是否可归因、成本是否可核算。换句话说,它管的是"任务与资源之间的契约",而不是"任务内部的科学逻辑"。

边界还体现在粒度上。治理通常以"任务"为最小单位,而不是以"单个函数调用"为单位。一个比对任务申请 32 核、128 GB 内存、运行 6 小时,这是一个可治理的单元;而任务内部某个排序步骤用了多少内存,属于性能调优,不属于治理工程的主战场。把边界划清楚,才能避免治理范围无限膨胀。

一个可操作的起点:任务资源画像卡

治理的第一步不是买机器,而是把任务说清楚。下面给出一张可直接填写的任务资源画像卡示例,字段均来自本节四层对象。示例数值为教学假设,用于说明填写方式,不代表任何真实集群的实测结果。

字段填写内容(示例)所属层次
任务名称wgs-align-sampleA任务层
任务类型全基因组比对(BWA-MEM2)任务层
输入规模fastq 约 90 GB,参考基因组 3.1 GB任务层
CPU 申请32 核资源层
内存申请128 GB资源层
存储需求scratch 临时空间 300 GB资源层
目标队列normal 队列,优先级 50策略层
超时上限12 小时策略层
重试上限2 次策略层
观测指标峰值内存、CPU 利用率、退出码证据层
失败判据退出码 137 且峰值内存接近上限 → 疑似 OOM证据层

这张卡的价值在于:它把"我要跑一个比对"变成了可调度、可审计、可复盘的声明。当任务失败时,你可以对照卡片判断是申请不足、策略不当,还是数据异常。例如退出码 137 通常与 SIGKILL 相关,若同时观察到峰值内存逼近 128 GB 上限,就应优先怀疑内存申请偏低,而不是算法出错。

资源画像卡不是一次性文档。每次任务结束后,应把实际峰值内存、实际运行时长回填到卡片中,形成"申请值 vs 实际值"的对照。连续多次实际值显著低于申请值,就说明申请过宽,可以下调;反之则说明申请过紧,需要上调。这是治理闭环中最容易落地的一步。

本课程的组织逻辑

后续章节将沿着"任务—资源—策略—证据"这条主线展开:先建立任务分类与资源画像的方法,再进入队列、配额、优先级与抢占策略的设计,然后讨论存储与数据流的治理,最后落到可观测性、失败归因与成本核算。每一章都会尽量给出可填写的表单、可参考的参数和可判断的结果依据,而不是停留在概念层面。

需要强调的是,治理工程没有唯一正确答案。不同机构的数据规模、硬件条件、人员结构和合规要求差异很大,同一套策略在 A 集群有效,在 B 集群可能完全不适用。因此本课程更重视"如何推导出适合自己环境的策略",而不是提供一套固定模板。判断治理是否成功的标准也很朴素:任务能按时跑完、资源没有被长期浪费、失败能说清原因、成本能算得出来。