GPU blast 的安装与使用

1. 安装 Nvidia 显卡驱动

安装 Nvidia 显卡驱动,得要禁用 CentOS 默认的 nouveau 驱动,然后安装 Nvidia 驱动

下载显卡驱动
# wget  http://cn.download.nvidia.com/XFree86/Linux-x86_64/340.65/NVIDIA-Linux-x86_64-340.65.run

禁用 Nvidia 显卡驱动
# echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf

备份并重建系统引导的 image 文件
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut -v /boot/initramfs-$(uname -r).img $(uname -r)

重启后在 init3 模式下安装显卡驱动
# init 3
# sh NVIDIA-Linux-x86_64-340.65.run

2. 检测显卡性能参数

推荐使用 CUDA-Z 来检测显卡性能参数。正常使用 CUDA-Z 需要依赖一些库文件和 GCC 。

$ wget http://downloads.sourceforge.net/project/cuda-z/cuda-z/0.9/CUDA-Z-0.9.231.run
$ mv CUDA-Z-0.9.231.run ~/bin/CUDA-Z

运行 CUDA-Z 前安装如下一些系统软件
$ sudo yum install libXrender*
$ sudo yum install libXrender*i686*
$ sudo yum install libXext*
$ sudo yum install libXext*i686*
$ sudo yum install libz*
$ sudo yum install libz*i686*
将 GCC 的库文件路径设置正确
$ export C_INCLUDE_PATH=/opt/gcc-4.7.2/include
$ export LD_LIBRARY_PATH=/opt/gcc-4.7.2/lib64:/opt/gcc-4.7.2/lib

运行 CUDA-Z 图形化界面,界面和 windows 下的 CPU-Z 一致。
$ CUDA-Z

显卡一些高级常识,例如:
我的笔记本电脑 GTX570M 显卡: 该 GPU 有 7个 SM,每个 SM 有 48 个 SP,每个 SP 有 32 个 warp; SP 称为流处理器,该值越大,则显卡性能越好; warp 是最小的硬件执行单位,则该显卡最大的线程数是 7*48*32=10752。
SM 之间可以理解是物理隔绝的,不同的 SM 的计算是独立的。将数据用显卡进行计算时,进行并行计算时,我个人理解成这样: 把运行的程序做成很多小份进行并行计算;所有的并行计算的总体称为 Grid,并行运算的最小单元为 thread;gpu-blast在默认设置中,将 64 个 threads 合并为 1 个 block,因此 1 个 block 的运行需要 2 个 SP 进行运算;gpu-blast在默认设置中,运行一个程序,将之分割成 521 个 blocks, 这 512 个 blocks 则需要 1024 个 SP 进行运算,可以达到最快的运算速度。所以,如果 GPU 的 SP 总数超过 1024, 则不能完全发挥显卡的性能。
对于 GTX570M 显卡,我设置 gpu-blast 的参数 -gpu_threads 32 -gpu_blocks 336 我觉得是比较好的。这样,将 blast 程序分割为 336 个 blocks 进行并行计算;将所有的 block 分配给所有的 SP ,刚好每个 SP 都运行 32 线程。但实际上,使用 gpu-blast 默认的参数也更好地发挥显卡性能,我个人实验结果是,-gpu_threads 128 -gpu_blocks 512 的结果更加不错。

3. 安装 CUDA Toolkits

CUDA 的下载网址: https://developer.nvidia.com/cuda-downloads

$ wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.14_linux_64.run
$ sudo init 3
# sh cuda_6.5.14_linux_64.run

4. 安装 GPU-Blast

GPU-Blast官网: http://archimedes.cheme.cmu.edu/?q=gpublast
GPU-Blast 提供的最高 blast 版本是 2.2.28 版本,需要 ncbi-blast 同版本源码文件支持。

$ mkdir /opt/biosoft/gpu_blast
$ cd /opt/biosoft/gpu_blast

从源码包安装 ncbi-blast 2.2.28 版本(此步骤可选)
$ wget ftp://ftp.ncbi.nih.gov/blast/executables/blast+/2.2.28/ncbi-blast-2.2.28+-src.tar.gz
$ tar zxf ncbi-blast-2.2.28+-src.tar.gz
$ cd ncbi-blast-2.2.28+-src/c++
$ ./configure && make -j 8 

安装 GPU-Blast 前需要将 CUDA Toolkits 的库文件与头文件加入到能识别的路径
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ echo 'export C_INCLUDE_PATH=/usr/local/cuda/include/:$C_INCLUDE_PATH' >> ~/.bashrc
$ source ~/.bashrc

下载并安装 GPU-Blast
$ wget http://eudoxus.cheme.cmu.edu/gpublast/gpu-blast-1.1_ncbi-blast-2.2.28.tar.gz 
$ tar zxf gpu-blast-1.1_ncbi-blast-2.2.28.tar.gz
$ perl -p -i -e 's/LATEST/2.2.28/' install
$ perl -p -i -e 's/make /make -j /' install
$ ./install
Do you want to install GPU-BLAST on an existing installation of "blastp" [yes/no]
如果输入 no 则会自动下载 ncbi-blast-2.2.28+-src.tar.gz,并进行安装,需要做上述修改,否则下载地址不正确。同时,默认下 make 编译是单线程运行,加入 -j 参数来并行运算,从而加快编译速度。
如果选择 yes,则需要输入 blastp 的路径,该路径是 blastp 的编译后所在的路径,而不是安装路径。输入 /opt/biosoft/gpu_blast/ncbi-blast-2.2.28+-src/c++/GCC447-Debug64/bin/ , 按 Enter 进行安装。

安装完毕后,将程序文件所在路径加入环境变量 PATH
$ ln -s ncbi-blast-2.2.28+-src/c++/GCC447-ReleaseMT64/bin/ bin
$ echo 'PATH=$PATH:/opt/biosoft/gpu_blast/bin' >> ~/.bashrc
$ source ~/.bashrc

安装完毕后,程序文件位于

4. 运行 GPU-Blast

以 Swissprot 数据库为例:

首先,以 fasta 文件构建 blast 数据库,需要加入 -sort_volumes 参数
$ makeblastdb -dbtype prot -in uniprot_sprot.fasta -out uniprot_sprot -sort_volumes -max_file_sz 500MB

然后,在普通 blast 数据库基础上构建 gpu 数据库。使用 -method 2 参数生成 gpu 数据库文件
$ blastp -db uniprot_sprot -query test.fa -gpu t -method 2

再使用 -gpu t 运用 gpu_blast,否则是单纯用 CPU 进行计算
$ blastp -db uniprot_sprot -query test.fa -gpu t

使用 gpu_blast 确实能加快速度,在软件的示例中,在 -num_threads 2 下,GPU 有 2.5 倍的加速。
我的使用经验: 对 40 条蛋白序列使用 blastp 比对到 Swissprot 数据库, 设置 -num_threads 8, gpu_blast 耗时 1m41.053s, cpu_blast 耗时 0m52.264s; 对 8 条蛋白质序列使用 blastp 比对到 Swissprot 数据库, 设置 -num_threads 2,gpu_blast 耗时 0m7.892s, cpu_blast 耗时 0m12.717s;对同样 8 条蛋白质序列使用 blastp 比对到 Swissprot 数据库, 设置 -num_threads 8,gpu_blast 耗时 0m5.288s, cpu_blast 耗时 0m5.836s;
个人使用感觉: 虽然有 GPU 加速,但是依然需要耗费大量 CPU,而不是只运用了 GPU 进行计算; 如果 CPU 本身运行速度较快的时候,使用 GPU 加速的比率则较低了。

SequenceServer的安装

出自http://www.sequenceserver.com/

SequenceServer这个软件开发出来不久。其作用是将 blast+ 整合到本地网络中。能自动识别出本地的数据库,界面简洁易用。和 wwwblast 功能类似。

1 安装需要Ruby (>= 1.8.7), RubyGems (>= 1.3.6), and NCBI BLAST+ (>= 2.2.25+).

# yum install *ruby*  #安装很多ruby相关软件,不然运行会出问题,特别是缺少
ruby-devel
NCBI BLAST+ ftp://ftp.ncbi.nih.gov/blast/executables/blast+/LATEST/

2 安装sequenceserver

# gem install sequenceserver

3  配置sequenceserver

# sequenceserver   运行软件生成带有注释的配置文件
# vim .sequenceserver.conf 将注释文件进行修改,加入blast路径
bin: ~/ncbi-blast-2.2.26+/bin/
database: /Users/me/blast_databases/

4 blast数据库的创建

<1> 使用 sequenceserver 来调用 makeblastdb 进行数据库创建

$ sequenceserver format-databases directory_with_fasta_files

<2> 使用 blast+ 本身所带 makeblastdb 来创建数据库

$ makeblastdb -dbtype <db type> -title <db title> -in <db> -parse_seqids

5 通过 passenger 在 Apache 或 Nginx 上运行 SequenceServer

# gem install passenger

for apache2 
# passenger-install-apache2-module   #按提示进行设置

for nginx 
# passenger-install-nginx-module

6 部署服务器设置

在 https://github.com/yannickwurm/sequenceserver 下载 sequencesercer 
将 sequenceserver-0.8.0.3.zip 解压到 /var/www/sequenceserver/. 使该文
件夹下存在 public 这个文件夹。
# vim /etc/http/conf/http.conf  并加入以下数行

<VirtualHost *:80>
    DocumentRoot /var/www/sequenceserver/public
    ServerName http://sequenceserver.hzaumycology.com
#前提条件是申请了sequenceserver.hzaumycology.com这个域名
    <Directory /var/www/sequenceserver/public>
        AllowOverride all
        Options -MultiViews
    </Directory>
</VirtualHost>

# /etc/init.d/httpd restart

7 运行 passenger 和 sequenceserver

# nohup passenger start &
# nohup sequenceserver &

若想要开机运行这两个命令,则
# vim /etc/rc.local  在末尾添加 passenger start &
sequenceserver &

 8 修改 .sequenceserver.conf 配置文件

可以选择修改端口,默认端口为4567,则要
# vim /etc/sysconfig/iptables   在相应位置加入一行
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 4567 -j ACCEPT
# /etc/init.d/iptables restart   重启iptables服务

根据服务器配置修改线程数,默认为1.

9  以上配置不出现错误,则可以在浏览器中进行 sequenceserver 访问了.

浏览器中输入: http://sequenceserver.hzaumycology.com:4567

则会出现一个简洁漂亮的界面了!

BLAST+中makeblastdb参数详解

一般我们是有一个fasta文件用来格式化数据库,以前的命令是formatdb,现在是makeblastdb

一般用到的格式如下:

makeblastdb -in input_file -dbtype molecule_type -title database_title -parse_seqids -out database_name -logfile File_Name

注意:BLAST+2.2.24中这个参数不要加 -parse_seqids,不然成死循环

-in 后接输入文件,你要格式化的fasta序列
-dbtype 后接序列类型,nucl为核酸,prot为蛋白
-title 给数据库起个名,好看~~(不能用在后面搜索时-db的参数)
-parse_seqids 推荐加上,现在有啥原因还没搞清楚
-out 后接数据库名,自己起一个有意义的名字,以后blast+搜索时要用到的-db的参数
-logfile 日志文件,如果没有默认输出到屏幕

MegaBlast/Discontiguous MegaBlast/BlastN, Blastp/PSI-Blast/PHI-BLAST的区别与选择

从blastn页面上的简单帮助可以看到Highly similar sequences (megablast)多用于比较相似性比较高(相似性在95%以上)的序列,速度快;More dissimilar sequences (discontiguous megablast)用于相似性稍低于megablast的比对,但是灵敏度和精确度更高,多用于不同物种间的同源比对;而Somewhat similar sequences (blastn)用于比对相似性较差的序列,可以比对最短7个碱基的长度,所以比对精确度最高,比对结果最多,速度最慢。

所以,在选择的时候根据你提交的序列和搜索的目的进行选择,如果是想看这段序列在数据库当中是否有收录,可以用megablast,如果想用其他物 种的基因注释信息来注释一个未注释物种的序列,可以选择discontiguous megablast,如果想得到更多更全面的结果,可以选择blastn。

说完blastn,接着说blastp~blsatp中也有三个不同的算法可以选择,如下:

blastp (protein-protein BLAST)就是简单地进行蛋白与蛋白的比对,寻找蛋白质相
似序列;

PSI-BLAST (Position-Specific Iterated BLAST)叫做位点特异性迭代比对,它
在蛋白质数据库中循环搜索查询蛋白质,所有前一次被psi-blast发现的统计显著蛋白质序
列将整合成新记分矩 阵,通过多次迭代比对,直到不再发现统计显著的新蛋白质;

PHI-BLAST (Pattern Hit Initiated BLAST)可以在搜索的时候限定蛋白质的模式
(pattern),只给出包含此模式的比对结果。

Blastp/PSI-Blast/PHI-BLAST都是蛋白序列与蛋白序列之间的Blast比对

1. Blastp: 标准的蛋白序列与蛋白序列之间的比对 Standard protein BLAST is designed for protein searches. Blastp用于确定查询的氨基酸序列在蛋白数据库中找到相似的序列。跟其它的Blast程序一样,目的是要找到相似的区域。

2. PSI-BLAST : 敏感度更高的蛋白序列与蛋白序列之间的比对 PSI-BLAST is designed for more sensitive protein-protein similarity searches. Position-Specific Iterated (PSI)-BLAST,是一种更加高灵敏的Blastp程序,对于发现远亲物种的相似蛋白或某个蛋白家族的新成员非常有效。当你使用标准的Blastp 比对失败时,或比对的结果仅仅是一些假基因或推测的基因序列时(”hypothetical protein” or “similar to…”),你可以选择PSI-BLAST重新试试。

3. PHI-BLAST : 模式发现迭代BLAST PHI-BLAST can do a restricted protein pattern search. PHI-BLAST, 模式发现迭代BLAST, 用蛋白查询来搜索蛋白数据库的一个程序。仅仅找出那些查询序列中含有的特殊模式的对齐。

PHI的语法详细介绍看这里:http://www.ncbi.nlm.nih.gov/blast/html/PHIsyntax.html

BLAST本地化web运用

1 首先,到ftp://ftp.ncbi.nih.gov/blast/executables/release/LATEST/下载最新的版本的wwwblast(写此文时对应的文件为wwwblast-2.2.26-x64-linux.tar.gz)。

2 然后将该文件解压,不需要configure即可使用。设定所解压的文件夹到Apache路径。

将如下几行加入/etc/httpd/conf/httpd.conf中:

Alias /blast "/home/chenlianfu/programs/wwwblast"
<Directory "/home/chenlianfu/programs/wwwblast">
    Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

3 wwwblast默认提供了2个test的数据库,分别为test_na_db和test_aa_db。

4 使用正常版的 makeblastdb 来创建数据库,并将数据库文件放入文件夹的db/路径下。

5. 修改 blast.html 文件。

<select name = "DATALIB">
    <option VALUE = “nt"> nt #nt是db/中所含有的数据库名。
</select>

6. 修改 blast.rc 配置文件。

NumCpuToUse     6	#CPU的使用个数,线程数。

blastn nt	#blastn程序所能使用的数据库名称。
tblastn nt	#下同...
tblastx nt 
blastp 
blastx

5 这样,在网页中就能正常使用nt数据库了。