一个太少但100个太多

昨天提到了最近接了一个单细胞转录组项目,有80个10X样品,每个样品的单细胞测序数据都是100G左右的fq.gz文件,在跑完了cellranger流程后整理结果的同时,重新捡起来了七八年前的Linux知识,写了个 带着文件夹结构的拷贝笔记分享给大家。

其实这个项目背后的故事还有很多,我安排给一个萌新负责跑这个流程。因为确实超级简单,我写了一个脚本,文件名是 run-cellranger.sh ,内容如下所示 :

bin=../pipeline/cellranger-5.0.1/bin/cellranger
db=../pipeline/refdata-gex-GRCh38-2020-A
ls $bin; ls $db

fq_dir=/home/data/project/10x/raw
$bin count --id=$1 \
--localcores=4 \
--transcriptome=$db \
--fastqs=$fq_dir \
--sample=$1 \
--expect-cells=5000

然后每个样本都只需要提交上面的这个脚本即可,示例如下 :

bash run-cellranger.sh YX-Endo-Decidu 1>log-YX-Endo-Decidu.txt 2>&1 
# 每个样品都是独立的提交方式

但是,那萌新也太让我不省心了,不知道他在哪学的Linux脚本编写方式,把全部的80个样品的命令打印出来成为一个脚本,然后nohup那个脚本。

我等了两天后询问项目进展,结果跟我说才跑了8个样品,我勒个去,这是一个加急项目啊!所以我过去给他纠正了,让他学会并行处理项目,不仅仅是批量处理。

虽然我每个10x样品里面的代码都是调用了4个线程,但是样本很多,这个时候把多个样本同时提交,也就是并行,理论上也可以加快这个项目进度,当然了,前提是这个服务器有足够的计算资源,都可以给这个项目调配。

然后另外一个更气人的事情就出现了,该萌新居然是把80多个10x样本的run-cellranger.sh 同时全部提交了!!!

然后我们的服务器就崩溃了,唉,如下所示:

6601611494707_.pic_hd

因为找不到真正的cellranger把服务器搞奔溃的截图,所以只好是放了一个全面实习生的“血的教学”。其实绝大部分生物信息学的软件工具都是设置了内存和CPU接口,不可能让大家无限制消耗计算机资源的,我让实习生总结了,如下:

6591611494669_.pic_hd

我们的服务器目前并没有组建集群,我拿出来了其中一个96线程372G内存的单机给这个80多个10x样本数据处理项目,其实稍微计算一下就明白,应该是每次提交20个样品的run-cellranger.sh 脚本,分成4次提交即可。

这个时候,需要使用下面的一些shell语法啦,主要就是每次运行样品,都需要对一个计数变量自增 1

config_file=$1
number1=$2
number2=$3
index=/reference/index/salmon/gencode.v32.salmon.index
mkdir -p quants
cat $config_file |while read id
do
 file=$(basename $id )
 sample=${file%%.*}
 if((i%$number1==$number2))
 then
 arr=($id)
 fq1=${arr[1]}
 fq2=${arr[2]}
 sample=${arr[0]}
 echo "Processin sample ${sample}"
 salmon quant -l IU --gcBias -i $index -1 $fq1 -2 $fq2 -p 4 -o quants/${sample}_quant

fi
 i=$((i+1))
done

我实在是不明白,这个脚本很难吗?

我在R里面给萌新写了个例子;

f=1:24
f
echo <- function(f,n1,n2){
 n=1
 for (i in f ){
 if ((n %% n1) == n2) {
 print(i)
 }
 n=n+1
 }
}

echo(f,4,1)

确实很简单啊?

编程能力其实是解决问题的能力

Comments are closed.