GPU 加速的 NAMD

现在,开始阅读此《GPU Ready Apps Guide》(GPU Ready 应用程序指南)。

NAMD

NAMD (NAnoscale Molecular Dynamics) 是一款产品级分子动力学应用程序,专为实现大型生物分子系统的高性能模拟而设计。NAMD 由伊利诺伊大学香槟分校 (UIUC) 开发,其使用的二进制文件和源代码为免费分发。

与仅使用 CPU 的系统*相比,最新版本 NAMD 2.11 在 NVIDIA GPU 上的运行速度通常可提升 7 倍,从而使用户运行分子动力学模拟的时间从几天缩短到几小时。它比 NAMD 2.10 的速度最高提升 2 倍,这不仅可帮助用户节省硬件成本,而且可显著加速科学发现。

*双 CPU 服务器,英特尔 E5-2698 v3@2.3GHz,NVIDIA Tesla K80(关闭 ECC),Autoboost 开启;STMV 数据集

NAMD 在 GPU 上的运行速度提高 7 倍

安装

系统要求

NAMD 可以移植到拥有最新 C++ 编辑器的任何并行平台。预编译的 GPU 加速 NAMD 2.11 二进制文件可下载至 Windows、Mac OS X 和 Linux。NAMD 同时使用 GPU 和 CPU,因此我们建议使用相对较新的 CPU 实现最佳 NAMD 应用程序性能。 

下载和安装说明

NAMD 开发人员为 NAMD 移植的所有常用平台提供了经优化的完整二进制文件。可以从 NAMD 下载页面获取这些二进制文件。

NAMD 并不需要编译,除非您要添加或修改功能、构建利用特殊网络硬件的 Charm++ 版本来提高性能或是您已定制您的 NAMD 版本。关于编译 NAMD 的完整说明包含在发行说明中,可以从 NAMD 网站获取且随所有分发版提供。

以下是编译过程的简要概述

1.下载 NAMD 源代码

2. 解压缩软件包和 Charm++

tar xf NAMD_2.11_Source.tar.gz
cd NAMD_2.11_Source
tar xf charm-6.7.0.tar

3.下载并安装 TCL 和 FFTW。

请参阅发行说明以了解这些库的相应版本。

wget http://www.ks.uiuc.edu/Research/namd/libraries/fftw-linux-x86_64.tar.gz
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.5.9-linux-x86_64.tar.gz
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.5.9-linux-x86_64-threaded.tar.gz
tar xzf fftw-linux-x86_64.tar.gz
mv linux-x86_64 fftw
tar xzf tcl*-linux-x86_64.tar.gz
tar xzf tcl*-linux-x86_64-threaded.tar.gz
mv tcl*-linux-x86_64 tcl
mv tcl*-linux-x86_64-threaded tcl-threaded

4.构建 Charm++

构建脚本具有交互模式,您还可以按照以下所述内容在命令行中指定选项。

cd charm-6.7.0
./build charm++ {arch} {C compiler} {Fortran compiler} {other options} 

对于 {arch},必须使用以下选项之一:“verbs-linux-x86_64”用于多节点配置,“multicore-linux64”用于单节点系统。其他选项并非必须,但建议使用它们以获得最佳性能:“smp”可以将 SMP 用于多节点构建(单击此处以获取更多详细信息),“--with-production”可以使用生产级别优化。

示例 1. 用于多节点配置的 Charm++ 构建,将英特尔编译器和 SMP 与所有生产优化结合使用:

./build charm++ verbs-linux-x86_64 icc smp --with-production 

示例 2. 用于单节点配置的 Charm++构建,将英特尔编译器与所有生产优化结合使用。

./build charm++ multicore-linux64 icc --with-production 

5.构建 NAMD。

确保您位于主 NAMD 目录中,然后配置并运行 make:

./config {namd-arch} --charm-arch {charm-arch} {opts}
cd {namd-arch}
make -j4 

对于 {namd-arch},我们建议使用“Linux-x86_64-icc”,{charm-arch} 应与您构建 Charm++ 时使用的 arch 一致,{opts} 应设置为“--with-cuda”以启用 GPU 加速,仅 CPU 构建中应设置为“--without-cuda”。可以使用 .[comment] 来扩展构建目录,例如Linux-x86_64.cuda。这对于管理 NAMD 的不同构建很有帮助。请注意,扩展没有任何含义,因此除非您还指定了“--with-cuda”,否则“./config Linux-x86_64.cuda”将不会成为 CUDA 构建。

用于 CUDA 构建的可选标志:
a.--cuda-prefix 可用于设置 CUDA 工具包的正确路径;
b.--cuda-gencode 允许您添加不同的 GPU 计算架构。

示例 1.单节点、带 GPU 加速和特定 CUDA 路径、x86_64 架构、使用 Intel 编译器的 NAMD 构建:

./config Linux-x86_64-icc --charm-arch multicore-linux64-icc --with-cuda --cuda-prefix /usr/local/cuda 

示例 2. 多节点、带 GPU 加速和特定 CUDA 路径、x86_64 架构、使用 Intel 编译器的 NAMD 构建:

./config Linux-x86_64-icc --charm-arch verbs-linux-x86_64-smp-icc --with-cuda --cuda-prefix /usr/local/cuda 

示例 3. 多节点、不带 GPU 加速、x86_64 架构、使用 Intel 编译器的 NAMD 构建:


./config Linux-x86_64-icc --charm-arch verbs-linux-x86_64-smp-icc 

运行作业

在运行 NAMD 的 GPU 加速版本之前,请为您的 GPU 安装最新的 NVIDIA 显示驱动程序。要运行 NAMD,您需要“namd2”可执行程序,而对于多节点运行,您还需要 charmrun 可执行程序。确保按照以下所述内容指定 CPU 相关性选项。

命令行选项

用于在单节点系统上运行 NAMD 的常规命令行:

namd2 {namdOpts} {inputFile}

在多节点系统上,必须使用 charmrun 运行 NAMD,如下所示:

charmrun {charmOpts} namd2 {namdOpts} {inputFile}

{charmOpts}

  • ++nodelist {nodeListFile} - 多节点运行需要节点列表
  • 如果您要使用可识别 mpiexec 的排队系统,Charm++ 还支持 ++mpiexec 替代选项。
  • ++p $totalPes - 指定 PE 线程的总数
  • 这是工作线程(也称为 PE 线程)的总数。我们建议将此项设置为等于(总 CPU 核心数 - 总 GPU 数)。
  • ++ppn $pesPerProcess - 每个进程的 PE 数量
    • 我们建议将此项设置为“每个节点的核心数/每个节点的 GPU 数 -1”
    • 要释放每个通信进程中的一个线程,此项是必需的。请确保指定下面的 +commap。
    • 总进程数等于 $totalPes/$pesPerProcess
    • 将建议值用于此选项时,每个进程将使用一个 GPU

{namdOpts}

  • NAMD 会将“++p”和“++ppn”继承为“+p”和“+ppn”,前提是在 {charmOpts} 中进行了设置
  • 否则,对于多核心构建,请使用“+p”以设置至核心数。
  • 在多节点运行中,建议每个 GPU 的进程数不超过一个。要获得更多通信线程,建议每个 GPU 只启动一个进程。对于单节点,每个进程可以使用多个 GPU。
  • CPU 相关性选项(请参阅用户指南):
    • “+setcpuaffinity”,用于防止线程四处移动
    • “+pemap #-#”- 此选项用于将计算线程映射到 CPU 核心
    • “+commap #-#”- 此选项用于设置通信线程的范围
    • 每插槽 16 个核心的双插槽配置示例:
      • +setcpuaffinity +pemap 1-15,17-31 +commap 0,16
  • GPU 选项(请参阅用户指南):
    • “+devices {CUDA IDs}”- (可选)用于指定要在 NAMD 中使用的设备 ID
    • 如果设备未按插槽顺序,设置此选项可确保插槽使用其直接连接的 GPU,例如“+devices 2,3,0,1”

我们建议始终在 NAMD 中检查启动消息,以确保正确设置了这些选项。此外,++verbose 选项可以为使用 charmrun 的运行提供更详细的执行输出。运行主要或其他系统工具可以帮助您确保获取所请求的线程映射。 

{inputFile}

使用下一小节中某个数据库中的相应 *.namd 输入文件。

示例 1.在具有 2 个 GPU、2 个 CPU(核心总数为 20)以及多核心 NAMD 构建的 1 个节点上运行 ApoA1:

./namd2 +p 20 +devices 0,1 apoa1.namd

示例 2. 在 2 个节点(其中每个节点具有 2 个 GPU、2 个 CPU(核心数为 20)以及 SMP NAMD 构建)上运行 STMV(请注意,我们启动 4 个进程,每个进程控制 1 个 GPU):

charmrun ++p 36 ++ppn 9 ./namd2 ++nodelist $NAMD_NODELIST +setcpuaffinity +pemap 1-9,11-19 +commap 0,10 +devices 0,1 stmv.namd

请注意,默认情况下,“rsh”命令用于在节点列表文件中指定的每个节点上启动 namd2。可以通过 CONV_RSH 环境变量更改此值,即使用 ssh(而非 rsh)来运行 "export CONV_RSH=ssh"(请参阅 NAMD 发现说明以获得详细信息)。

基准

本节演示了所选数据集的 GPU 加速。请注意,您可能需要更新输入文件,以减少输出能量/定时频率。基准按照递增的原子序号列出。建议在配备多个 GPU 的系统上运行 SMTV 等大型测试用例。

载脂蛋白 A1 (APOA1)
# of Atoms
92,224
Time Steps
500
Output Energies
100
Output Timing
100

APOA1

载脂蛋白 A1 (ApoA1) 是血液中高密度脂蛋白 (HDL) 的主要蛋白质成分,在脂类代谢中起特殊作用。ApoA1 基准测试由 92,224 个原子组成,多年以来一直是标准的 NAMD 跨平台基准测试。

ATP 合成酶
# of Atoms
327,506
Time Steps
500
Output Energies
100
Output Timing
100

ATPASE

ATP 合成酶是一种酶,用于合成细胞中常见的分子能量单元,即三磷酸腺苷 (ATP)。F1-ATPase 基准测试是 ATP 合成酶的 F1 子单元的模型。

卫星烟草花叶病毒 (SMTV)
# of Atoms
1,066,628
Time Steps
500
Output Energies
100
Output Timing
100

STMV

卫星烟草花叶病毒 (STMV) 是一种小型二十面体植物病毒,它会使烟草花叶病毒 (TMV) 的感染症状恶化。SMTV 是研究分子动力学的绝佳候选者,因为在病毒中它相对较小,在工作站或小型服务器上可以使用传统分子动力学模拟的对象中处于中高级别。

阅读输出

品质因数为“纳秒/天”(值越大越好),但在日志中输出为“天/纳秒”(值越小越好)。请注意,大多数分子动力学用户都关注“天/纳秒”的反转值,即“纳秒/天”。建议将此值的所有实例的平均值用于基准测试目的;可以在相应的 *.namd 输入文件中控制输出频率。由于初始负载均衡,应忽略“初始时间:”输出,以支持随后的“基准测试时间:”输出。

预期性能结果

请参阅下面连接到 4xEDR InfiniBand 的 1-4 个节点的不同系统配置(配备双插槽 CPU 和 NVIDIA Tesla 板)的参考结果。

ApoA1
F1ATPase
STMV

推荐的系统配置

硬件配置

PC

参数
规格

CPU 架构

x86

系统内存

16-32 GB

CPU 数

2(8 核以上,2 GHz 以上)

GPU 型号

GeForce GTX TITAN X

GPU 数

2-4

服务器

参数
规格

CPU 架构

x86

系统内存

32 GB

CPU 数/节点数

2(8 核以上,2 GHz 以上)

总节点数

1-10,000

GPU 型号

NVIDIA Tesla® P100

GPU 数/节点数

2-4

互联

InfiniBand

软件配置

软件堆栈

参数
版本

操作系统

CentOS 6.2

GPU 驱动程序

352.68 或更高版本

CUDA 工具包

7.5 或更高版本

Intel 编译器

2016.0.047

立即构建理想的 GPU 解决方案。