立即开始阅读此《GPU-Ready Apps Guide》(GPU-Ready 应用程序指南)。
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 容器后,您可选择以下两种方式来运行。
如要从命令行界面 (CLI) 运行 BigDFT 容器,您需在主机系统的当前目录中输入文件。然后您可以发出以下命令,执行此命令将运行 BigDFT,并可将当前工作目录作为“/results”在容器内进行访问:
nvidia-docker run -it --rm -v $(pwd):/results -w /results
nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl 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,以便将其保存至主机系统的当前文件夹。
容器的默认命令能够启动容器内的 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 中提供此笔记本示例
如需查看更多文档,请单击此处。
容器中安装有 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
BigDFT 容器包含输入文件,可通过 GPU 加速或 CPU 测试软件性能:
cd /ContainerXP/FeHyb/GPU
cp log.yaml /results/log_gpu.yaml
cp time.yaml /results/time_gpu.yaml
cd /ContainerXP/FeHyb/NOGPU
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 应用程序容器均可在以下系统上运行: