侧边栏壁纸
博主头像
qiql博主等级

水能载舟,亦可赛艇

  • 累计撰写 33 篇文章
  • 累计创建 28 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

🔥Linux 平台 BEAST 安装及调试指南【附安装脚本】

qiql
2022-07-15 / 0 评论 / 0 点赞 / 2,919 阅读 / 2,497 字

TIME:2022.06.22
AUOTR: qiql
EMAIL: hi@qiql.net

0 BEAST 简介

【官网介绍】:BEAST 是一个使用 MCMC 进行分子序列贝叶斯分析的跨平台程序。它完全倾向于使用严格或宽松的分子时钟模型来推断根深蒂固的、时间测量的系统发育。它可以作为一种重建系统发育的方法,同时也是一个检验进化假说的框架,不需要单一树形拓扑结构的条件。BEAST 使用 MCMC 对树的空间进行平均,因此每棵树的权重与其后验概率成正比。我们包括一个简单的使用用户界面程序来建立标准的分析和一套程序来分析结果[1]

【BEAST2】:BEAST的 1.x 版本与 2.x 版本有很大的不同,根据官网的说法,BEAST 2是 BEAST 1.x 的重写版本,更加强调了模块化。这使得通过包系统扩展 BEAST 2 变得更加容易。因此,BEAST 2已经迅速获得了执行各种各样的基于模型的分析阵列的能力[2]

【注意】:BEAST 的多卡并行计算,仅支持到 1.8 版本,如果你采用了比 1.8 更高的版本,那么你将无法调用起多卡进行并行计算,只能使用一张卡[3]

1 安装 BEAST

BEASTv1.x 版本下载地址:https://beast.community/,目前的LTS版本为1.10.4,历史版本下载地址为:https://github.com/beast-dev/beast-mcmc/releases

下载到tar.gz格式的包后,上传至服务器,直接解压即可完成安装,因为该程序是基于Java的,所以无需再进行编译操作

运行该软件需要Java环境,安装jdk很简单,不做赘述。Java SE 各大历史版本下载地址:https://www.oracle.com/java/technologies/downloads/archive/

解压后,可以直接运行bin目录下的 beast 文件,此时会调用起图形化界面。但是如果在参数中添加输入文件,运行会报错,比如,运行 example 目录下的benchmark 文件,会报错说找不到 Beagle-lib 库,具体报错信息如下:

Using BEAGLE TreeLikelihood
  Branch rate model used: strictClockBranchRates
Failed to load BEAGLE library: no hmsbeagle-jni in java.library.path
Fatal exception: No acceptable BEAGLE library plugins found. Make sure that BEAGLE is properly installed or try changing resource requirements.
java.lang.RuntimeException: No acceptable BEAGLE library plugins found. Make sure that BEAGLE is properly installed or try changing resource requirements.
	at beagle.BeagleFactory.loadBeagleInstance(Unknown Source)
	at dr.evomodel.treelikelihood.BeagleTreeLikelihood.<init>(Unknown Source)
	at dr.evomodelxml.treelikelihood.BeagleTreeLikelihoodParser.createTreeLikelihood(Unknown Source)
	at dr.evomodelxml.treelikelihood.BeagleTreeLikelihoodParser.parseXMLObject(Unknown Source)
	at dr.xml.AbstractXMLObjectParser.parseXMLObject(Unknown Source)
	at dr.xml.XMLParser.convert(Unknown Source)
	at dr.xml.XMLParser.convert(Unknown Source)
	at dr.xml.XMLParser.parse(Unknown Source)
	at dr.app.beast.BeastMain.<init>(Unknown Source)
	at dr.app.beast.BeastMain.main(Unknown Source)

这是因为,BEAST 的并行,是使用 Beagle-lib 库来实现的[4],安装 beagle-lib 库略微繁琐,如果只是希望在 CPU 上并行运行 BEAST 程序,那么可以参考:https://github.com/beagle-dev/beagle-lib/wiki/LinuxInstallInstructions

2 安装 Beagle-lib 库

beagle-lib 库可以直接去 github 上下载master分支,该分支为 4.0 版本,目前(2022年6月21日10:36:02)的LTS版本为 3.1.2 。4.0 版本的库在安装上要比 3.1.2 更简单

安装 4.0.0 版本

首先,机器上需要有不低于 7.3 版本的 gcc 以及不低于 3.6 版本的 cmake 环境,否则无法通过编译。

  1. 解压,然后进入解压目录,新建 build 目录并进入
  2. 执行命令 cmake -DCMAKE_INSTALL_PREFIX:PATH=$HOME … 以配置目录【这里可以自定义编译后库的保存路径】
  3. 执行命令 make install 以进行编译安装
  4. 执行命令 ls -lt $HOME | grep libhmsbeagle 查看所编译的库,如果有库说明编译成功
  5. 执行命令 export LD_LIBRARY_PATH=$HOME/lib:$LD_LIBRARY_PATH 以将所编译的库添加至环境变量

可能会遇到的一些问题:

  1. cmake 时出错,会报一些 gcc 方面的错误,此时,如果仔细查看编译日志,会发现编译用的是 /usr/bin 目录下的 gcc,而不是我们想要的会话环境中的gcc 和 g++,所以解决方案就是手动指定编译器,将 cmake 命令替换为:cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_INSTALL_PREFIX:PATH=$HOME/lib …
  2. 如果指定了编译器仍然报错,那么可以尝试安装 Binutils 来解决该问题,安装参考:https://www.cnblogs.com/tocy/p/gnu-binutils-simple-usage.html
  3. 编译完成后找不到库文件,编译后的库文件一般位于所指定的目录下的 lib 文件夹中,你所声明的环境变量也应该写到这一层文件夹,如果不是此问题,建议在指定库文件目录时,直接写 $HOME/lib,指定到其他目录可能会出现文件写入错误
  4. 将库声明到环境变量 LD_LIBRARY_PATH 中后,执行安装命令仍报错说找不到库,触发此错误一般是因为 gcc 版本不够高,在编译完成之后,gcc版本因为各种各样的原因被卸载,此时,在运行 BEAST 软件时,仍需保证环境中的 gcc 版本不低于 7.3,可以使用 ldd 命令检查库文件的依赖是否都存在
  5. 【特别注意】如果需要在 GPU 集群上运行BEAST,那么需要在编译时开启 CUDA 选项,即将 cmake 命令替换为:cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DBUILD_CUDA=ON -DCMAKE_INSTALL_PREFIX:PATH=$HOME/lib …

安装 3.1.2 版本

安装 3.1.2 版本需要机器上有不低于 2.64 版本的 Autoconf 工具,这个工具的安装步骤不是很好找,下载地址为:https://ftp.gnu.org/gnu/binutils/,可以自行尝试按照README安装或尝试使用更高版本的 gcc

  1. 解压,然后进入解压目录,查看 README 文档,文档中有安装步骤可供参考
  2. 执行命令 ./autogen.sh
  3. 执行命令 ./configure --enable-openmp --prefix=$HOME – 以进行配置,–enable-openmp 用来配置 openMP 以进行加速
  4. 执行命令 make && make install 以进行编译和安装
  5. 将库文件所在目录添加至环境变量 LD_LIBRARY_PATH

3 运行BEAST

在运行BEAST之前,必须先在环境变量 LD_LIBRARY_PATH 中 export 所编译的库的位置,且 gcc 版本不低于 7.3。

3.1 在CPU上运行

运行命令为:

/to/your/path/beast/bin/beast -beagle_CPU -beagle_SSE /to/your/path/输入文件.xml

其中,-beagle_CPU 表示使用 CPU 资源来进行计算;-beagle_SSE 表示施加向量化,这会起到一定的加速效果

3.2 在GPU上运行

如果beagle-lib库在编译时没有添加 -DBUILD_CUDA=ON 选项,那么将无法调用起多卡并行

运行命令为:

/to/your/path/beast/bin/beast -beagle_GPU -beagle_SSE /to/your/path/输入文件.xml

4 命令行参数

输入命令 /to/your/path/beast/bin/beast -h 可以查看完整的命令行参数,需要注意的几点有:

  1. beast 会根据机器的计算资源,来自动的配置线程数,通常情况下,这个线程数会是你的机器能开启的最大线程,所以,除非你十分了解你的机器或希望约束beast 所调用的资源,那么就你不应该设置一个 --threads 参数来约束 beast 所开启的线程数目[5]
  2. beast_instances 的作用是给输入文件划分子分区,注意,这是子分区而不是分区,分区是输入文件中定义的,beast 计算程序不会给输入文件划分分区,根据[5:1],如果划分了子分区,一般都会导致计算性能的下降。
  3. beast_order 用来指定各个分区或子分区依次使用哪些计算资源,如果不指定该参数,那么程序将只会调用起一块计算资源。参数就是1,2,3,4这样的自然数,分别对应机器上的第一块CPU(GPU),第二块CPU(GPU)。
  4. 如果输入文件没有分区,那么即使指定了 beagle_order 选项,也无法调用起多块计算资源,这时可以通过beagle_instances划分子分区来强行调用多块资源来进行计算,但是计算效率未必尽如人意。
  5. 如果输入文件有 4 个分区,那么只有指定了 beagle_order 选项,才会调用起多块资源来并行计算。
  6. 执行 /to/your/path/beast/bin/beast -beagle_info 可以查看 beast 识别到的机器上的计算资源。
  7. 每次beast开始计算时,都会在执行命令的目录下产生程序的日志输出文件,如果不删除该日志文件来重新计算同一个输入文件,那么会报错说日志文件已存在,这时可以手动删除该文件或添加 -overwrite 参数来强行覆盖原来的日志输出文件。
  8. 查看英伟达显卡显存和利用效率的命令为:nvidia-smi[6][7]

参考链接:


  1. https://beast.community/ ↩︎

  2. http://www.beast2.org/ ↩︎

  3. High-Performance Computing of BEAST/BEAGLE inBayesian Phylogenetics using SDumont Hybrid Resources ↩︎

  4. https://github.com/beagle-dev/beagle-lib ↩︎

  5. https://beast.community/performance ↩︎ ↩︎

  6. https://blog.csdn.net/C_chuxin/article/details/82993350 ↩︎

  7. https://developer.nvidia.com/nvidia-system-management-interface ↩︎

0

评论区