如何在云上运行Cactus基因组比对:AWS Toil自动扩缩容与SLURM集群部署完整指南
【免费下载链接】cactusOfficial home of genome aligner based upon notion of Cactus graphs项目地址: https://gitcode.com/gh_mirrors/cact/cactus
Cactus(基于 Cactus 图的无参考全基因组比对器与泛基因组构建工具套件)支持两种大规模计算部署方式:借助Toil工作流引擎在AWS上启动自动扩缩容的临时计算集群,或在本地SLURM高性能计算集群上调度作业。本文面向新手,带你从零完成这两种部署,并用实例数量估算表和关键参数清单,帮你的基因组比对任务省钱又提速 🚀。
为什么 Cactus 适合跑在云端或集群上
Cactus 的渐进式比对(Progressive Cactus)会随物种数与基因组大小指数级消耗算力;Minigraph-Cactus 泛基因组管线同样如此。下图展示了 Cactus 增量添加基因组时如何把对齐问题切分为可并行调度到各计算节点上的子问题——这正是它能天然映射到云上自动扩缩容与 SLURM 作业队列的原因:
两种部署方式的核心差异:
| 对比维度 | AWS + Toil 自动扩缩容 | SLURM 集群 |
|---|---|---|
| 资源来源 | 临时拉起 EC2 实例,用完即销毁 | 使用机构现有计算节点 |
| 共享文件系统 | ❌ 不需要,作业存储在 S3(aws:<region>:<jobStore>) | ✅ 必须,jobstore 与输出需所有节点可见 |
| 成本特征 | 按量付费(Spot 实例更便宜) | 固定成本,适合常态化任务 |
| 适用场景 | 一次性大规模任务、无自有集群 | 长期科研计算、数据不能出内网 |
一、AWS 云部署:Toil 自动扩缩容六步走
Cactus 通过 Toil(项目锁定版本见 toil-requirement.txt,当前为toil[aws]==9.5.0)实现 AWS 集群的自动扩缩容。完整说明见 doc/running-in-aws.md,官方也用它跑过 HPRC 人类泛基因组这类百基因组级任务。
第 1 步:云账号基础准备(密钥对、访问密钥与实例限额)
- 密钥对(Keypair):创建一对 AWS SSH 密钥,用于登录自动拉起的实例;
- 访问密钥:在
~/.aws/credentials配置AWS_ACCESS_KEY_ID与AWS_SECRET_ACCESS_KEY; - 实例限额:新账号默认只能开少量小实例。务必提前检查并申请调高 EC2 限额(注意Spot 与按需限额是分开的),建议按估算值上调一些,留出调整余量。
第 2 步:估算最大 worker 实例数(省钱关键)
集群会自动伸缩,但你必须设置上限防止"扩太猛"。官方给出的粗估公式(向上取整):
| 基因组规模 | Spot 市场(c4.8xlarge) | 按需(r3/r5.8xlarge 级) |
|---|---|---|
| N 个哺乳动物基因组(约 2–4 Gb) | (N/2) × 20台 | N/2台 |
| N 个鸟类基因组(约 1–2 Gb) | (N/2) × 10台 | N/4台 |
| N 个线虫级基因组(约 100–300 Mb) | N/2台 | N/10台 |
| 小于 100 Mb | 单机即可完成,不建议用自动扩缩容集群 | — |
第 3 步:启动 leader 节点并上传数据
在本地机器装好带 Toil 的 Cactus 预编译二进制版(安装流程见 BIN-INSTALL.md),把 AWS 密钥加入ssh-agent后启动 leader:
toil launch-cluster -z us-west-2b <clusterName> --keyPairName <yourKeyPairName> --leaderNodeType t2.medium输入 FASTA 有两条路:直接在 seqfile 里写http://或s3://URL(推荐),或用 rsync 把数据同步到 leader:
toil rsync-cluster -z us-west-2b my-cactus-cluster -avP seqFile.txt input1.fa input2.fa :/第 4 步:在 leader 上安装 Cactus(两个关键改动)
用toil ssh-cluster -z us-west-2b <clusterName>登录 leader 后,重新安装 Cactus,但必须做两处改动,保证 Cactus 复用 leader 预装的 Toil:
- 创建 virtualenv 时加
--system-site-packages; - 不要执行
python3 -m pip install -U -r ./toil-requirement.txt(避免重复安装 Toil)。
第 5 步:提交自动扩缩容比对任务
关键参数是自动扩缩容参数--nodeTypes、--minNodes、--maxNodes,以及AWS 作业存储aws:<region>:<jobStoreName>(jobStoreName 须全局唯一;集群没有共享文件系统,不能用目录型 jobstore)。
--nodeTypes的语法是"实例类型:Spot 最高出价",不带价格即为按需实例。例如 10 个鸡基因组级别的任务:
cactus --nodeTypes c4.8xlarge:0.6,r3.8xlarge --minNodes 0,0 --maxNodes 20,2 \ --provisioner aws --batchSystem mesos \ --metrics aws:us-west-2:<jobstoreName> seqFile.txt output.hal泛基因组管线的真实写法(HPRC 图构建)则使用了更高内存实例并开启默认抢占:
cactus-pangenome ${MYJOBSTORE} hprc-mc.seqfile --outDir ${MYBUCKET} --outName hprc-mc \ --gbz --giraffe --vcf --chrom-vg --maxCores 64 --indexCores 64 --mapCores 8 --alignCores 16 \ --batchSystem mesos --provisioner aws --defaultPreemptable \ --nodeType r5.8xlarge:1.25,r5.16xlarge --nodeStorage 500任务运行时间较长,请在tmux或screen中执行,防止断连中断。
第 6 步:故障续跑与集群销毁
- 任务失败或手动取消后,加
--restart从断点续跑; - 任务完成后务必销毁 leader,否则它会持续计费:
toil destroy-cluster -z us-west-2b <yourClusterName>。
二、SLURM 集群部署:头节点一条命令提交
自 v2.6.1 起,Cactus 原生支持 SLURM(见 doc/progressive.md 的 "Running on a cluster" 章节)。在头节点执行 cactus 命令并加--batchSystem slurm即可,作业会被自动拆分提交给调度器。
集群环境硬性要求
- 共享文件系统:jobstore 与输出目录必须对全部计算节点可见;
- 头节点需本地安装 Cactus Python 包:
cactus --batchSystem slurm不能从 Cactus 官方 Docker 容器内部运行(容器里没有 sbatch 等集群命令)。正确姿势是在头节点用 virtualenv 安装 Cactus,再用--binariesMode docker(或 singularity)让底层二进制走容器; - 本地临时目录:用
--workDir指定计算节点上的本地物理盘作 scratch,远快于共享盘。
SLURM 关键参数清单
| 参数 | 说明 |
|---|---|
--batchSystem slurm | 必须,启用 SLURM 调度 |
--consCores | 每个 cactus-consolidated 作业核数,64 通常是好起点(不能超过节点可用核数) |
--doubleMem true | 强烈推荐:作业因超内存被杀时自动加倍内存重试 |
--batchLogsDir | 强烈推荐:SLURM 附加日志的 scratch 目录 |
--maxMemory | 可选。新版 Cactus 启动时会用sinfo查询集群并自动把每个作业内存请求钳制到最大节点规格,一般无需手动设置;也可用它压低上限 |
--slurmTime | 每个作业的时限,需给一个适用于全部作业的值,如--slurmTime 200:00:00 |
--slurmPartition/--slurmGPUPartition | CPU / GPU 作业分区(Cactus 会按--slurmTime自动推断,可手动覆盖) |
--slurmArgs | 透传其他 sbatch 参数,如--slurmArgs "--nice=5000"降低调度优先级 |
--workDir | 计算节点本地 scratch 目录 |
推荐的最小命令(UCSC 官方示例):
cactus ./js ./examples/evolverMammals.txt evolverMammals.hal \ --batchSystem slurm --batchLogsDir batch-logs --consCores 64 \ --maxMemory 1.4Ti --doubleMem true --slurmTime 200:00:00大任务建议用cactus-prepare --script先把整个流程导出为分步 bash 脚本,便于检查与分段重跑。
GPU 加速:KegAlign 与 SLURM 的组合拳
比对最耗时的 lastz(blast)阶段可换用 GPU 加速版 KegAlign,显著缩短运行时。集群上最省心的组合是:头节点装 Cactus +--binariesMode docker --gpu <N>,让 KegAlign 在 GPU 节点容器内执行;若自动内存估计不准,再用--lastzMemory覆盖。
云与集群部署效果长什么样
无论走哪条路线,跑完都能得到可交互分析的泛基因组图。下面两张图分别是 Cactus 构建的 GRCh38 多态位点泛基因组(MHC 区域)与酵母泛基因组单染色体可视化输出:
常见坑速查
- AWS jobstore 用错:用了目录型 jobstore 会因无共享文件系统而失败,必须用
aws:<region>:<name>形式; - leader 忘了销毁:任务结束 ≠ 账单结束,记得
toil destroy-cluster; - SLURM 下从容器内跑:报"找不到 sbatch"类错误,改到头节点 virtualenv 里运行;
- 内存作业卡 pending:新版已自动钳制,若仍卡住可用
--maxMemory压上限或检查--slurmPartition是否选到了小内存分区; - 非 SLURM 集群(LSF、GridEngine、Torque 等):Toil 理论上支持(
--batchSystem gridEngine等),但官方未充分测试,遇到问题优先求助社区。
相关资料位置
- AWS 部署完整说明:doc/running-in-aws.md
- 集群与云端运行章节:doc/progressive.md
- 泛基因组管线(含 HPRC 云/集群实例):doc/pangenome.md
- Toil 版本依赖:toil-requirement.txt
- 二进制安装说明:BIN-INSTALL.md
小结
没有自有 HPC 资源时,选AWS + Toil 自动扩缩容:六步走流程、Spot 实例压成本、用完即销毁;有 SLURM 集群时,--batchSystem slurm一条命令即可把 Cactus 比对拆到整个集群上跑,配合--doubleMem与本地--workDir基本"装好就能跑"。先用examples/evolverMammals.txt小例子验证环境,再上生产数据,是最稳的上线路径。
【免费下载链接】cactusOfficial home of genome aligner based upon notion of Cactus graphs项目地址: https://gitcode.com/gh_mirrors/cact/cactus
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考