国产分子动力学引擎——GPUMD本地部署教程:专为 NVIDIA GPU 加速设计

article/2025/8/26 15:54:36

一、简介

GPUMD 是一款开源分子动力学模拟软件,由渤海大学樊哲勇教授团队主导开发,2017年首发1.0版本,持续迭代至3.9.4版本,是国内首个完全基于GPU加速的开源分子动力学软件,专为 NVIDIA GPU 加速设计。它使用 CUDA 提高计算效率,能够快速模拟原子尺度的物理过程。

GPUMD – Graphics Processing Units Molecular Dynamics — GPUMD documentation

二、安装步骤

1. 准备环境

Ubuntu 22.04 + CUDA 11.8环境下部署

要编译(和运行) GPUMD ,需要计算能力不低于 3.5 和 CUDA 工具包 9.0 或更高版本的 Nvidia GPU 卡。在 Linux 系统上,还需要至少支持 C++11 标准的 C++ 编译器。在 Windows 系统上,还需要 Microsoft Visual Studio 的编译器和 64 位版本的 make.exe。

更新系统和安装必要工具:

确保安装了编译器(支持 C++11)、Make 工具和其他必要工具。

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git g++ make cmake wget m4 file

安装 CUDA Toolkit :
确保已经安装了 CUDA 11.8 ,并配置了路径:

export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH

验证 CUDA 工具是否可用:

nvcc --version

2. 下载 GPUMD 源码

git clone https://github.com/brucefan1983/GPUMD.git
cd GPUMD

3. 编译:

cd /GPUMD/src
vim makefile

其中需要根据自己CUDA的架构支持修改 Makefile 中的 CUDA_ARCH参数(计算能力),如:

  • Tesla T4:-arch=sm_75
  • A100:-arch=sm_80
  • RTX 4090:-arch=sm_89

如果需要支持多架构,可根据自己的型号前往NVIDIA官网查看,这里列出部分:

image.png

其多架构的设置格式为:

CUDA_ARCH = -gencode=arch=compute_86,code=sm_86
-gencode=arch=compute_89,code=sm_89
-gencode=arch=compute_70,code=sm_70
-gencode=arch=compute_80,code=sm_80

如下图:

image.png

然后输入 make进行编译(注意:直接编译没有NetCDF和PLUMED功能支持):

image.png

然后点击

编译完成后输入 ls看看是否有 gpumd和 nep

image.png

4. 其它功能设置(可选)

安装并配置 NetCDF 支持

下载和解压 NetCDF-C 4.6.3

wget https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.6.3.tar.gz
tar -xvzf v4.6.3.tar.gz
cd netcdf-c-4.6.3

配置和编译(设置安装路径为 /opt/netcdf)

./configure --prefix=/opt/netcdf --disable-netcdf-4 --disable-dap
make -j$(nproc)
make install

在这里:

--prefix指定安装路径,此处我设定为 /opt/netcdf

--disable-netcdf-4:禁用 NetCDF-4 的支持(GPUMD 暂不需要 NetCDF-4 功能)

--disable-dap:禁用 DAP(Distributed Access Protocol)

image.png

确认 NetCDF 是否已正确安装:

ls /opt/netcdf/bin

此时输出应该有:libincludebin

配置环境变量

安装完成后,需要将 netCDF 的 bin 目录添加到环境变量中,确保可以全局调用 nc-config 和其他工具:

echo 'export PATH=/opt/netcdf/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/opt/netcdf/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

测试是否正确配置:

nc-config --version

image.png

nc-config --help

image.png

配置 GPUMD 使用 NetCDF

在 GPUMD 的 makefile 中启用 USE_NETCDF 并更新相关路径。

cd /GPUMD/src
vim makefile

启用 USE_NETCDF支持:

CFLAGS = -std=c++14 -O3 $(CUDA_ARCH) -DUSE_NETCDF

设置 INCLDFLAGS 和 LIBS 变量(注意你的安装路径):

INC = -I/opt/netcdf/include
LDFLAGS = -L/opt/netcdf/lib
LIBS = -lnetcdf
  • INC:头文件目录。
  • LDFLAGS:库文件目录。
  • LIBS:链接静态库 libnetcdf.a
  • 安装并配置 PLUMED 支持

下载和解压 PLUMED

wget https://github.com/plumed/plumed2/releases/download/v2.8.2/plumed-2.8.2.tgz
tar -xvzf plumed-2.8.2.tgz
cd plumed-2.8.2

配置和编译(安装到 /opt/plumed 路径,可以修改)

./configure --prefix=/opt/plumed --disable-mpi --enable-openmp --enable-modules=all
make -j$(nproc)
make instal

image.png

如果需要启用 Python 支持 ,可以在配置时添加相关参数,例如:

./configure --enable-python

配置环境变量

将以下内容添加到 ~/.bashrc 文件中:

export PLUMED_KERNEL=$HOME/plumed/lib/libplumedKernel.so
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/plumed/lib
export PATH=$PATH:$HOME/plumed/bin

使配置生效:

source ~/.bashrc

验证安装

检查 plumed 可执行文件是否可用

/opt/plumed/bin/plumed-config --versio

image.png

如果需要在全局使用 plumed 命令,可以将其路径添加到环境变量中:

echo 'export PATH=/opt/plumed/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

使用 plumed help可以查看帮助信息

image.png

配置 GPUMD 使用 PLUMED

编辑 GPUMD 的 makefile,启用 USE_PLUMED 并更新路径。

cd /GPUMD/rsc
vim makefile

启用 USE_PLUMED

CFLAGS = -std=c++14 -O3 $(CUDA_ARCH) -DUSE_PLUMED

设置 INCLDFLAGS 和 LIBS 变量:

INC = -I/opt/plumed/include
LDFLAGS = -L/opt/plumed/lib -lplumed -lplumedKernel

如果加上前面的NetCDF则makefile文件中结果应该如下:

CC = nvcc
CUDA_ARCH = -gencode=arch=compute_86,code=sm_86 \-gencode=arch=compute_89,code=sm_89 \-gencode=arch=compute_70,code=sm_70 \-gencode=arch=compute_80,code=sm_80ifdef OS # For Windows with the cl.exe compiler
CFLAGS = -O3 $(CUDA_ARCH)
else # For linux
CFLAGS = -std=c++14 -O3 $(CUDA_ARCH) -DUSE_NETCDF -DUSE_PLUMED
endif
INC = -I/opt/netcdf/include -I/opt/plumed/include 
LDFLAGS = -L/opt/netcdf/lib -L/opt/plumed/lib 
LIBS = -lnetcdf -lplumed -lplumedKernel 

image.png

重新构建 GPUMD

检查库是否存在,确保 NetCDF 和 PLUMED 的库文件存在于指定路径中:

ls /opt/netcdf/lib/libnetcdf.a
ls /opt/plumed/lib/libplumed.so
ls /opt/plumed/lib/libplumedKernel.so

image.png

在最后编译之前还需要在makefile中添加一些东西,防止编译失败:

1.确认 libcusolver.so 的路径,需要执行以下命令来查找 libcusolver.so

find /usr/local/cuda* -name "libcusolver.so"

image.png

我的位于 /usr/local/cuda-11.8/targets/x86_64-linux/lib路径下。

2.修改 Makefile:在 LDFLAGS 中添加 -lcusolver和 libcublas,以显式链接 cusolver 和 libcublas库。如:

LDFLAGS = -L/opt/netcdf/lib -L/opt/plumed/lib -L/usr/local/cuda-12.1/lib64
LIBS = -lnetcdf -lplumed -lplumedKernel -lcusolver -libcubla

image.png

然后使用下列命令进行编译:

cd /GPUMD/src
make clean
make -j$(nproc)

确认可执行文件是否生成:

ls gpumd nep
# 应看到 gpumd 和 nep 两个可执行文件

最后设置GPUMD的全局变量:

vim ~/.bashrc
export PATH=$PATH:/GPUMD/src

保存退出后:

source ~/.bashrc
gpumd

image.png

三、使用方法

GPUMD 使用简单的文本文件作为输入,主要包括:

  • input.gpumd:主配置文件,定义模拟参数
  • coord.xyz:原子坐标文件
  • potential.gpumd:定义势能参数

进入需要模型的目录后,GPUMD的运行命令如下:

gpumd -i input.gpumd

image.png

平台镜像在GPUMD中安装了NetCDF和PLUMED,可通过 gpumd运行


http://www.hkcw.cn/article/vVZNgCMirm.shtml

相关文章

PostgreSQL 备份与恢复策略

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

2025年渗透测试面试题总结-匿名[校招]高级安全工程师(代码审计安全评估)(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。、 目录 匿名[校招]高级安全工程师(代码审计安全评估) 渗透基础 1. 自我介绍 2. SQL注入写Shell(分数…

Cmake编译glog成功并在QT中测试成功步骤

glog是开源的日志记录系统,下载地址GitHub - google/glog: C implementation of the Google logging module 跟gflags有点相似,编译和测试过程比较周折,所以记录下来具体的编译和测试步骤。 编译环境:WindowsCmakeVs2022Qt5.14.…

【Linux】网络--传输层--深入理解TCP协议

个人主页~ 深入理解TCP协议 一、TCP数据传输问题1、发送数据丢包问题---重传机制(一)客户端数据发送丢包(二)服务器确认应答丢包(三)时间间隔问题 2、三次握手问题---奇数次握手(一)…

深入理解 SQL 的 JOIN 查询:从基础到高级的第一步

在处理数据库时,我们常常需要从多个表中提取数据。比如想知道一个城市的天气情况,同时又想知道这个城市的具体位置。这就需要将 weather 表和 cities 表结合起来查询。这种操作在 SQL 中被称为 JOIN 查询。 现在看下两种表的情况 1.weather 表&#xff…

【无标题】C++23新特性:支持打印volatile指针

文章目录 前言背景与问题C23的解决方案实现原理使用场景硬件开发多线程调试 总结 前言 在C开发中,volatile关键字常用于修饰变量,以确保编译器不会对这些变量进行优化,从而保证程序能够正确地与硬件交互或处理多线程环境下的特殊变量。然而&…

RPG15.轻攻击

上一篇已经制作了装备和卸下武器 接下来开始做战斗系统 1.先添加Tag ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_EquipAxe);ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_UnEquipAxe); ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Play…

20250529-C#知识:继承、密封类、密封方法、重写

C#知识:继承、密封类、密封方法、重写 继承是面向对象的三大特性之一,通过继承能够减少重复代码的编写,有助于提升开发效率。 1、继承 C#不同于C,只支持单继承当子类出现与父类同名的成员时,父类成员被隐藏&#xff0…

第30次CCF计算机软件能力认证-1-重复局面

时间限制: 1.0 秒 空间限制: 512 MiB 下载题目目录(样例文件) 题目背景 国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。 题目描述 国际象棋每一个局面可以用大小为 88…

【计算机网络】第2章:应用层—DNS

目录 一、PPT 二、总结 DNS(域名系统)详解 (一)DNS核心概念 (二)DNS查询过程(重点❗) (三)DNS资源记录(RR)类型…

[C]基础18.自定义类型:联合和枚举

博客主页:向不悔本篇专栏:[C]您的支持,是我的创作动力。 文章目录 0、总结1、联合体(共用体)1.1 联合体类型的声明1.2 联合体的特点1.3 联合体大小的计算1.4 联合体的应用场景1.5 联合体练习:判断机器字节序…

目标检测预测框置信度(Confidence Score)计算方式

预测框的置信度(Confidence Score)是目标检测模型输出的一个关键部分,它衡量了模型对一个预测框中包含特定类别对象的确定程度。 不同的目标检测模型(如Faster R-CNN、SSD、YOLO、DETR等)在计算置信度时有其特有的机制…

视觉分析开发范例:Puppeteer截图+计算机视觉动态定位

一、选型背景:传统爬虫已无力应对的视觉挑战 在现代互联网环境中,尤其是小红书、抖音、B站等视觉驱动型平台,传统基于 HTML 的爬虫已经难以满足精准数据采集需求: 内容加载由 JS 动态触发,难以直接解析 HTML&#xf…

Java 开发上门家政系统源码:全流程数字化管理,适配家政公司 / 个体户接单派单

家政服务订单管理混乱、人员调度低效、客户留存率低?基于 Java 开发的上门家政系统源码,凭借其强大的稳定性、灵活的扩展性和全流程数字化管理能力,为家政行业提供了一套高效、低成本的解决方案,实现从接单、派单到服务结算的全链…

java24

1.双列集合Map定义 collection和Map都自有contains方法 把实现类对象赋值给接口类对象属于多态的一种,但是这样不能使用实现类里面的特殊方法和重写方法 写好的API里面好像只有数组的打印值是地址值 2.Map遍历方式 Entry是Map接口里面的一个内部接口,所…

VSCode的下载与安装(2025亲测有效)

目录 0 前言1 下载2 安装3 后记 0 前言 丫的,谁懂啊,尝试了各种办法不行的话,我就不得不拿出我的最后绝招了,卸载,重新安装,我经常要重新安装,所以自己写了一个博客,给自己&#xf…

深入了解linux系统—— 库的制作和使用

什么是库? 库,简单来说就是现有的,成熟的代码; 就比如我们使用的C语言标准库,我们经常使用输入scanf和输出printf,都是库里面给我们实现好的,我们可以直接进行服用。 库呢又分为静态库和动态…

VoltAgent 是一个开源 TypeScript 框架,用于构建和编排 AI 代理

​一、软件介绍 文末提供程序和源码下载 VoltAgent 是一个开源 TypeScript 框架,用于构建和编排 AI 代理 二、什么是 VoltAgent? AI 代理框架提供了构建由自主代理提供支持的应用程序所需的基础结构和工具。这些代理通常由大型语言模型 (&am…

弹性公网IP的五大核心优势解析

在云服务架构中,弹性公网IP(EIP)已成为现代企业网络部署的核心组件。与传统固定IP相比,它通过独特的技术机制解决了动态环境下的公网访问难题。以下五大核心优势决定了其不可替代的价值: 一、动态绑定的灵活性 弹性公…

分布式数据库备份实践

在分布式备份中可以采取两种方式进行备份,一种是采用手动编写backup.yml文件进行备份,另外一种是吧备份过程交给备份工具自动执行。如果需要个性化进行备份,建议采用手动编写备份文件方式进行备份。 以下是针对两种备份方式的实践&#xff1a…