在腾讯云上部署科学计算软件Amber
时间:2022-07-22
本文章向大家介绍在腾讯云上部署科学计算软件Amber,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Amber是一套分子动力学模拟程序,我们今天来说下如何使用云服务器安装部署这套程序。
缘起
自己的一个朋友是做科研工作的,不久前他找到我向我咨询一个关于科学计算的需求:
他在做蛋白和药物对接相关的研究,希望使用分子动力学模拟软件Amber (https://ambermd.org/),这款科学计算软件也在材料科学中有着广泛的应用。
这款软件在运算时可以利用GPU加速极大提升计算效率,所以一开始他和我咨询的是关于GPU显卡相关的问题,但聊着聊着发现如果自行购买GPU显卡维护主机有如下问题:
- 单台主机购买及维护成本很高,GPU硬件通常需要单独购买,更新换代不易。
- Amber的使用并不高频,感觉有些浪费。
- 计算量大时,单台机器性能瓶颈严重,但搞多台首先成本高,安装部署更是麻烦。
- 机器一旦出问题,修理期间服务相当于不可用。
- 硬件环境搞定的话,软件环境的安装部署对我朋友来说有点困难。
我朋友说有同事使用超算来作为解决方案,单等待时间很长,且使用成本也不低。
上面这些问题,听起来不就是云服务可以解决的经典问题吗?
使用云服务解决这类问题的优点
- 无须购买及维护硬件。
- 即买即用,无需等待。
- 针对使用频率不高的场景,可以按量付费,节约成本。
- 云服务高可用,无需担心主机故障带来的服务不可用问题。
- 单机性能不够可快速扩容。
- 软件环境部署仅需一次,之后可以制作为镜像,未来不再会有软件环境部署成本。
朋友欣然接受了我的提议,并拜托我帮他部署好整个Amber环境。
这里我记录下使用腾讯云(https://cloud.tencent.com/)部署Amber环境的整个过程。
部署GPU云服务器环境
这里我参考了【玩转腾讯云】GPU云服务器(驱动篇) 这篇文章,成功部署好GPU云服务器环境。但因为我对CentOS更为熟悉,所以操作系统使用的CentOS 7.6版本。
部署机器选择:
部署Amber
这里部署的是Amber18这个版本。
Amber18本身有两个需要安装的包,分别是:
- AmberTools18.tar.bz2
- Amber18.tar.bz2
其中AmberTools是免费的,但不提供GPU加速功能,如果想利用GPU加速,就需要额外付费购买Amber18。
我在部署过程中使用root
账号在/root
目录下操作。
依赖环境部署
yum安装
yum install -y gcc gcc-gfortran gcc-c++ flex tcsh zlib-devel
bzip2-devel libXt-devel libXext-devel libXdmcp-devel
tkinter openmpi openmpi-devel perl perl-ExtUtils-MakeMaker
patch bison boost-devel
MPICH安装
tar zxvf ~/amber_pkgs/mpich-3.3.2.tar.gz
cd mpich-3.3.2/
./configure
make -j8
make install
解压Amber
我这里解压到
tar jxvf amber_pkgs/Amber18.tar.bz2
tar jxvf amber_pkgs/AmberTools18.tar.bz2
安装conda环境
yum install -y conda
conda init bash
source ~/.bashrc
conda create -n amber18
conda activate amber18
conda install --file amber18/AmberTools/src/python_requirement.txt
设置环境变量
在~/.bashrc中添加:
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_HOME/lib64
export AMBER_PREFIX=$HOME/amber18
export AMBERHOME=$AMBER_PREFIX
export PATH="${AMBER_PREFIX}/bin:${PATH}"
# Add location of Amber Python modules to default Python search path
if [ -z "$PYTHONPATH" ]; then
export PYTHONPATH="${AMBER_PREFIX}/lib/python3.8/site-packages"
else
export PYTHONPATH="${AMBER_PREFIX}/lib/python3.8/site-packages:${PYTHONPATH}"
fi
if [ -z "${LD_LIBRARY_PATH}" ]; then
export LD_LIBRARY_PATH="${AMBER_PREFIX}/lib"
else
export LD_LIBRARY_PATH="${AMBER_PREFIX}/lib:${LD_LIBRARY_PATH}"
fi
之后source一下:
source ~/.bashrc
编译Amber
cd $AMBERHOME
# 编译gpu并行版本
./configure --with-python /root/.conda/envs/amber18/bin/python -cuda -mpi -noX11 gnu
make -j8 install
测试
export DO_PARALLEL="mpirun -np 8"
make test.cuda_parallel
测试时可以观察gpu的运行状况:
watch -n 10 nvidia-smi
可以看到:
Every 10.0s: nvidia-smi Sun Jun 28 17:18:57 2020
Sun Jun 28 17:18:57 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01 Driver Version: 440.33.01 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:08.0 Off | 0 |
| N/A 41C P0 55W / 70W | 1219MiB / 15109MiB | 100% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 16583 C /root/amber18/bin/pmemd.cuda_DPFP.MPI 151MiB |
| 0 16584 C /root/amber18/bin/pmemd.cuda_DPFP.MPI 151MiB |
| 0 16585 C /root/amber18/bin/pmemd.cuda_DPFP.MPI 151MiB |
| 0 16586 C /root/amber18/bin/pmemd.cuda_DPFP.MPI 151MiB |
| 0 16587 C /root/amber18/bin/pmemd.cuda_DPFP.MPI 151MiB |
| 0 16588 C /root/amber18/bin/pmemd.cuda_DPFP.MPI 151MiB |
| 0 16589 C /root/amber18/bin/pmemd.cuda_DPFP.MPI 151MiB |
| 0 16590 C /root/amber18/bin/pmemd.cuda_DPFP.MPI 151MiB |
+-----------------------------------------------------------------------------+
到这里Amber的软件环境我们就部署完成了。
后续工作
做好环境后,我们可以利用云服务器的镜像制作功能为部署好的软件环境制作自定义镜像,这样做有如下好处:
- 可随时使用该镜像创建新的计算实例。
- 之后机器上的软件环境有问题随时可用该镜像恢复。
- 可以使用腾讯云提供的 批量计算 及 弹性伸缩 服务解决算力不足问题。
- 可使用镜像的分享功能分享给其他需要的人。(这里也要注意软件授权问题)
参考资料
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tomcat, Jre 证书相关
- zookeeper集群搭建
- Maven Jar包制作与上传及基本使用
- 当你在`bind 0.0.0.0`的时候,你实际在做什么
- Hadoop Hive Hbase Kylin 环境搭建
- Spring MVC 学习
- RSeQC判断链特异性(strand-specific)
- bigWigMerge合并bigwig文件
- WPF桌面开发集成Nginx服务器
- chrome浏览器拦截(block)特定网站某些请求的方法
- 聊一聊:一道 Promise 链式调用的题目
- linux编译运行c++程序
- Python的运算符 (下)
- 深入理解JVM(③)Java的锁优化
- Spring 基于 Java 的配置 - 如何不用Beans.xml照样描述bean之间的依赖关系