PSP - MMseqs2 编译最新版本源码 (14-7e284) 支持 MPI 功能 MSA 快速搜索

news2024/12/22 23:23:42

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/131966061

MPI

MPI (Message Passing Interface) 是用于并行计算的标准化和可移植的消息传递接口,可以在分布式内存的多台计算机上运行并行程序。MPI 标准定义一些库函数的语法和语义,这些函数对于编写可移植的消息传递程序非常有用,支持 C、C++ 和 Fortran 语言。MPI 的主要功能是实现多个进程之间的数据交换和同步,以及提供一些集合操作,如广播、归约、扫描等。MPI 还支持一些高级特性,如动态进程管理、单边通信、I/O 等。MPI 是目前最广泛使用的并行计算接口之一,有多种开源的实现,如 Open MPI、MPICH、MVAPICH 等。MPI 也有多种语言的绑定,如 Java, Python, R 等。

其他配置,参考:使用 MMseqs2 工具快速搜索蛋白质序列数据库 (GMGC)

可执行文件下载地址:CSDN Downloads - MMseqs2最新版本可执行文件

构建 GMGC 蛋白质基因的测试数据库,建议去 CPU 与 内存 较多的机器中,运行:

# Time for processing: 0h 17m 9s 510ms
mmseqs createdb data/gmgc.fa gmgc.db   
mmseqs createindex gmgc.db tmp

创建索引的日志,如下:

indexdb gmgc.db gmgc.db --seed-sub-mat nucl:nucleotide.out,aa:VTML80.out -k 0 --alph-size nucl:5,aa:21 --comp-bias-corr 1 --max-seq-len 65535 --max-seqs 300 --mask 1 --mask-lower-case 0 --spaced-kmer-mode 1 -s 7.5 --k-score 0 --check-compatible 0 --search-type 0 --split 0 --split-memory-limit 0 -v 3 --threads 232 

Target split mode. Searching through 5 splits
Estimated memory consumption: 691G
... # 5 个 splits 执行 5 次计算
Index table: counting k-mers
[=================================================================] 100.00% 59.49M 37s 155ms    
Index table: Masked residues: 122957738
Index table: fill
[=================================================================] 100.00% 59.49M 1m 6s 231ms 
...

GitHub: MMseqs2

1. Conda 配置低版本 (13.45111)

使用 conda 安装 mmseqs2:

conda install -c conda-forge -c bioconda mmseqs2

配置:

if [ -f /Path to MMseqs2/util/bash-completion.sh ]; then
    source /Path to MMseqs2/util/bash-completion.sh
fi

版本号:

conda list mmseqs2
# packages in environment at miniconda3/envs/torch-def:
#
# Name                    Version                   Build  Channel
mmseqs2                   13.45111             h95f258a_1    bioconda

版本号较低是 13.45111,而 GitHub 最新版本是 MMseqs2 Release 14-7e284

2. Make 编译高版本 (14-7e284)

较低版本的命令支持不充分,建议使用最新版本,最新版本可以下载,也可以编译,建议通过编译的方式。

下载项目:

git clone git@github.com:soedinglab/MMseqs2.git

编译命令,如下:

cd MMseqs2
mkdir build && cd build
cmake .. -DHAVE_AVX2=1
make
# make install

如需编译 mpi 版本 (OpenMP and Message Passing Interface),建议使用命令:

cd MMseqs2
mkdir build-mpi && cd build-mpi
cmake .. -DHAVE_MPI=1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=. 
make

日志如下:

...
-- Performing Test ATOMIC_LIBRARY_NATIVE
-- Performing Test ATOMIC_LIBRARY_NATIVE - Failed   # 正常错误
...

编译完成的文件,位于:MMseqs2-master/build/src/mmseqs

Make 与 CMake 的关系:

  • Make 是智能的批处理工具,可以根据 Makefile 文件中的规则来编译和链接源文件,生成可执行文件或者库文件。Makefile 文件需要手动编写,指定每个目标文件如何从源文件生成,以及如何链接目标文件生成最终的产品。Make 的优点是简单、灵活、通用,可以用于任何语言和平台。
  • CMake 是跨平台的构建系统生成器,可以根据 CMakeLists.txt 文件中的指令来生成不同平台和工具的构建系统,比如 Makefile、Visual Studio、Xcode等。CMakeLists.txt 文件也需要程序员手动编写,但是相对于 Makefile 来说,更加简洁和高级,不需要指定具体的编译器或者链接器命令,只需要描述项目的结构和依赖关系。CMake 的优点是可以自动发现和配置工具链、系统库、编译选项等,支持多种生成器和平台,方便移植和扩展。

3. 测试 MMseqs2

.bashrc 中添加,启动命令:

export PATH=~/bin:$PATH

查看: which mmseqs

需要安装包 libatomic1,即:

apt-get install libatomic1

测试搜索 MSA 的命令,蛋白质序列长度1029,数据库60G,5个分片:

  • 耗时:[Info] Time taken to execute commands is 138 seconds.
# params
#=========================================
mmseqs=mmseqs
tmp=tmp_my
query_fasta=T1157s1_A1029.fasta
query_db=$tmp/queryDB
target_db=virus4/gmgc/gmgc.db
target_db_index=${target_db}.idx
result_db=$tmp/res  # 文件
result_db_realign=$tmp/res_realign
result_db_realign_filter=$tmp/res_realign_filter
a3m_db=result.a3m
tmp_db=$tmp/tmp
#=========================================

mkdir -p $tmp

time_start=$(date +%s)
#=========================================

$mmseqs createdb ${query_fasta} ${query_db}
$mmseqs search ${query_db} ${target_db} ${result_db} ${tmp_db} --db-load-mode 2 --num-iterations 1 -s 1 --max-seqs 10000 -e 0.1 -a
$mmseqs align ${query_db} ${target_db_index} ${result_db} ${result_db_realign} --db-load-mode 2 -e 10 --max-accept 100000 --alt-ali 10 -a
$mmseqs filterresult ${query_db} ${target_db_index} ${result_db_realign} ${result_db_realign_filter} --db-load-mode 2 --qid 0 --qsc 0.8 --diff 0 --max-seq-id 1.0 --filter-min-enable 100
$mmseqs result2msa ${query_db} ${target_db_index} ${result_db_realign_filter} ${a3m_db} --msa-format-mode 6 --db-load-mode 2 --filter-msa 1 --filter-min-enable 1000 --diff 3000 --qid 0.0,0.2,0.4,0.6,0.8,1.0 --qsc 0 --max-seq-id 0.95

$mmseqs rmdb ${result_db_realign_filter}
$mmseqs rmdb ${result_db}
$mmseqs rmdb ${result_db_realign}

#=========================================
time_end=$(date +%s)
time_take=$(( time_end - time_start ))

echo "[Info] MMseqs2 path is ${mmseqs} ."
echo "[Info] Time taken to execute commands is ${time_take} seconds."

搜索出 426 个结果:426 result.a3m,数据如下:

>A
DRVRALRRETVEMFYYGFDNYMKVAFPEDELRPVSCTPLTRDLKNPRNFELNDVLGNYSLTLIDSLSTLAILASAPAEDSGTGPKALRDFQDGVAALVEQYGDGRPGPSGVGRRARGFDLDSKVQVFETVIRGVGGLLSAHLFAIGALPITGYQPLRQEDDLFNPPPIPWPNGFTYDGQLLRLALDLAQRLLPAFYTKTGLPYPRVNLRHGIPFYVNSPLHEDPPAKGTTEGPPEITETCSAGAGSLVLEFTVLSRLTGDPRFEQAAKRAFWAVWYRKSQIGLIGAGVDAEQGHWIGTYSVIGAGADSFFEYALKSHILLSGHALPNQTHPSPLHKDVNWMDPNTLFEPLSDAENSAESFLEAWHHAHAAIKRHLYSEREHPHYDNVNLWTGSLVSHWVDSLGAYYSGLLVLAGEVDEAIETNLLYAAIWTRYAALPERWSLREKTVEGGLGWWPLRPEFIESTYHLYRATKDPWYLYVGEMVLRDITRRCWTPCGWAGLQNVLSGEKSDRMESFFLGETTKYMYLLFDDDHPLNKLDASFVFTTEGHPLILPKPKSARRSRNSPRSSQKALTVYQGEGFTNSCPPRPSITPLSGSVIAARDDIYHPARMVDLHLLTTSKHALDGGQMSGQHMAKSNYTLYPWTLPPELLPSNGTCAKVYQPHEVTLEFASNTQQVLGGSAFNFMLSGQNLERLSTDRIRVLSLSGLKITLQLVEEGEREWRVTKLNGIPLGRDEYVVINRAILGDVSDPRFNLVRDPVIAKLQQLHQVNLLDDTTTEEHPDNLDTLDTASAIDLPQDQSSDSEVPDPANLSALLPDLSSFVKSLFARLSNLTSPSPDPSSNLPLNVVINQTAILPTGIGAAPLPPAASNSPSGAPIPVFGPVPESLFPWKTIYAAGEACAGPLPDSAPRENQVILIRRGGCSFSDKLANIPAFTPSEESLQLVVVVSDDEHEGQSGLVRPLLDEIQHTPGGMPRRHPIAMVMVGGGETVYQQLSVASAIGIQRRYYIESSGVKVKNIIVDDGDGGVDG
>GMGC10.285_640_775.MNL1|built-environment      832     0.483   2.234E-258      38      991     1029    0       953     1046
--------------------------------------LTRDRVNPAHIEVNDVLGNYSLSVVDSLSTLAILASDPESDL-DHYNALDDFQEHVELVIEEYGDGSPGPAGQGRRARGFDLDSKVQVFETTIRGLGGLLSAHLFAIGELPIRGYEPDIQKDG------IHWPNGFVYDGQLLRLAQDLGERLLPAFHTPTGLPYPRVNLRYGTPFYENSPLNNDAEhgqchKTQKPKGAREITETCSAGAGSLVLEFTTLSRLTNDDRFERLAKRAFWAVWERRSASGLIGAGIDAETGAWIGPWTGIGAGIDSFFEYAFKSHILLS--ALTGDSY--------------------NLTEDSPDAFLQTWKDAHSAIMRHVYRDAyfTHPHYAQNDLYTGGPRLTWIDSLSAYYPGLLVLAGELDEAMTAHLLYTALWSRYGALPERWDATTGTIHGGLKWWGGRPEFIESTWYIYHATKDPWYLHIGEMALRDIKRRCYTKCGWAGLQDVRTGEQSDRMESFFLGETAKYMYLLFDPDHPLNNIDAPWVFTTEGHPLIIPK---ANRTRTRRYHAEKDTSLSAAIPPTaEQCPLPPPLLPLTISSTAARSDIFHAASLARLHLMPVgNKPGAPSLDWASDHpsvtmlgpESPTNFTFYPWTLPLDLIPADGYSTKLSNKPTFDLTFPTTVGTGLEIGTLQKIDGG----------VLVNSISGLRFGMVLEDSGpdEDEYRIYTLGNFALGRDEHIALSRDTLSQInpTDPHFTRMRDveamdliidvphpaePAIEAL--VYNNSALNDHVFDFNLDfDLDALDATSSpgemvLDsLPKALFADvhrlAEQLD--GLVGVLPDADSIDDALRDAAKQLRSKSPAASSSTKMPYQqpkglqrFTTPAMLPIGPGAAPLPATIDSAVDPRSLPT------GHLPYTSILVVdSDLCnTSPLPLDLVSTHNVLIIRRGGCSFSKKLAAIPSFPPSAKALQIVLVVSFGSDEG----TRPLVDEAQLTPKGLPRRHPICLALVPGGQTVWE-------------------------------------
>GMGC10.241_341_405.MNL1|soil   756     0.569   1.592E-232      2       658     1029    54      704     740
--IKVLRQETVELFYHGYDNYLRHAFPEDELRPLTCGALTRDRENPAHIELNDALGNYSLTLIDSLSTLAILASsadAKQKPNGwlsTATTPLEDFQEGIKLLVEYYGDGTDGPDGEGKRARGFDLDSKVQVFETVIRGVGGLLSAHLFAVGDLPIRGYVPkLKTRHGKHG---IHWRNGLVYDGQLLRLAQDLADRLVPAFYTPTDLPYPRVNLRHGVSFYPNSPYNAD---SGTgmcskqQGGAQEITETCSAGAGSLVLEFTTLSRLTGNDLYERLAKQAFYAVWNRRSSIGLIGAGIDSETGDWVNSITGIGAGIDSFFEYAFKSHILLS----------------------NLPFDHEEEDIHPSDEFLETWQEAHEAIKRHVYRSdiLQHPHFAQVDMNTGASKYWWIDSLSAFYPGLLTLSGELDEAITVHLLYTALWTRYSAMPERWSTYTGEIESGLRWWGGRPEFIESSWYLYRATMDPWYLHVGEMALRDIKRRCWTKCGWAGLQDVRTGEKSDRMESFFLGETAKYLFLLFDVDHPLNSLDAPFIFTTEGHPLVIPQRVIPRKSRDGiPKRFARRTT----RGADNAmCSIPPSFVPLSLSPTAARDDLFHAASLARLDLMPSIEETESSLVEFNNHhpsismadiRSPSNYTYYPWTLPLELVPQNGSCSRI----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

测试多进程:

  • 进程设置为 10,即 --threads 10
  • 提速至 65 秒,[Info] Time taken to execute commands is 65 seconds.

$mmseqs createdb ${query_fasta} ${query_db}
$mmseqs search ${query_db} ${target_db} ${result_db} ${tmp_db} --db-load-mode 2 --num-iterations 1 -s 1 --max-seqs 10000 -e 0.1 -a --threads 10
$mmseqs align ${query_db} ${target_db_index} ${result_db} ${result_db_realign} --db-load-mode 2 -e 10 --max-accept 100000 --alt-ali 10 -a --threads 10
$mmseqs filterresult ${query_db} ${target_db_index} ${result_db_realign} ${result_db_realign_filter} --db-load-mode 2 --qid 0 --qsc 0.8 --diff 0 --max-seq-id 1.0 --filter-min-enable 100 --threads 10
$mmseqs result2msa ${query_db} ${target_db_index} ${result_db_realign_filter} ${a3m_db} --msa-format-mode 6 --db-load-mode 2 --filter-msa 1 --filter-min-enable 1000 --diff 3000 --qid 0.0,0.2,0.4,0.6,0.8,1.0 --qsc 0 --max-seq-id 0.95 --threads 10

非 MPI 版本的日志,如下:

MMseqs Version:         GITDIR-NOTFOUND

测试 MPI:

  • 一定要使用支持 MPI 的版本。
  • mmseqs search 命令可以使用, MPI 设置为 10,即 --mpi-runner "mpirun --allow-run-as-root -np 10
  • 提速至 56 秒,[Info] Time taken to execute commands is 56 seconds.

$mmseqs createdb ${query_fasta} ${query_db}
$mmseqs search ${query_db} ${target_db} ${result_db} ${tmp_db} --db-load-mode 2 --num-iterations 1 -s 1 --max-seqs 10000 -e 0.1 -a --threads 10 --mpi-runner "mpirun --allow-run-as-root -np 10"
$mmseqs align ${query_db} ${target_db_index} ${result_db} ${result_db_realign} --db-load-mode 2 -e 10 --max-accept 100000 --alt-ali 10 -a --threads 10
$mmseqs filterresult ${query_db} ${target_db_index} ${result_db_realign} ${result_db_realign_filter} --db-load-mode 2 --qid 0 --qsc 0.8 --diff 0 --max-seq-id 1.0 --filter-min-enable 100 --threads 10 
$mmseqs result2msa ${query_db} ${target_db_index} ${result_db_realign_filter} ${a3m_db} --msa-format-mode 6 --db-load-mode 2 --filter-msa 1 --filter-min-enable 1000 --diff 3000 --qid 0.0,0.2,0.4,0.6,0.8,1.0 --qsc 0 --max-seq-id 0.95 --threads 10

--allow-run-as-root 避免 MPI 的 root 错误

MPI 版本的日志,如下:

MMseqs Version:         GITDIR-NOTFOUND-MPI

Bug

遇到 Bug,MMseqs库的索引构建问题:

Invalid database read for database data file=virus4/gmgc/gmgc.db.idx, database index=virus4/gmgc/gmgc.db.idx.index
getData: local id (4294967295) >= db size (50)

需要重新构建数据库的索引:

mmseqs createdb data/gmgc.fa gmgc.db   
mmseqs createindex gmgc.db tmp

遇到 Bug,缺少 libatomic.so.1 文件:

error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory

需要安装包:

apt-get install libatomic1

参考

  • 获取程序运行时间 - Linux Shell 脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/801184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统、人工智能、芯片和其它

最近出差一段时间,听到一些事,看到一些事,说点个人观感。有些话可能不好听,还希望不要被平台和谐。   从一位现在微软工作的前同事处得来的消息,微软下一代操作系统Windows 12将深度集成AI,如果再加上的它…

彻底搞懂CPU的特权等级

x86 处理器中,提供了4个特权级别:0,1,2,3。数字越小,特权级别越高! 一般来说,操作系统是的重要性、可靠性是最高的,需要运行在 0 特权级; 应用程序工作在最上层,来源广泛、可靠性最低,工作在 3 特权级别。 中间的1 和 2 两个特权级别,一般很少使用。 理论上来讲,…

redis到底几个线程?

通常我们说redis是单线程指的是从接收客户端请求->解析请求->读写->响应客户端这整个过程是由一个线程来完成的。这并不意味着redis在任何场景、任何版本下都只有一个线程 为何用单线程处理数据读写? 内存数据储存已经很快了 redis相比于mysql等数据库是…

集合---list接口及实现类

一、list概述 1、list接口概述 List接口继承自Collection接口,是单列集合的一一个重要分支,我们习惯性地会将实现了 List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方 式进行有序存储的,在…

在linux中怎样同时运行三个微服务保证退出时不会终止

前言 1.maven中打jar包 使用插件打包,必须在pom.xml中添加插件,否则不能在linux中编译运行 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version&g…

RISC-V公测平台发布 · 第一个WEB Server “Hello RISC-V world!”

RISC-V公测平台Web Server地址&#xff1a;http://175.8.161.253:8081 一、前言 Web Server是互联网应用的基础设施&#xff0c;无论是用户访问网站&#xff0c;还是后端服务提供商和开发者构建各种应用程序&#xff0c;Web Server都在其中扮演着至关重要的角色。 显而易见…

甄品焕新 | 链接上下游企业服务协同,改变服务获取方式

文/玉娇龙 本文字数&#xff1a;3500&#xff5c;预计3分钟读完 使用燕千云上下游服务管理&#xff0c;你可以统一管理IT服务供应商、业务经销商、客户等业务伙伴的服务往来&#xff0c;将企业与上下游公司之间的工单服务往来进行统一管理、共享与升级&#xff0c;实现服务共享…

jmeter接口测试、压力测试简单实现

jmeter测试的组件执行顺序&#xff1a; 测试计划—>线程组—>配置元件—>前置处理器—>定时器—>逻辑控制器—>取样器—>后置处理器—>断言—>监听器 组件的作用范围&#xff1a; 同级组件同级组件下的子组件父组件 目前市面上的三类接口 1、基…

netty 809协议

netty 809协议 目录概述需求&#xff1a; 设计思路实现思路分析1.netty 809 协议2.概念代码 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for chan…

ad+硬件每日学习十个知识点(15)23.7.26 (逻辑器件、拉电流和灌电流、OC门和OD门、总线保持)

文章目录 1.逻辑器件介绍2.什么是总线缓冲器&#xff1f;3.逻辑器件按功能分类4.逻辑器件按工艺分类&#xff08;目前主要用CMOS逻辑&#xff09;5.什么是总线保持&#xff1f;6.逻辑电平7.两个逻辑器件互连&#xff0c;需要满足什么要求&#xff1f;8.什么是推挽&#xff0c;什…

关于自签名证书授权后在哪儿看

目录 firefox可以看到 chrome and edge firefox可以看到 chrome and edge 只能从打开的网站左上角进入

读《全球科技通史》总结——历史总在重演,科技永远向前

今天和大家分享一下吴军老师的《全球科技通史》。大部分人谈到历史的时候&#xff0c;关注的是国家的兴衰、王朝的更替&#xff0c;往往忽视了科技的力量。“文津图书奖”得主吴军博士&#xff0c;从科技视角串联历史&#xff0c;首次以能量和信息两条主线&#xff0c;系统阐述…

【Docker】Docker相关基础命令

目录 一、Docker服务相关命令 1、启动docker服务 2、停止docker服务 3、重启docker服务 4、查看docker服务状态 5、开机自启动docker服务 二、Images镜像相关命令 1、查看镜像 2、拉取镜像 3、搜索镜像 4、删除镜像 三、Container容器相关命令 1、创建容器 2、查…

ad+硬件每日学习十个知识点(9)23.7.20

文章目录 1.正点原子fpga开拓者无gui检查项目2.排针连接器A2541WR-XP-2P3.肖特基二极管反接在LDO的输出端&#xff0c;是什么用&#xff1f;4.在AD中如何实现批量元器件的移动&#xff1f;5.在PCB中&#xff0c;如何让元器件以任意角度旋转&#xff1f;6.接口设计都要做静电防护…

MIT学生揭示ChatGPT完成本科课程存在问题

一个机器学习工程师发推特说&#xff1a;“这太疯狂了&#xff01;”一家专注于人工智能新闻的账号称这是一项“开创性的研究”。这项研究声称&#xff0c;ChatGPT能够以100%的准确率完成麻省理工学院的数学、计算机科学和电气工程本科课程。 它每个问题都答对了。 然而&#…

Spring:泛型依赖注入

Spring 泛型依赖注入问题解决 泛型依赖注入 泛型&#xff1a;具有占位符&#xff08;类型参数&#xff09;的类、结构、接口和方法&#xff0c;通过 <> 的方式定义了一个形式参数&#xff0c;在实例化时再指明具体类型 依赖注入&#xff1a;IoC 的具体实现&#xff0c;…

提升性能的利器:理解线程池的使用、工作原理和优势

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览2.1 为什么创建和销毁线程开销较大2.2 为什么要使…

【C++从0到王者】第十三站:vector源码分析及手把手教你如何写一个简单的vector

文章目录 一、vector的源码分析1.分析思路2.构造函数和插入接口 二、手把手教你写一个简单的vector1.基本结构2.迭代器与私有成员变量的定义3.构造函数4.size和capacity5.迭代器函数接口6.析构函数7.reserve接口8.尾插9.operator[]运算符重载10.简单的测试前面的接口11.insert以…

【Spring框架】Spring读取与存储综合练习

练习 在 Spring 项⽬中&#xff0c;通过 main ⽅法获取到 Controller 类&#xff0c;调⽤ Controller ⾥⾯通过注⼊的⽅式调⽤ Service 类&#xff0c;Service 再通过注⼊的⽅式获取到 Repository 类&#xff0c;Repository 类⾥⾯有⼀个⽅法构建⼀个 User 对象&#xff0c;返…

力扣 7月27日每日一题 2500. 删除每行中的最大值

题目连接 》2500. 删除每行中的最大值 有一句话这么说的&#xff1a;不用把人生的每一个目标都定在年龄线上&#xff0c;人生的本质是体验&#xff0c;感悟&#xff0c;和成长。什么年龄该干什么事本来就是一个伪命题。事实上&#xff0c;当你找到你热爱的东西&#xff0c;你…