同样的流程为什么有时候会失败呢
前些天我发布了 cellranger更新到4啦,提到了可以免费做一下10X的单细胞转录组数据上游分析,反正刚刚购买的服务器闲着也是闲着。其中一个项目是12个样品的10X的样本的fastq测序原始数据,每个都是100G左右,跑10x单细胞转录组上游流程(10x的cellranger count 流程),反正运行是超级慢了。我分享了自己踩坑的经历,就是:底层架构真的折磨死个人(急,在线等),搞的我Windows的ubuntu子系统彻底放弃,然后安装了双系统也被一个8T硬盘格式搞得没有脾气,好在最后也是完美解决了。
不过我发现有4个样本其实是失败了,看文件夹大小也能看出来的,如下:
41G./D_1
45G./C_2
201G./B_3
236G./A_2
206G./A_1
43G./D_2
48G./C_1
46G./A_3
54G./B_1
217G./D_3
48G./B_2
41G./C_3
正常运行完10x单细胞转录组上游流程(10x的cellranger count )后,会有bam文件输出,供后续使用:
45G Aug 7 07:49 A_3/outs/possorted_genome_bam.bam
52G Aug 7 14:28 B_1/outs/possorted_genome_bam.bam
48G Aug 7 20:35 B_2/outs/possorted_genome_bam.bam
47G Aug 8 04:29 C_1/outs/possorted_genome_bam.bam
44G Aug 8 09:53 C_2/outs/possorted_genome_bam.bam
41G Aug 8 14:57 C_3/outs/possorted_genome_bam.bam
41G Aug 8 20:10 D_1/outs/possorted_genome_bam.bam
42G Aug 9 01:51 D_2/outs/possorted_genome_bam.bam
但是我把这4个样本,重新跑10x单细胞转录组上游流程(10x的cellranger count 流程),居然这次又成功了,如下:
45G./B_3
46G./A_2
54G./A_1
59G./D_3
让我非常好奇,**第一次到底发生了什么,为什么就失败了呢,是服务器的不稳定性?**同样的机器,同样的数据,同样的软件和流程,仅仅是在不同时间运行居然结果还不一样,我们该相信它吗?
首先看看原始数据的大小
总共是1.3T的数据,每个样本的fastq测序原始数据文件夹如下:
124GA_1
110GA_2
113GA_3
125GB_1
118GB_2
105GB_3
107GC_1
106GC_2
98GC_3
103GD_1
109GD_2
119GD_3
看起来也不是因为样本的fastq测序原始数据到达了临界点,我的64Gb内存不应该是不够的。
查看log日志
失败的样本的日志如下:
2020-08-07 22:22:04 [jobmngr] 32.8GB less memory than expected was free
2020-08-07 22:22:05 [jobmngr] Need 400 centi-threads to start the next job (200 available). Waiting for jobs to complete.
2020-08-07 22:22:05 [jobmngr] Need 21504 MB of memory to start the next job (2203 available). Waiting for jobs to complete.
2020-08-07 22:22:05 [jobmngr] Need 21504 MB of memory to start the next job (9822 available). Waiting for jobs to complete.
2020-08-07 22:22:05 [runtime] (failed) ID.B_3.SC_RNA_COUNTER_CS.SC_MULTI_CS.SC_MULTI_CORE.MULTI_GEM_WELL_PROCESSOR.COUNT_GEM_WELL_PROCESSOR._BASIC_SC_RNA_COUNTER._MATRIX_COMPUTER.ALIGN_AND_COUNT
2020-08-07 22:22:05 [runtime] Waiting 1s before attempting a retry.
2020-08-07 22:22:06 [runtime] Transient error detected. Log content:
Job failed in stage code
signal: killed
写的还是蛮清楚的了,内存不够,我的这个服务器,就是64Gb的内存而已。
成功的日志如下:
2020-08-10 02:53:26 Shutting down.
2020-08-10 02:53:26 [jobmngr] Highest memory usage observed: {
"rss": 35828592640,
"shared": 382881792,
"vmem": 38134419456,
"text": 88621056,
"stack": 36670771200,
"proc_count": 93
}
还是同样的问题,为什么同样的机器,同样的数据,同样的软件和流程,仅仅是在不同时间运行居然结果还不一样。因为是同样的机器,不可能是内存不一样。
除非我在运行这个项目的10x单细胞转录组上游流程(10x的cellranger count 流程)的3天时间,有过其它的操作占用了这个小机器的内存,而那个占用,就恰好堵塞了这个10x单细胞转录组上游流程(10x的cellranger count 流程)的运行,导致失败。
可是,如果是这样的话,这个10x单细胞转录组上游流程(10x的cellranger count 流程)设计的时候,不考虑这一点呢?我完整运行10x的cellranger count 流程的命令如下:
bin=../pipeline/cellranger-4.0.0/bin/cellranger
db=../pipeline/refdata-gex-GRCh38-2020-A
fq_dir=/media/jmzeng/149A-E625/10x/lc_scRNA/
ls -lh $bin
ls -lh $db
# id=191598A_1
cat sampleID.txt |while read id ;do
ls -lh "$fq_dir/$id"
$bin count --id=$id \
--localcores=10 \
--transcriptome=$db \
--fastqs="$fq_dir/$id" \
--sample=$id \
--expect-cells=5000
done
因为是超级小的服务,所以我设置了 localcores 是10,反正电脑是有16个线程的,就是我没有规定内存,但是这个小服务器是有64Gb内存的。