1.2.Cluster

For advanced users

0) cluster简介

生物信息学中的大多数数据处理任务比日常工作中需要更多的计算能力,这意味着我们必须使用大型服务器或计算集群。集群(cluster)就是一组相互独立的计算机,通过高速的网络组成一个计算机系统。对外表现为单一的系统,协同起来向用户提供系统资源,系统服务。高性能计算集群(High-perfomance clusters),简称HPC,采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。

下面以清华大学生物计算平台的生物信息计算集群(P cluster) 为例,介绍集群的具体使用。

1) 远程登录cluster

1a) Mac用户:

从“/Applications⁩/⁨Utilities” 中打开 "Terminal" 软件,使用SSH登录远程计算集群。

ssh -p 11*** [email protected]*.*

在本地机器和远程机器之间传输文件 1. 使用Linux下的scp或者rsync命令; 2. 使用独立软件例如FileZilla: FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户端工具,传输速度很快,而且稳定。下载地址:https://www.filezilla.cn/ 选择导航菜单的文件 --> 站点管理,输入名称和主机IP,协议默认SSH,端口默认22。

1b) Windows用户:

安装 Xshell, 下载地址:https://xshell.en.softonic.com/ ,选择家庭/学校免费版下载。

名称

内容

主机IP

166.111.*.* (申请得到)

端口

11** (申请得到)

用户名

user_??(申请得到)

密码

password(申请得到)

协议

SSH or STPF-SSH

2) 获取系统环境

source /WORK/Samples/singularity.sh

3) 计算任务的提交

注意: 下面的脚本中会生成一些新的文件和文件夹,如果需要多次测试脚本,第二次执行时最好清空之前的文件和文件夹,不然容易出现文件或者文件夹已经存在的报错信息。

(1) Example 1. mapping

(1.1) 准备任务提交脚本 test1.sh

任务提交脚本有自己的固定格式,如下:

#!/bin/bash
#SBATCH -J tophat_test
#SBATCH -p CN_BIOT
#SBATCH --nodes=1
#SBATCH --ntasks=4
#SBATCH --output=%j.out
#SBATCH --error=%j.err
# Get the software
export PATH=/WORK/teaching/bin:$PATH
# run code.
data=/WORK/teaching/diff-exp/
mkdir -p ~/mapping
mapping=~/mapping
tophat --bowtie1 -p 4 -G ${data}yeast_annotation.gff --no-coverage-search -o ${mapping}/wt1_thout ${data}bowtie_index/YeastGenome ${data}Raw_reads_10k/wt1.fq
tophat --bowtie1 -p 4 -G ${data}yeast_annotation.gff --no-coverage-search -o ${mapping}/wt2_thout ${data}bowtie_index/YeastGenome ${data}Raw_reads_10k/wt2.fq
tophat --bowtie1 -p 4 -G ${data}yeast_annotation.gff --no-coverage-search -o ${mapping}/wt1X_thout ${data}bowtie_index/YeastGenome ${data}Raw_reads_10k/wt1X.fq
tophat --bowtie1 -p 4 -G ${data}yeast_annotation.gff --no-coverage-search -o ${mapping}/wt2X_thout ${data}bowtie_index/YeastGenome ${data}Raw_reads_10k/wt2X.fq

Name

mean

#SBATCH -J echo

命名job name为“tophat_test”

#SBATCH -p ptest-computer

使用ptest-computer这个队列(queue)

#SBATCH --nodes=1

使用的节点数为1,对于平行运算的程序,希望多线程都在1个node上

#SBATCH --ntasks=4

使用的任务线程数为4(每个节点有16个核,所以1个节点的最大线程数为16)

#SBATCH --output=%j.out

运行日志输出到当前目录中,以 .out 结尾

#SBATCH --error=%j.err

运行错误日志输出到当前目录中,以 .err 结尾

(1.2) 使用sbatch命令提交 test1.sh

sbatch test1.sh

(2) Example 2. RNAediting

该例子一共需要准备4个文件,具体见(2.1)-(2.4)。

(2.1) 主提交脚本 test2.sh

#!/bin/bash
#SBATCH -J rnaeditor_test
#SBATCH -p CN_BIOT
#SBATCH --nodes=1
#SBATCH --ntasks=10
#SBATCH --output=%j.out
#SBATCH --error=%j.err
export SINGULARITY_BINDPATH='/WORK,/Share'
/WORK/app/singularity-2.0-20191204/bin/singularity exec /WORK/teaching/image/rnaeditor_1.8.simg bash run_RNAeditor.sh

(2.2) 运行脚本 run_RNAeditor.sh

上述test2.sh中嵌套了一个run_RNAeditor.sh,里面的内容可以按如下准备:

sh RNAeditor_env.bashrc
mkdir -p ~/output2/
cp -r /apps/RNAEditor/ui/ ./
RNAEditor.py -i /WORK/teaching/rna_regulation/rnaeditor/chr1.fq -c ~/RNAeditor_config

(2.3) 环境变量文件 RNAeditor_env.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
export PATH=/apps/RNAEditor/ui:\
/apps/RNAEditor/ui:\
/apps/RNAEditor/scripts:\
/apps/RNAEditor/website:\
/apps/RNAEditor/ressources:$PATH

(2.4) 参数配置文件 RNAeditor_config

特别注意,下面的 yourname 写的是自己的用户名。

output = /home/[yourname]/rna_regulation/rnaeditor/output2/chr1

下面是以 user_02 为例子`

# This file is used to configure the behaviour of RNAeditor
# Standard input files
refGenome = /WORK/teaching/rna_regulation/rnaeditor/data/Homo_sapiens.GRCh38.ch1.fa
gtfFile = /WORK/teaching/rna_regulation/rnaeditor/data/Homo_sapiens.GRCh38.chr1.gtf
dbSNP = /WORK/teaching/rna_regulation/rnaeditor/data/dbSNP.vcf.new
hapmap = /WORK/teaching/rna_regulation/rnaeditor/data/HAPMAP.vcf
omni = /WORK/teaching/rna_regulation/rnaeditor/data/1000GenomeProject.vcf
esp = /WORK/teaching/rna_regulation/rnaeditor/data/ESP.chr1.vcf
aluRegions = /WORK/teaching/rna_regulation/rnaeditor/data/Repeats.chr1.bed
output = /home/user_02/output2/chr1
sourceDir = /usr/local/bin/
maxDiff = 0.04
seedDiff = 2
standCall = 0
standEmit = 0
edgeDistance = 3
intronDistance = 5
minPts = 5
eps = 50
paired = False
keepTemp = True
overwrite = False
threads = 5

(2.5) 提交任务脚本

准备好上述4个文件后,用sbatch命令提交test2.sh

sbatch test2.sh

文件产生 chr1.editingSites.vcf,chr1.editingSites.gvf 表示运行成功。由于RNAeditor软件运行的最后一步是画图,需要root权限。在集群上一般我们没有办法取得root权限,所以到这步就完成了。

如果想查看最后一步的图,可以按照 6.1.RNA Editing Detection 重新运行一遍。

chr1.editingSites.vcf

#CHROM POS ID REF ALT QUAL FILTER INFO
1 27206932 . A G 66.28 . ExcessHet=3;ABHom=1;FS=0;MLEAF=1;MLEAC=2;AF=1;GI=ENSG00000225159:noncoding-exon;AC=2;AN=2;MQ0=0;Dels=0;SOR=3;MQ=37;QD=11;HaplotypeScore=0;BaseCounts=0,1,6,0;DP=7;
1 27207408 . T C 625.77 . ExcessHet=3;ABHom=1;FS=0;MLEAF=1;MLEAC=2;AF=1;GI=ENSG00000225159:noncoding-exon;AC=2;AN=2;MQ0=0;Dels=0;SOR=6;MQ=33;QD=22;HaplotypeScore=5;BaseCounts=0,28,0,0;DP=28;
1 225790429 . T C 12.99 . ExcessHet=3;AC=1;BaseQRankSum=-1;MLEAF=0;AF=0;ABHet=0;GI=ENSG00000143742:3'UTR;MLEAC=1;AN=2;MQ0=0;Dels=0;FS=0;MQ=37;QD=2;SOR=0;HaplotypeScore=1;MQRankSum=1;BaseCounts=0,2,0,4;DP=6;ReadPosRankSum=-1;
1 236981402 . T C 1224.77 . ExcessHet=3;ABHom=1;FS=0;MLEAF=1;MLEAC=2;AF=1;GI=ENSG00000237991:noncoding-exon;AC=2;AN=2;MQ0=0;Dels=0;SOR=7;MQ=30;QD=27;HaplotypeScore=0;BaseCounts=0,44,2,0;DP=46;
1 87046554 . T C 185.78 . ExcessHet=3;ABHom=1;FS=0;MLEAF=1;MLEAC=2;AF=1;GI=ENSG00000153936:intron,ENSG00000267561:intron,ENSG00000225568:noncoding-exon;AC=2;AN=2;MQ0=0;Dels=0;SOR=1;MQ=37;QD=23;HaplotypeScore=0;BaseCounts=0,8,0,0;DP=8;
1 220698670 . T C 3.98 . ExcessHet=3;AC=1;BaseQRankSum=1;MLEAF=0;AF=0;ABHet=0;GI=ENSG00000162817:3'UTR;MLEAC=1;AN=2;MQ0=0;Dels=0;FS=0;MQ=37;QD=0;SOR=0;HaplotypeScore=0;MQRankSum=-1;BaseCounts=0,2,0,9;DP=11;ReadPosRankSum=0;

chr1.editingSites.gvf

#Gene_ID Name SEGMENT #CHROM GENE_START GENE_STOP VAR_ID VAR_POS REF ALT QUAL #A #C #G #T Reads_Total Edited_Reads Editing_Ratio
ENSG00000225159 NPM1P39 noncoding-exon 1 27206930 27207796 . 27206932 A G 66.28 0 1 6 0 7 6 0.86
ENSG00000225159 NPM1P39 noncoding-exon 1 27206930 27207796 . 27207408 T C 625.77 0 28 0 0 28 28 1.0
ENSG00000143742 SRP9 3'UTR 1 225777813 225790466 . 225790429 T C 12.99 0 20 4 6 2 0.33
ENSG00000237991 RPL35P1 noncoding-exon 1 236981339 236981708 . 236981402 T C 1224.77 0 44 2 0 46 44 0.96
ENSG00000153936 HS2ST1 intron 1 86914648 87109998 . 87046554 T C 185.78 0 80 0 8 8 1.0
ENSG00000267561 RP5-1052I5.2 intron 1 86993009 87169204 . 87046554 T C 185.78 0 8 0 0 8 8 1.0
ENSG00000225568 RP11-384B12.3 noncoding-exon 1 87045875 87046700 . 87046554 T C 185.78 0 8 0 0 8 8 1.0
ENSG00000162817 C1orf115 3'UTR 1 220689845 220699157 . 220698670 T C 3.980 2 0 9 11 2 0.18

4) 监视和控制在运行的任务

  • 查看队列信息

squeue
  • 查看节点信息

sinfo
  • 取消任务

scancel jobid
  • 查看节点

pestat

5) 退出

exit

6) Tips

(1) 任务要尽量小而多

尽可能把大的任务拆分成小的,可以用bash等脚本的for loop写出多个提交脚本(test1.sh, test2.sh, ..., test100.sh), 然后在用for命令在命令行里一次提交多个。

建议一次提交的任务数是总线程数的5-10倍,比如一个集群容许每个用户最多跑50个jobs,那么可以一次提交250-500个jobs的脚本。

但是每个脚本的时间要尽可能短(建议每个大约~10min - 2hour)。

(2) 对于大内存软件要注意多占线程数

注意在1个node上同时多人运行多个大内存程序时,会造成内存不够和溢出而死机。

例如, 运行 star 时,推荐 core=6,这样的话, 如果1个node有128G memory、20 core,一次用6 core,不仅可以平行运算提速,而且至少占用 128G/(20/6) = 38.4G的内存, 应该不太容易内存溢出而死机了 (如果还是溢出就增加 core=8,10,12...)。

对于P集群,一个node有64G, 16 core, 运行star这样的程序时,我们推荐独占一个node,1个node上运行1个star(最多可以2个)程序:

#SBATCH --nodes=1
#SBATCH --ntasks=16

Advanced: 如果我们担心其他人的程序也在自己的node上跑,挤压自己的内存,但一个脚本只用8个线程也足够了,还空余8个(一个node总共是16个core)。 这时可以同时提交两个脚本,虽然每个脚本只指定8个线程,但可以在两个脚本中指定相同的node的名称。具体如何操作课查看队列管理程序的help。