经 GPU 加速的 BigDFT

立即开始阅读此《GPU-Ready Apps Guide》(GPU-Ready 应用程序指南)。

BigDFT

BigDFT 是一种基于密度泛函理论 (DFT) 并使用小波基组的大规模并行电子结构编码,同时支持使用线性标度法。小波可形成一个分布于自适应网格(我们在实施过程中采用了两个级别的分辨率)的实空间基组。BigDFT 采用 Goedecker-Teter-Hutter (GTH) 或 Hartwigsen-Goedecker-Hutter (HGH) 赝势去除核心电子。

您既可在 ABINIT v5.5 及更高版本中获取 BigDFT,也可从网站下载独立版本。泊松方程求解器基于格林函数形式、周期体系、表面和孤立体系,BigDFT 可在显式边界条件下对其进行模拟。
您也可下载泊松方程求解器并单独使用,或将其集成至 ABINIT、Octopus 和 CP2K。代码、教程和文档均可在 BigDFT 上获取。

安装

您可以选择在裸机上下载并安装 BigDFT,也可从 NVIDIA GPU Cloud 提取并运行 BigDFT 容器。

而在高性能计算 (HPC) 环境中,安装该应用程序颇为复杂。借助容器,您无需在系统上先行安装便可运行该应用程序,从而能够在优化性能的同时轻松部署最新版应用程序。

运行 BigDFT 容器非常简单,几分钟内即可完成设置。

运行任务

从 NGC 提取 BigDFT 容器后,您可选择以下两种方式来运行。

  • 直接通过 nvidia-docker 运行命令运行 BigDFT
  • 在容器内以交互方式运行 BigDFT
  • 在网页浏览器上使用 Jupyter Notebook 运行 BigDFT
  • 使用 MPI、OpenMP 或 GPU 运行 BigDFT

1.通过命令行运行 BigDFT

如要从命令行界面 (CLI) 运行 BigDFT 容器,您需在主机系统的当前目录中输入文件。然后您可以发出以下命令,执行此命令将运行 BigDFT,并可将当前工作目录作为“/results”在容器内进行访问:

nvidia-docker run -it --rm -v $(pwd):/results -w /results

nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl bigdft

2.以交互方式运行 BigDFT

在本例中,我们将以交互方式运行 BigDFT,并会重现容器中包含的 FeHyb 测试。

如要以交互方式运行容器,请发出以下命令,执行此命令将启动容器并可将当前目录加载至 /results 以便在容器内进行访问。(请参阅以下命令中的 -v 选项,将本地数据目录映射设置为容器内映射。)

nvidia-docker run -it --rm -v $(pwd):/results

nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl bash

启动容器后,您将位于 /directory。之后您可以切换至 /docker/FeHyb/GPU 找到输入文件(input.yaml、posinp.xyz 和 psppar.Fe),并运行以下测试:

cd /docker/FeHyb/GPU

bigdft

完成计算后,您可在 log.yaml 文件中找到输出,并在 time.yaml 中找到执行时间。您可将这些文件复制到 /results,以便将其保存至主机系统的当前文件夹。

3.使用 Jupyter Notebook 运行 BigDFT

容器的默认命令能够启动容器内的 Jupyter 服务器(可通过任何网页浏览器访问),并允许使用 BigDFT 运行交互式会话。如要实现此操作,您仅需将 8888 端口从容器重定向至主机系统的任意端口。若您之后想从其他计算机访问此端口,则须开启此端口以供其他设备连接:

nvidia-docker run -p 8888:8888 -it --rm -v $(pwd):/results

nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl

在本例中,我们可以启动浏览器,并使用地址为 localhost:8888 的网页浏览器访问服务器

对于正在运行的 Jupyter 服务器,其密码为“bigdft”。我们已在 /ContainerXP/H2O-Polarizability.ipynb 中提供此笔记本示例

如需查看更多文档,请单击此处

4.使用 MPI、OpenMPI 或 GPU 运行 BigDFT

容器中安装有 MVAPICH-GDR 2.3,可通过 mpirun -np 进程启动。

默认情况下,OpenMP 处于激活状态并可使用主机系统的所有核心。如要使用消息传递接口 (MPI),您需将 OMP_NUM_THREADS 设置为较低值(例如 ncores/nprocesses)。

若在 32 核心的节点上使用 4 进程和 8 线程 OpenMP 直接运行,则命令行如下:

nvidia-docker run -it --rm -e OMP_NUM_THREADS=8 -v

$(pwd):/results -w /results nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl

mpirun -np 4 bigdft

如果节点上有多块 GPU 可用,则每个 MPI 进程均会尝试使用不同的 GPU,并会在进程数大于 GPU 数时循环使用此 GPU(也建议您使用 docker 运行命令中的 --ipc=host 选项)。PBE0 计算需使用可感知 NVIDIA® CUDA™ 的 MPI,因此您必须将 MV2_USE_CUDA 设为 1。由于该设置在未使用 GPU 的情况下会降低运行速度,因此会被默认禁用。

若在 32 核心的节点上使用 4 进程多 GPU 运行,则命令行如下:

nvidia-docker run -it --rm --ipc=host -e MV2_USE_CUDA=1 -e OMP_NUM_THREADS=8 -v

$(pwd):/results -w /results nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl

mpirun -np 4 bigdft

测试设置

BigDFT 容器包含输入文件,可通过 GPU 加速或 CPU 测试软件性能:

nvidia-docker run -it --rm -v $(pwd):/results

nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl bash

启动容器后,您将位于 /directory。之后您可以切换至 /docker/FeHyb/GPU 找到输入文件(input.yaml、posinp.xyz 和 psppar.Fe),并运行以下测试:

cd /ContainerXP/FeHyb/GPU

bigdft

cp log.yaml /results/log_gpu.yaml

cp time.yaml /results/time_gpu.yaml

cd /ContainerXP/FeHyb/NOGPU

bigdft

cp log.yaml /results/log_cpu.yaml

cp time.yaml /results/time_cpu.yaml

两次运行结果表明,该软件在 GPU 上的性能表现较之 CPU 已有了巨大提升。

您也可执行其他测试,以充分利用主机系统上的资源。我们已在 /docker/H2O_32 文件夹提供了更大的数据集。

如要验证输出结果是否准确,您可将 log.yaml 文件与 CPU 版测试文件夹中的 log.ref.yaml 文件进行对比。如要进行简单对比,请执行以下命令:

python /usr/local/bigdft/lib/python2.7/site-packages/fldiff_yaml.py -d log.yaml -r

./log.ref.yaml -t ./tols-BigDFT.yaml

正确的输出结果应如下所示:

Test succeeded: True

推荐的系统配置

BigDFT 容器已经过优化和可靠性测试,可在由 NVIDIA Pascal™ 和 NVIDIA Volta 提供支持并安装 CUDA 9 或更新版本的系统上运行。可视化分子动力学 (VMD) 和 NVIDIA GPU Cloud 提供的所有 HPC 应用程序容器均可在以下系统上运行:

  • 工作站:由 NVIDIA Titan V 和 x86 CPU 提供支持
  • NVIDIA® DGX™ 系统
  • 由 Pascal 或 Volta GPU、CUDA 9 和 x86 CPU 提供支持的 HPC 集群
  • 云端(AWS、Google 云端平台及其他平台

通过 NVIDIA GPU Cloud 访问
经 GPU 加速的应用程序容器。