猿代码 — 科研/AI模型/高性能计算
0

GPU,CPU对比,Vasp

摘要: 1)到目前为止,我只执行了单节点基准测试,所以重点是比较仅使用CPU与CPU+GPU运行时的速度。K40节点有2个GPU和2个CPU插槽,每个插槽连接1个GPU,因此比较结果是16个内核与(任意数量的内核)和2个GPU。通常,我发现 ...
1)
到目前为止,我只执行了单节点基准测试,所以重点是比较仅使用CPU与CPU+GPU运行时的速度。K40节点有2个GPU和2个CPU插槽,每个插槽连接1个GPU,因此比较结果是16个内核与(任意数量的内核)和2个GPU。通常,我发现使用8个MPI列(即Triolise节点上16个核中的8个)使用MPS共享2个GPU是常规DFT作业的最快组合。



我使用GaAsBi 256原子(9个k点)的旧测试用例测试了常规DFT,在这个测试用例上,我收集了Triolite(英特尔“Sandy Bridge”)和Beskow(英特尔“Haswell”的Cray XC40)的大量数据。如上所述,由于内存限制,这接近于我可以在具有2个GPU的单个计算节点上运行的最大作业。使用CPU在1个节点上的参考运行在7546秒内完成。它有8个内核和2个K40 GPU,运行速度非常快,在1242秒内完成,大约快了6倍。在这里,我使用了超频GPU(875Mhz),所以在基频下它大约慢10%。作为参考,在8个计算节点不使用GPU的情况下,GaAsBi-256作业在Triolise上只需900秒即可完成,在Beskow上只需400秒即可完成。



有趣的是,GPU-VASP在Davidson算法上特别强大。ALGO=fast在CPU模式下运行速度快50%,但与GPU相比,差异非常小,所以如果你依靠ALGO=normal来获得收敛,这是个好消息。如果计算ALGO=normal的加速,则速度会更高,大约快8倍。



NSIM参数现在对性能非常重要。理论上,您设置的NSIM值越高,GPU计算运行得越快,缺点是GPU上的内存消耗也会随着NSIM的增加而增加。开发人员的建议是,您应该尽可能多地增加NSIM,直到内存耗尽。这可能需要一些实验,在这些实验中,您必须启动VASP作业,并使用nvidia-smi-l命令遵循内存使用。我通常不得不停在16-32的NSIM值。



在单个节点上封装这样一个相对较大的单元(256个原子)可能是GPU版本的典型情况,因为您需要将足够大的工作块卸载到GPU上,以解决在主存储器和GPU之间来回发送数据的开销。作为一个例子,当功太少而无法并行化时会发生什么,我们可以只考虑伽马点中的128原子Li2FeSiO4测试用例。我可以在大约260秒内使用VASP的gamma点版本在CPU节点上运行该程序。GPU版本没有伽马点优化,即使使用2个K40s GPU,时钟也只需185秒,有效改进率仅为40%。



当然,有人可能会说这是一个苹果对桔子的比较,你应该与CPU版本较慢的VASP NGZhalf运行时(428秒或GPU运行速度的一半)进行比较,但今天CPU版本中提供了仅伽马点的优化,我个人的观点是,伽马点版本中实施的对称性会产生更准确的结果,即使它们可能不同。

2)
合DFT计算的性能

结合Hartree-Fock的混合DFT计算,可能在HSE06中进行了筛选,现在正变得越来越接近标准,因为常规DFT不再被认为是最先进的。部分原因是有更多的计算资源可用,因为HSE06计算的运行时间很容易延长100倍。加速混合计算是GPU加速VASP的最初动机之一,所以我很想测试一下。不幸的是,在早期测试版中,我遇到了很多内存泄漏和崩溃的问题,所以我很难运行任何有趣的测试用例。然而,最终,这些错误在上一个测试版中得到了解决,使我能够开始测试HSE06计算,但这里的发现目前应被视为初步的。



在我的测试中,我发现4-8个MPI等级对于混合DFT是最优的。混合作业能够与更少的CPU内核相处的原因是Hartree-Fock部分是占主导地位的部分,它完全在GPU上运行,因此,通过让更少的MPI级别竞争GPU资源,应该会有一些效率提升。对于真正重要的工作,Maxwell Hutchinson告诉我,每个MPI级别有一个GPU应该是最好的运行方式,但我还无法证实这一点。



设置NSIM在这里更为重要,建议如下

3)
众所周知,在CPU和GPU计算之间进行公平的比较是非常具有挑战性的。你得出的结论在很大程度上取决于你问的问题和你在衡量什么。整个问题也因为GPU移植过程中对代码所做的许多改进都可以反向移植到CPU版本而变得复杂,因此将代码移植到GPU的过程本身可能会矛盾地削弱在GPU上运行的(经济)情况,因为相关联的增益可能使CPU性能刚好好到足以与GPU竞争。



从性价比的角度来看,应该记住,配备GPU的节点可能要贵得多,并且在运行时使用更多的功率。在HPC资源的大规模采购中,最终定价总是要经过一些协商和折扣,但如果看一下标价,一个有2个K40 GPU的标准2插槽计算节点的成本可能是没有GPU的至少2-3倍。还必须考虑这样的GPU节点可能并不总是运行GPU加速的代码和/或由于缺乏适当的作业而在某一部分时间处于空闲状态。因此,在HPC集群中的GPU分区上运行的平均GPU工作负载必须运行得更快,以弥补更高的成本。在实践中,在定价方面,2-3倍的盈亏平衡加速可能不足以使其在经济上可行,相反,我们考虑的可能是4-6倍。当然,好消息是,某些VASP工作负载(如大细胞上的正常DFT和分子动力学)确实满足这一要求。



另一个不应忘记的观点是,使用GPU可以大大提高运行VASP的单个工作站的计算能力。这可能与“大”HPC无关,但它显著提高了没有HPC访问权限的VASP用户可以轻松获得的总计算能力和作业容量。从维护和系统管理的角度来看,从单个工作站迁移到全面的多节点集群有一个巨大的飞跃。集群需要机架空间、队列系统、某种共享存储等。典型的科学家无法轻松建立这样的系统。昨天的2插槽工作站可能不足以进行最先进的VASP计算,但假设GPU平均提高了4倍,它可能适用于某些研究级别的计算。



从用户和科学的角度来看,GPU版本的VASP似乎已经准备好被更广泛地采用。它工作并且能够再现常规VASP的输出。运行它需要对输入文件中的设置进行一些更改,不幸的是,当在CPU上运行时,这可能会使作业不理想。但一直以来,您都需要调整INCAR参数,以使并行运行发挥出最佳效果,所以这并不是什么新鲜事。



总之,如果有CUDA支持的VASP的可用性可能是采用Nvidia GPU的分水岭事件,我也不会感到惊讶,因为VASP对世界各地的许多HPC中心来说是一个巨大的工作量。例如,对我们来说,这无疑让我们考虑下一代集群的GPU,它最终将取代Triolite。


NSIM=NBANDS/(2*芯)

因此,为了充分利用GPU,您需要有很多频带。



这里的测试案例是具有63个原子、192个带和4个k点的MgO电池。这些都是相当繁重的计算,所以我不得不对单个SCF迭代进行计时,以快速获得一些结果。仅使用16个CPU核,使用ALGO=所有一个SCF迭代需要大约900秒。当切换到4核和2个GPU:s(每个GPU 2核)时,我可以将一次SCF迭代的时间减少到640秒左右,这更快,但并没有显著的改进(40-50%)。但请注意,这里没有使用相同的SCF算法,因此收敛所需的实际迭代次数可能不同,这会影响总运行时间。实际上,我以前没有测试过使用ALGO=normal运行HSE06计算,因为这不是标准的运行方式,所以我现在不能说是否期望使用ALGO=normal更快地收敛。正如我所理解的,潜在的问题是,像这样的工作会启动许多小型CUDA内核,尽管它们有很多,但它们不能有效地使GPU饱和。对于较大的单元,情况应该会更好,但我还无法运行这些测试,因为我只有几个节点可以玩。




说点什么...

已有0条评论

最新评论...

本文作者
2024-2-16 22:45
  • 0
    粉丝
  • 512
    阅读
  • 0
    回复
资讯幻灯片
热门评论
热门专题
排行榜
Copyright   ©2015-2023   猿代码-超算人才智造局 高性能计算|并行计算|人工智能      ( 京ICP备2021026424号-2 )