图分析基准测试的冒险之旅
以全面、客观、可重复的方式衡量性能至关重要。
随着图分析近期受到越来越多的关注,以全面、客观、可重复的方式衡量其性能变得越来越重要。我在另一篇博文中对此进行了介绍,并推荐使用现成的基准测试套件,例如来自加州大学伯克利分校的 GAP Benchmark Suite*。当然,还有其他的图基准测试,例如 LDBC Graphalytics*,但它们在易用性方面无法与 GAP 媲美。GAP 和 Graphalytics 之间有显著的重叠,但后者是一个工业级基准测试,需要特殊的软件配置。
就我个人而言,我认为基准测试很枯燥。但当需要性能数据来做决定时,它是不可避免的。显而易见,数据必须准确。但它也必须与手头的决定相关。我使用的特定基准测试与其预期用途保持一致至关重要。这就是为什么我在图 1 中看到的性能比较让我百思不得其解。它比较了 RAPIDS cuGraph* 和 HiBench* 的 PageRank 性能。后者是由我的一些英特尔同事开发的大数据基准测试,用于衡量广泛的分析功能——不仅仅是 PageRank。图 1 中的两个测试都使用了相同的合成图,只有 5000 万个顶点和 20 亿条边。HiBench 的测量使用了 Apache Spark*,但在我看来,Spark 集群是用于大数据的(即 TB 级别)。一个 20 亿条边的图(压缩稀疏格式约 8GB)几乎不属于大数据,因为我可以将其加载到我的笔记本电脑内存中。当数据集可以轻松地装入单台系统的内存时,为什么还要使用 Spark 集群呢?
我让 HiBench 团队的同事生成了一个包含 5000 万个顶点和 20 亿条边的图,以便我进行自己的性能测试。使用 GAP 基准测试包中的 PageRank 参考实现,在此图上的端到端计算仅用了 12 秒,在单台双路 Intel® Xeon® 处理器系统上运行 48 个线程。1 这比图 1 报告的性能好得多,而且我不需要三块昂贵的 NVIDIA V100* GPU 或 Spark 集群就能达到这个效果。
很难说这是否与图 1 中 cuGraph 的性能进行了“苹果对苹果”的比较。我使用了默认的 GAP 收敛容差,并将迭代次数限制为三次,因为这是 HiBench 的默认设置。然而,由于基准测试参数没有报告,无法得知 cuGraph 测试是否使用了相同的参数。
透明度对于生成可信且可重复的基准测试至关重要。例如,在 PageRank 中,收敛容差和最大迭代次数会显著影响运行时间,因此这些参数应该清楚说明。这是使用现成的基准测试(如 GAP)来衡量图分析性能的最大优势之一。如果有人报告 GAP 中 PageRank 测试的结果,我根据定义就知道阻尼因子是 0.85,容差是 0.0001,最大迭代次数是 1000。我希望任何偏离默认参数的情况都会得到适当的说明。
HiBench 团队也对图 1 感到好奇,因为该图的原始标题是“cuGraph PageRank vs Spark GraphX([20 亿] 条边,在不同的 n1-standard-8 [Google Cloud Platform] 节点上(值越低越好)”。如上所述,HiBench 中的 PageRank 是使用 MLLib 实现的,而不是 GraphX。因此,出于实验目的,HiBench 团队使用 GraphX 实现 PageRank 来比较其性能与原始实现的性能。
不幸的是,很难知道 n1-standard-8 节点使用了什么处理器,但我们知道每个节点有 8 个 vCPU(vCPU 是单个硬件超线程)和 30GB 内存。(这意味着图 1 中的 100 节点测试为仅需要几 GB 的图使用了惊人的 3TB 内存!)这,加上许多其他遗漏,使得精确比较成为不可能。但 HiBench 团队还是在一个可用的 Spark 集群(一个主节点加四个工作节点,总共 440 个 vCPU)上进行了近似比较。2 对于相同大小的图(5000 万个顶点,20 亿条边),MLLib PageRank 花费了 461 秒,而 GraphX PageRank 只花费了 157 秒。最接近的比较是图 1 中的 50 节点(400 个 vCPU)Spark 集群。虽然我不赞成将 Spark 用于如此小的问题,但 HiBench 团队的结果比图 1 报告的结果要好得多。
我们现在又回到了原点,这与本文的开头发言不谋而合。以全面、客观和可重复的方式衡量性能至关重要。这就是为什么我们推荐使用现成的图分析基准测试,例如 GAP Benchmark Suite。如我在关于此主题的上一篇博文中所述,图分析领域广阔而多样。没有一个基准测试可以涵盖计算领域的每一个方面,甚至 GAP 也不行。例如,GAP 在社区检测方面的表现不如我所愿。(有人可能会争辩说 GAP 中的连通分量基准测试足够接近,因为其计算模式与许多社区检测算法重叠。)如果这对我的决策需求很重要,我可以切换到 Graphalytics 基准测试(它确实涵盖了社区检测),或者我可以提议更新 GAP。这两种选择都比创建一个没有社区支持或历史数据的新基准测试要好。
1处理器:Intel® Xeon® Gold 6252(2.1 GHz,24 核),超线程已启用(48 个虚拟核心);内存:384 GB Micron DDR4-2666;操作系统:Ubuntu Linux release 4.15.0-29,kernel 31.x86_64;软件:GAP Benchmark Suite(2019 年 9 月下载并运行)。
2处理器:Intel® Xeon® Platinum 8180(2.5 GHz,28 核),超线程已启用(56 个虚拟核心);内存:384 GB Micron DDR4-2666;网络:Intel® 82599ES 10 千兆位 SFI/SFP+;操作系统:CentOS Linux release 7.6.1810,kernel v3.10.0-862.el7.x86_64;软件:Oracle Java JDK(build 1.8.0_65),Hadoop 2.7.0,Spark 2.4.3 和 HiBench 7.0。
声明与免责条款
性能结果基于英特尔公司截至 2019 年 9 月的测试,可能无法反映所有公开的安全更新。有关详细信息,请参阅配置披露。没有任何产品或组件可以绝对安全。有关性能和基准测试结果的更完整信息,请访问 www.intel.com/benchmarks。
描述的成本降低情景旨在说明在特定情况下和配置下,给定的基于英特尔的产品如何影响未来成本并实现成本节约。具体情况因人而异。英特尔不保证任何成本或成本的降低。