云生信学生物信息学

用分批合并与资源监控规划多样本服务器

作者:发布于 2026-11-15约 7 分钟阅读
分批合并也要测最终峰值

分批合并也要测最终峰值:建立稳定样本清单;独立进程生成批次;验证最终合并与存储;按实测规划内存和租期
本文操作与检查路径示意。

把几十份Seurat对象分成若干批,是管理多样本任务的一种方式,但“分批”不等于最后一定省内存。中间对象、最终对象和合并临时数据仍可能同时存在;不断把新样本追加到越来越大的对象,还可能重复复制大量数据。资源方案应该建立在分阶段记录上,而不是凭批次数猜配置。

本文从已验收的counts-only样本文件出发,演示分批输出与最终合并的组织方法。它保留完整样本清单和稳定细胞标识,适用于后续仍需要全量对象的场景。如果最终目标可以使用磁盘矩阵或参考映射,也应比较那些路径,而不强行物化一个巨大的合并结果。

建立样本清单和一致的输入合同

准备CSV,至少有sample_id,path两列。每个文件应已核对RNA原始counts、参考版本和细胞级元数据,样本ID不重复。不同批次必须使用同一处理脚本与版本,不能一批保留SCT、一批只有counts,再把差异归结为合并出错。

建议在单样本阶段写入样本ID,并在第一次合并时添加稳定细胞前缀。后续批次合并不再重复加同一前缀。样本拆分方案、预期细胞数和生成文件路径一并保存,这样失败后才能从已验收节点继续,而不是重新运行全部步骤。

阶段 需要保存的记录 主要检查
单样本准备 样本ID、路径、细胞数、版本 参考和计数含义一致
批次合并 输入清单、资源日志、输出 细胞总数、名称唯一、元数据
最终合并 全部批次文件及样本集合 不漏样、不重复、层结构正确
迁出或继续分析 对象与外部后端的路径清单 新会话可读且下一步可执行

让每一批在独立R进程完成

将下面代码保存为merge_batch.R。输入CSV是一批已经精简和验收的样本文件。示例要求至少两个样本,并将细胞前缀与样本列在本批内固定;不覆盖原输入文件。RNA之外的模态与模型不在此脚本范围。

library(Seurat)
args <- commandArgs(trailingOnly = TRUE)
stopifnot(length(args) == 2L)
tab <- read.csv(args[1], stringsAsFactors = FALSE)
stopifnot(all(c("sample_id", "path") %in% names(tab)),
          nrow(tab) >= 2L, !anyDuplicated(tab$sample_id))
xs <- lapply(seq_len(nrow(tab)), function(i) {
  x <- readRDS(tab$path[i])
  x$sample_id <- tab$sample_id[i]
  x
})
expected <- sum(vapply(xs, ncol, integer(1)))
out <- merge(xs[[1]], y = xs[-1], add.cell.ids = tab$sample_id,
             merge.data = FALSE, merge.dr = FALSE)
stopifnot(ncol(out) == expected, !anyDuplicated(colnames(out)))
write.csv(as.data.frame(table(out$sample_id)),
          paste0(args[2], ".samples.csv"), row.names = FALSE)
saveRDS(out, args[2])
mkdir -p logs batches
/usr/bin/time -v -o logs/batch01.time.txt   Rscript merge_batch.R batch01.csv batches/batch01.rds   >logs/batch01.stdout.txt 2>logs/batch01.stderr.txt

独立进程有助于在每批结束后释放该进程持有的对象,但不能保证最终阶段占用较低。不要让所有批次同时在一台资源不足的机器上运行。先顺序运行代表性批次,再根据实际峰值决定可否并发,并为工作盘预留中间文件空间。

最终合并要单独试跑

最终合并时读入批次文件,确认它们的细胞名已经全局唯一,再调用merge且不重复使用样本前缀。验证预期细胞总数、样本集合和每个样本计数。若希望采用成对分层合并,可以记录每一层的输入输出与峰值,但不能提前承诺它一定降低所有数据的最高占用。

资源日志要覆盖读入、合并和保存全过程。磁盘型后端的R对象大小不能代表外部数据总量;多进程日志中的单进程最大常驻内存也不等于所有并发进程的同时总峰值。正式配置前,应在计划的最大批次和最终对象上进行复验。

什么时候需要调整方案

如果只是单批过大,可减少同一时刻读入的样本,比较更多磁盘I/O带来的代价。如果最终对象本身已无法在可用内存中处理,应考虑兼容磁盘后端、sketch或其他与研究目标匹配的分析方式;不能仅靠循环追加保证成功。

恢复任务前先验收已有批次

不能只凭文件存在就跳过某一批。磁盘写满、进程中断或输出未完整关闭,都可能留下不完整文件。恢复前重新读入并检查细胞计数、样本集合与层结构,再把这批标为可复用。完成验收后的文件、输入清单和脚本版本应一起保存,避免后续混入不同参数产生的旧批次。

调整批次大小时也要保留历史方案:重新分批属于新的执行安排,原样本ID应保持稳定,不能因分批顺序改变而重新定义样本。这样才能对照哪一层产生了额外资源需求。

仍需全量联合计算的团队,可以将样本清单、总细胞数、各阶段峰值、最终文件大小和使用周期整理成配置需求。确认流程和资源测量后再选择大内存独享CPU租赁,报价与验收应覆盖实际可用内存、工作盘、环境版本及数据交接范围。

参考与版本核对

下载练习材料

下载教程 PDF · 下载代码与示例数据 ZIP

先核对包内SHA256清单,再在独立目录复现。

需要额外算力时

适用前提:减少冗余后合并峰值仍超过本地容量。如需额外资源,可评估大内存独享CPU服务器租赁。咨询时说明软件版本、任务规模和使用期限,配置与支持范围另行确认。

咨询本任务的服务器配置

咨询本任务的服务器配置

留下手机号,我们会结合本文任务与您沟通服务器配置和报价。

也可联系云生信企业微信客服,说明本文任务。

把知识用于当前任务

先确定合适的计算资源

根据数据规模和分析任务,快速测算 CPU、内存、存储与 GPU 配置。

测算服务器配置仍有疑问,联系客服 ↗