AMD MI50 GPGPU用于科学和ML应用的初步评估

2020-10-18 07:13:19

跳到内容。随着Advanced Micro Devices(AMD)和Intel的GPGPU瞄准未来的亿级系统,高性能计算GPGPU市场出现了竞争。新的AMD RADEON本能MI50暗示了AMD未来图形处理器的能力。

这项研究首先考察了军情五处在特色科学和机器学习应用方面的表现。

所有系统都使用单根、双插槽SuperMicro SYS-4029GP-TRT2系统。系统详细信息、图表和基准测试结果可在海报中找到。

我们运行了两个案例研究,它们代表了我们实验室中运行的常见工作负载:(A)GPU优化的旋转爆震发动机模拟,以及(B)计算量大的深度学习培训任务。实施和方法详细信息如下所述。

我们的机器学习基准是使用TensorFlow 1.15和TensorFlow 1.x CNN基准运行的。虽然TensorFlow基准不再针对TensorFlow 2.x进行更新,但它们已经针对TensorFlow 1.15进行了优化,这使其成为比较GPGPU性能的有用且可复制的任务。

因为我们的测试在单个节点上运行,所以我们使用默认的TensorFlow Distributed MirrorStrategy和NCCL/RCCL All-Reduce算法。

基准任务是使用动量优化器在合成的ImageNet数据集上训练ResNet50-v1。这项计算繁重的任务是许多其他深度计算机视觉任务的特征,它具有密集的图像输入和深度、前馈、主要是卷积的体系结构,可以很好地转换为GPGPU。

我们使用面向高性能计算的容器平台奇点(3.5.2版)来管理我们的环境和依赖关系,需要奇点ROCM3.5来支持≥。

所有报告的结果都是使用Docker Hub上提供的官方TensorFlow和ROCM图像收集的。可以通过以下方式拉取奇点图像:

#在容器环境中使用NVIDIA GPU访问启动shell--NV$PATH_TO_SIMG#使用ROCM GPU访问$Singulicity exec--ROCM$PATH_TO_SIMG python3 run.py在容器环境中运行python脚本。

迭代包括通过网络的前向和向后遍历。我们使用GPU内存可以容纳的最大2次方批处理大小:对于GTX和RTX系统(11 GB)为64个图像/设备,对于V100和MI50系统(32 GB)为256个图像/设备。我们运行了足够的热身迭代以使训练速度保持稳定(NVIDIA硬件为5步,AMD硬件为100步)。最终的训练吞吐量是3次运行的中值,每次500步。

以下脚本将在1-8个GPU上运行ResNet50培训基准。根据您的特定系统填写顶部的变量(CONTAINER_PATH、GPU_FLAG和BATCH_SIZE)。

CONTAINER_PATH=...。GPU_FLAG=...#--NV或--ROCM BATCH_SIZE=...#64用于GTX或RTX(11 GB),256用于mi50或V100(32 GB)#在1-8个GPU上针对{1..8}中的n运行基准测试;执行奇点执行$GPU_FLAG$CONTAINER_PATH\python TF_CNN_Benchmarks.py--num_GPU$n--BATCH_SIZE$BATCH_SIZE\--VARIAL_UPDATE REPLICATED--all_duce_spec NCCL\--model resnet50--data_name ImageNet--优化器动量\--无失真--梯度_重新打包1--ml_perf完成。

NCCL_DEBUG=INFO将打印出用于All-Reduce操作的GPU-GPU互连和NCCL环拓扑,这对于验证很有用。

NCCL_P2P_LEVEL通过设置最大允许距离来控制何时使用GPU到GPU的直接传输。值为0(或LOC)将禁用所有P2P通信。

TF_XLA_FLAGS=--TF_XLA_AUTO_JIT=2将强制XLA编译,优化给定硬件的图形。当使用带有张量内核的GPU时,这在混合精度模式下尤其有效。

--trace_file=trace.json将保存培训过程的tfprof跟踪,它是前10步的平均值。可以在Chrome浏览器中的Chrome://Tracking查看结果。这对于调试分布式性能问题很有用。

--USE_FP16将在混合精度模式下运行培训。这将在支持的硬件上使用NVIDIA张量内核。

在评估HPC系统时,每瓦性能是一个极其重要的指标。这通常以FLOPS/W(每秒每瓦浮点运算数)为单位,使用LINPACK这样的基准测试。在本研究中,我们使用一个实用的机器学习模拟:每秒每瓦训练图像。

非GPU:运行平均功率限制(RAPL)是英特尔处理器的一项功能,可提供不同物理域的能量和功耗信息。平均功耗是使用PowerCap界面收集的:我们在给定工作负载的1分钟间隔内每秒查询一次energy_uj,计算每个时间步对的平均功耗。功耗数据是通过Package-0(核心)、Package-1(非核)和DRAM电源平面收集的。这不包括单独记录的GPU功耗。

我们使用从powerstat工具修改的代码收集数据,其他用于访问RAPL指标的实用程序包括perf、turbostat或powertop。

#for NVIDIAtimeout 60 nvidia-smi--query-gpu=timeamp,name,index,power.raw--format=CSV--loop=1-f$logfile#for ROCmfor i in{1..60};do ROCM-SMI-P--json&>;>;$logfile;睡眠1;完成。

我们使用的实用程序脚本可以在这里找到。为了收集不同模式的电力信息,我们按照培训吞吐量中的描述启动了培训运行,等到培训的第10次迭代,然后手动启动功耗监控工具。

这张海报于2020年6月在ISC High Performance大会上公布。要引用我们的发现,请使用:

@misc{obenschain20,Author=#34;Keith Obenschain和Douglas Schwer and Alisha Sharma&34;,title=#34;AMD MI50 GPGPU用于科学和机器学习应用程序的初步评估,年份=#34;2020";,如何发布在ISC High Performance 2020";上发布的研究海报