专栏名称: 生信百科
依托高校科研平台,面向生物信息科研工作者。生物信息学习资料;常见数据分析技巧、流程;公共数据库分享;科研思路分享;
目录
相关文章推荐
丁香园  ·  刚刚!暂停向中国市场供应 HPV 疫苗 ·  17 小时前  
Clinic門诊新视野  ·  赛禾医疗亮相Arab Health ... ·  21 小时前  
蒲公英Ouryao  ·  2024年FDA批准的50个“创新药”(下载 ... ·  3 天前  
医学界  ·  在“双非”医学院,他本硕7年发了12篇SCI ·  5 天前  
51好读  ›  专栏  ›  生信百科

如何有效地使用计算资源?

生信百科  · 公众号  · 医学  · 2017-07-27 07:33

正文

如果你有一个性能还不错的工作站 ,例如 2*E5-2690 v4 (每个 CPU 有14 核心、28 线程)、512 g 内存,有100个个体的重测序数据需要分析,你会如何做呢?用 for 循环一个个体接一个个体的分析么?不要吧!太浪费计算资源了。

再有,如果多人同时使用同一个工作站,同一时间投递任务过多,会出现系统卡顿现象或者某些任务占用资源过多直接被系统 kill 的情况,会浪费时间、精力和计算资源。

怎么才能更好地使用工作站或者集群的计算资源呢?在这里我推荐大家使用 "集群作业调度系统"。即使你使用的仅是一个工作站,也可以安装集群作业调度系统,从而高效、稳定地利用你的计算资源。其实,各个超算中心都是使用 "作业调度系统" 来管理计算资源的。本期我将简单地介绍几个 "作业调度系统" 的使用方法。

Torque 作业调度系统

#PBS -N fastqc 

#PBS -S /bin/bash 

#PBS -l nodes=1:ppn=8 

#PBS -l walltime=100:00:00 

#PBS -q batch 

#PBS -o run.out 

#PBS -e run.err 

cd $PBS_O_WORKDIR 

mkdir 00.FastQC 

fastqc --noextract -t 2 test.1.fq.gz test.2.fq.gz  -o ./00.FastQC 

上面这个例子是用 fastqc 对 test 个体的正向和反向数据进行分析;

-N 设置任务的名称;

-S 其实是 shebang,指定用哪个 shell 来执行脚本;

-l 用来指定申请资源的情况,nodes 指明想要申请的节点数,ppn 指明每个节点申请的线程数;

walltime 用来指明任务运行时间,这里需要注意的是如果时间结束任务还没完成的话,任务将被终止;

-q 指明申请的队列,一个集群往往有多个队列 (例如:普通节点队列、大内存节点队列等),任务提交以后,将会在其申请的队列排队;

-o 指明标准输出文件;

-e 指明标出错误文件;

最重要的是 cd $PBS_O_WORKDIR 这句命令 ,它表示进入脚本文件所在的目录,执行脚本中的命令。如果没有这个命令,系统把用户 home 目录里当作工作目录,执行脚本中的命令;

本例中,系统将在脚本所在的目录建立 00.FastQC 文件夹,寻找 test.1.fq.gz test.2.fq.gz 两个文件作为输入文件,并把 fastqc 的运行结果写入 00.FastQC 文件夹内。

将上面的脚本存为 fastqc.sh,运行 qsub  fastqc.sh,会将脚本递交到集群 batch 队列进行计算。

递交脚本以后,使用 qstat 可以查看脚本运行状态,结果会显示 Job ID (作业调度系统分配的任务代号)、Name (脚本的名称)、User (递交任务的用户)、Time use (已经运行的时间)、S (任务状态,R 表示运行、E 表示出错、C 表示停止) 以及 Queue (任务投递的队列);

使用 qstat -u username 可以查看指定用户的任务状态;

使用 qdel + JobID 来终止指定任务、qdel + username 终止用户所有任务;

使用 pbsnode -a 查看各节点的工作状态。

SLURM 作业调度系统

#!/bin/bash 

#SBATCH -A projname 

#SBATCH -n 10 

#SBATCH -t 12:00:00 

#SBATCH -J job_name 

#SBATCH --output=test.out 

#SBATCH --error=test.err 

mkdir 00.FastQC 

fastqc --noextract -t 2 test.1.fq.gz test.2.fq.gz  -o ./00.FastQC

-A 指定项目名称,这个项目名称是指从特定集群申请来的计算资源;

-n 指明申请的线程数;

-t  指明任务运行时间,申请的时间不是越长越好,申请很长的时间可以保证任务完成,但是可能需要更久的排队时间;

-J 指明任务的名称;

其它各的参数解释与 Torque 类似。

将上面的脚本存为 fastqc.sh,运行 sbatch fastqc.sh,会将脚本递交到集群 batch 队列进行计算。

使用 squeue -u username 来查看指定用户的任务状态,包含 JOBID、PARTITION、NAME、USER、ST、TIME、NODES NODELIST(REASON) 等几方面;

使用 scancel JOBID 可以取消指定任务,scancel -u username 可以取消指定用户的所有任务;

使用 scontrol show job JOBID 可以查看指定任务的状态;

使用 projinfo 可以查看用户所属项目的资源使用情况。

LSF作业调度系统

#BSUB -n 12 

#BSUB -q batch 

#BSUB -o %J.out 

#BSUB -e %J.err 

#BSUB -W 168:00 

mkdir 00.FastQC 

fastqc --noextract -t 2 test.1.fq.gz test.2.fq.gz  -o ./00.FastQC

将上面的脚本存为 fastqc.sh,运行 bsub < fastqc.sh,会将脚本递交到集群 batch 队列进行计算。

使用 bqueues 可以查看现有队列信息;

使用 bkill、bstop、bresume、bstop、bbot、bmod 等命令管理作业;

使用 bjobs、bpeek 查看作业情况;

使用 buser 查看用户信息。

往期回顾:

测序结果中的接头序列来自哪里?!
数据质量不好,可以用么?
FastQC 你需要知道的在这里!





请到「今天看啥」查看全文