之前一直在用NCBI新的blast+,速度不错。但是blast的线程是内存空享的,即只能单节点运算。手头能使用的计算资源只能达到单节点16 threads。动辄上万条的对比实在是太慢了。遂萌生用mpiblast的想法。步骤简述如下:
1 安装MPI,我这里用的是OpenMPI,安装结束后运行example,确认成功;
2 下载mpiBlast,解压;
3 下载NCBI toolbox,我用的地址 ftp://ftp.ncbi.nih.gov/toolbox/ncbi_tools/ncbi.tar.gz,解压并mv到mpiblast下的ncbi directory里;
4 bulid NCBI : 在mpiblast下,./ncbi/make/makedis.csh;
5 configure mpiblast, 可能用到的@ARGV: –prefix, –with-mpi (指定位置为mpi的bin dir), –host=x86_64 (本来以为不需要加,但是出现了比较奇怪的error信息,加上就好了), 应该不需要加上别的帖子提到过的–with-ncbi;
6 make; make install;
7 修改~/.ncbirc文件,例子:
[NCBI]
Data=/public/home/gy/soft/mpiblast-1.6.0/ncbi/data
[BLAST]
BLASTDB=/public/home/gy/blast+/db
BLASTMAT=/public/home/gy/soft/mpiblast-1.6.0/ncbi/data
[mpiBLAST]
Shared=/public/home/gy/mpiblast_database
Local=/tmp/mpiblast
其中[NCBI]中的Data项,填写step3中安装的NCBI的data directory位置,主要包含了运行所需的打分矩阵和一些lib;BLASTMAT项一般与NCBI的Data相同; BLASTDB项是blast/blast+所用的database位置;而[mpiBLAST]下的shared和local才是mpiblast所使用的database位置 (shared是总数据库位置,而local一般是各工作节点把自己需要用到的那一部分db拿来存放的位置);
8 关于database: mpiblast不能使用blast formatdb创建的db,据称反之则可以,所以推荐用mpiformatdb格式化数据库,这样两者皆可使用;关于blast+是否可以兼容使用,尚未验证。我干脆又下载了fasta格式的nr database,mpiformat了一下。
9 使用简单说明:
mpirun -n 8 mpiblast -p blastp -d nr -i ../pro_seq.fa -m 8|9|0 -o pro_mpiblast_result
其中-n指定计算单元个数(进程数),当-n小于当前节点提供的计算单元数时,会仅用本节点;-p选择比对程序;-d选择database;-i为待比对序列;-o为结果文件;-m是输出格式,目前仅支持8(tab-delimited table with headers),9(tab-delimited table without headers),0(Normal)。若用m7输出xml格式,应该会输出多个文件(每节点一个),需要手动再放到一起。
From: http://www.letseq.com/?p=10