■原文 More bang for your buck: Improved use of GPU nodes for GROMACS 2018, DOI: 10.1002/jcc.26011[1]■翻译: 刘玉杰; 校对: 李继存
摘要
我们确定了在Linux计算集群上, GROMACS 2018程序运行分子动力学(MD)模拟的最佳硬件. 因此, 我们在各种计算节点上对GROMACS性能进行了基准测试, 并将其与节点成本联系起来, 其中的成本可能也包括能源和冷却成本. 与我们早先使用GROMACS 4.6在2014年的硬件上进行的调查一致, 消费级GPU节点的性价比远高于CPU节点. 然而, 在GROMACS 2018中, CPU到GPU处理能力的最佳平衡更多地转向了GPU. 因此, 与针对旧GROMACS版本优化的节点相比, 针对GROMACS 2018及更高版本进行优化的节点具有更高的性价比. 而且, 向GPU处理的转移使得使用新GPU升级旧节点变得更便宜, 得到的性能与相近的全新硬件基本相同.
方法
本研究的主要部分使用了与2014年调查相同的两个基准输入文件(表1), 以便于新旧硬件和软件之间的比较.
软件环境
对GROMACS进行基准评估时, 使用了每个版本的最新版. 其他的所有基准测试均使用GROMACS 2018进行, 编译时将针对Intel CPU启用了AVX2_256 SIMD指令, 针对AMD CPU启用了AVX2_128 SIMD指令(表4除外, 其中使用了AVX_256以反映硬件功能). 此外, 由于4.6版本的SIMD内核不支持AVX2_256指令集, 我们使用了AVX_256并添加了 -mavx2 -mfma
编译器优化标志以便生成AVX2指令.
U | 处理器 Intel | 插槽×核 | 主频 (GHz) | 挂载GPU | MEM (ns/d) | RIB (ns/d) | ≈净价 (€) | MEM性价比 (ns/d/122 €) | RIB性价比 (ns/d/ 1530 €) |
使用旧GPU的现存节点 | |||||||||
1 | E3‐1270v2 | 1×4 | 3.5 | 680 | 26.9* | 1.6 | 0 | ‐ | ‐ |
升级GPU | |||||||||
1 | E3‐1270v2 | 1×4 | 3.5 | 2080 | 91.7 | 4 | 640 | 12.4 | 5.7 |
使用旧GPU的现存节点 | |||||||||
2 | E5‐2670v2×2 | 2×10 | 2.5 | 780Ti×2 | 104.8* | 6.7 | 0 | ‐ | ‐ |
升级GPU | |||||||||
2 | E5‐2670v2×2 | 2×10 | 2.5 | 1080×2 | 163.4 | 7.8 | 840 | 8.5 | 1.9 |
2 | E5‐2670v2×2 | 2×10 | 2.5 | 1080Ti×2 | 208.4 | 10.2 | 1220 | 10.4 | 4.3 |
2 | E5‐2670v2×2 | 2×10 | 2.5 | 1080Ti×4 | 361.2 | 17.9 | 2440 | 12.8 | 7 |
使用旧GPU的现存节点 | |||||||||
2 | E5‐2680v2×2 | 2×10 | 2.8 | K20Xm×2 | 83.2* | 5 | 0 | ‐ | ‐ |
升级GPU | |||||||||
2 | E5‐2680v2×2 | 2×10 | 2.8 | 1080Ti×2 | 212.7 | 10.1 | 1220 | 12.9 | 6.4 |
2 | E5‐2680v2×2 | 2×10 | 2.8 | 2080×2 | 237.7 | 11.5 | 1280 | 14.7 | 7.8 |
2 | E5‐2680v2×2 | 2×10 | 2.8 | 2080×4 | 409.6 | 20.3 | 2560 | 15.6 | 9.2 |
在没有或只有一个GPU的节点上, 使用了GROMACS的内置线程MPI库, 而在多GPU节点上使用了Intel MPI 2017. OpenMP支持始终开启. 此外, GROMACS还链接到便携式硬件局部性库hwloc[23]1.11版. 在没有GPU的节点上, PME所需的FFT在CPU上计算. 因此, 我们使用使用了FFTW 3.3.7[24], 编译时GCC 4.8启用了选项 --enable-sse2 --enable-avx --enable-avx2
, 这些推荐选项可以获得GROMACS的最佳性能. 在GPU节点上, CUDA cuFFT自动与PME卸载一起使用.
所有硬件都在相同的软件环境中进行测试, 使用Scientific Linux 7.4作为操作系统公共映像启动节点(Gold6148/V100节点除外, 它运行SLES 12p3, 进行GROMACS评估基准测试时使用了Ubuntu16.04服务器版).
使用GCC 5.4和CUDA 8.0或GCC 6.4和CUDA 9.1编译的GROMACS用于主要研究, 而在GROMACS评估部分使用GCC 7.3和CUDA 10进行编译.
编译器选择和CUDA版本的影响
为了评估所选GCC/CUDA组合对性能的影响, 我们在完全相同硬件上运行了MEM基准测试, 但同时使用了两种CUDA/GCC组合. 在具有两个E5-2670v2 CPU和两个GTX 1080Ti GPU的节点上, 对我们的MEM基准测试, 在GCC 6.4/CUDA9.1上比GCC 5.4/CUDA8快3.5%(10次运行平均). 在配备GTX 1070的E3-1270v2 CPU上, 大约快4%, 而在配备E5-1650v4和GTX 980的工作站上大约快1.5%. 为了在比较硬件时校正这种影响, 使用较旧的GCC/CUDA组合所测量的性能会乘以1.025.
使用CUDA 9.1和CUDA 10.0之间的性能差异是以类似的方式确定的, 结果小于0.5%, 我们没有校正这个小的影响.
GROMACS性能评估基准
对于GROMACS评估基准测试(图7和8), 使用了专门为评估不同代码版本的性能而设计的数据收集协议. 所有运行所用的GPU都连接到所用CPU的PCI总线(或者, 在图8中当使用两个CPU时, 连接到运行主线程所在的第一个CPU). 每个核心使用两个CPU线程, 通过附着线程的HyperThreading进行性能分析.
图7: GPU节点上GROMACS 4.6-2018版的性能的演变. 在所有实例中, 短程非键相互作用都卸载到GPU, 对于2018版, 也可以将PME网格计算部分卸载到GPU(最顶部的黑条). Tesla V100和GTX 1080 GPU挂载到一个带有两个Xeon E5-2620v4处理器(2×8核)的节点上. Tesla K80 GPU挂载到一个带有两个Xeon E5-2620v3处理器(2×6核)的节点上.
图8: GROMACS 2018性能与每个GPU使用CPU核心的关系. GTX 1080, RTX 2080和Tesla V100卡安装在带有Xeon E5-2620v4处理器(2×8核)的服务器节点上, 而Tesla K80安装在带有两个E5-2620v3处理器(2×6核)的节点上. 实线表示PME卸载到GPU时的性能, 而带有较小符号的虚线表示使用CPU计算PME时的性能(水平轴给出核心数目).
为了评估每个GPU所用CPU核心数对性能的影响(图8), 我们使用的CPU仅在核心数上有所不同, 其他情况完全相同. 我们使用单个CPU模型来模拟这种情况, 也就是运行时只使用CPU可用核心的一部分. 然而, 对于当前的CPU, 当只使用一部分核心时, 会增加工作核心的时钟频率. 这样进行比较就不公平了. 因此, 我们要确保未运行基准测试的核心同样保持忙碌, 这是通过在这些核心上同时运行仅使用CPU的GROMACS(使用与基准测试相同的输入体系)达到的. 这样所有核心都使用大致相同的时钟频率, 而与基准测试运行的核心数无关[^1]. 评估时, GROMACS基准测试会重复运行三次, 取平均值.
^1 注意, 使用这种方法, CPU上的两个GROMACS运行会共享最后一级缓存. 因此, 所得测量结果与关掉不使用的CPU, 并将所有运行CPU的主频固定为同一个值的情况下所得的结果并不完全等价. 后一种做法提供了具有少数核心, 不合实际的缓存量情况下的基准.
最后, 除测试之外的所有编译和运行设置都保留其默认值或自动调整值(包括配对搜索频率和CPU-GPU负载均衡).
测定节点的性能
可以通过各种方式评估不同型号节点的性能. 而且, 不同的基准测试会给出不同的硬件排名. 我们对基准测试流程和由此得到的硬件排名的要求是: (1) 基准测试应该与预期的硬件使用密切相关; (2) 整体计算能力(例如, 将两个节点的硬件组件组合到一个节点中), 这可以节省价格和机架空间, 不应该受到限制.
我们提出第二个要求的动机如下: 假设你将 (a) 两个单插槽节点(各有一个CPU X和一个GPU Y)与 (b) 一个双插槽节点(带有两个CPU X, 两个GPU Y)进行比较, 预计(a)和(b)的总体性能是相同的, 因为两个独立的模拟总是可以在(b)上运行.
符合这两个要求的基准测试流程是: 在具有N个GPU的节点上并行运行N个模拟, 每个使用1/N的可用CPU核心或硬件线程, 并报告整体性能, 也就是说单个模拟的性能之和. 使用GROMACS的-multidir
命令行参数很容易完成这个流程. 因为在初始阶段, 负载均衡机制尚未找到其最佳状态, 因此, 对总共ntot个时间步的性能测量, 我们会排除前n个时间步. 对于MEM和VES基准测试, 我们使用n=15k, ntot=20k, 而对于RIB和BIG基准测试, 我们使用n=8k, ntot=10k.
在只有一个GPU的单插槽节点上, 使用与可用核心(或硬件线程)一样多的OpenMP线程的单个进程通常是最快的, 因为可以避免MPI和区域分解引入的开销[16, 17]. 因此, 先前的调查和本研究的单GPU基准测试是可以进行比较的, 而在多GPU节点上, 新的基准测试流程预计会得到比2014年的单一模拟性能更高的整体性能.
功耗测量
我们使用Linux程序ipmi-sensors 1.5.7版(http://www. gnu. org/software/freeipmi/)和ipmitool 1.8.17版(https://github. com/ipmitool/ipmitool)测量节点的功耗. 在某些节点上, 例如在不支持通过ipmi读取功率的Ryzen工作站上, 我们使用了VOLTCRAFT Power Monitor Pro. 在所有情况下, 我们计算了60个单独的功率数据的平均值, 功率数据之间的时间差为1秒. 在测量功率期间, 使用相同的设置运行RIB基准测试以便获得性能数据.
使用Martini进行粗粒化模拟
为了检查全原子基准测试的结果可以在多大程度上用于粗粒化模拟, 我们增加了使用Martini[25, 26]力场的基准测试. 对于Martini力场, 粒子密度低于全原子力场的, 静电相互作用通常不使用PME计算. 因此, 尚不清楚粗粒化模拟的最佳硬件是否与原子模拟的相同.
为了便于与全原子系统进行比较, 我们选择了粒子数目相近的粗粒化系统, 见表1. 小的Martini基准系统 VES 是水中的POPE囊泡, 总共有72,076个粒子, 尺寸与MEM原子基准系统相当. 它是www.cgmartini.nl提供下载的可用示例之一[21]. 大的Martini基准系统 BIG 是根据哺乳动细胞质膜示例体系创建的[27]. 为了得到最终的大基准系统, 我们用gmx genconf
在原始膜的x和y方向进行2×2的扩展, 得到了具有2,094,812个粒子的最终膜体系, 因此其尺寸与RIB原子基准系统相当.
根据使用GPU进行Martini模拟的建议, 我们使用了New-RF模拟参数设置[28, 29]. GROMACS自2018版起, 引入了双配对列表算法(见图5C), 我们将邻区搜索间隔从20(New-RF参数设置所用)增加到50步(内部配对列表存在周期为4步)以提高性能.
参考
[1]
More bang for your buck: Improved use of GPU nodes for GROMACS 2018, DOI: 10.1002/jcc.26011: https://onlinelibrary.wiley.com/doi/full/10.1002/jcc.26011