订阅业界RSS CSDN首页> 业界

面向高性能大数据计算的 Harp-DAAL

发表于2019-03-19 14:57| 来源intel| 作者intel

摘要:同时提升效率和性能的关键 印第安纳大学信息、计算与工程学院智能系统工程系 Judy Qiu @IntelDevTools | 没有评分 打分 大规模数据分析正在革新众多商业和科学领域。易于使用的可扩展并行技术对于处理大数据和获得有意义的深刻见解至关重要。本文介绍了一种名为 Harp-DAAL 的全新高性能计算 (HPC) - 云融合框...

同时提升效率和性能的关键

印第安纳大学信息、计算与工程学院智能系统工程系 Judy Qiu

@IntelDevTools|没有评分打分

大规模数据分析正在革新众多商业和科学领域。易于使用的可扩展并行技术对于处理大数据和获得有意义的深刻见解至关重要。本文介绍了一种名为 Harp-DAAL 的全新高性能计算 (HPC) - 云融合框架,并展示了大数据 (Hadoop*) HPC 技术的结合如何同时提升效率和性能。

Harp* 是一种基于 Hadoop 的分布式框架,用于编排节点同步1Harp 英特尔® 至强®至强融核™处理器架构上使用英特尔® 数据分析加速库(英特尔® DAAL2作为其高度优化的内核。这样,大数据工具的高级 API 可与针对 HPC 平台优化的节点内精细并行化相结合。

我们使用 K 均值聚类(用于图像聚类的计算密集型算法)详细介绍该框架。我们还会讨论其他 3 种大数据算法的性能,以展示 Harp-DAAL 的广泛适用性:

1.    通过颜色代码进行子图计数

2.    矩阵分解

3.    潜在狄利克雷分布

这些算法具有一些共同特征,如负载不平衡、不规则结构和通信问题,这些特征将带来性能方面的挑战。

1 中的类别是将数据密集型计算分为 5 个模型,然后映射到 5 种不同的系统架构。首先是 Sequential,然后是与 MapReduce 3 种形式完全对应的集中式批处理架构:Map-OnlyMapReduce 和迭代 MapReduce。第 5 类是传统的消息传递接口 (MPI) 模型。

Harp Hadoop 用户提供了全部 5 种数据密集型计算支持,涵盖范围从自然并行化到机器学习和模拟。它将 Hadoop 的适用性(使用 Harp 插件)扩展至更多大数据应用类别,特别是复杂的数据分析,如机器学习和图形分析。该设计包括一个采用原生内核(搭载英特尔® DAAL)的模块化软件堆栈,以有效利用面向机器学习和数据分析应用的纵向扩展服务器。Harp-DAAL 展示了模拟以及大数据如何使用通用的编程环境,其运行时基于丰富的集合运算和库。

1 - 面向大规模高性能大数据分析的云-HPC 可互操作软件

连接 Harp 和英特尔® DAAL

英特尔® DAAL 不仅提供原生 C/C++ API,还提供了更高级的编程语言接口,如 Java* Python*Harp 是用 Java 编写的,从 Hadoop 生态系统扩展而来,因此,Java 是连接 Harp 和英特尔® DAAL 的必然选择。

Harp-DAAL 中,数据存储在名为 Harp 表(Harp-Table)的分层数据结构中,该结构包含标记分区。每个分区包括一个分区 ID(元数据)和用户定义的可序列化 Java 对象,如原始数组。进行通信时,数据通过 Harp 集合通信操作在分布式集群节点间传输。执行本地计算时,数据从 Harp 表(JVM 堆内存)传输至英特尔® DAAL 原生内核(off-JVM 堆内存)。在 Java 对象和 C/C++ 分配内存空间之间复制数据是不可避免的。图 2 展示了复制数据的两种方法:

  • 直接批量复制:如果英特尔® DAAL 内核为密集问题分配一个连续内存空间,Harp-DAAL 将在 Harp 表和本地内存地址之间启动批量复制操作。
  • 多线程不规则复制:如果英特尔® DAAL 内核使用不规则的稀疏数据结构(这意味着数据被存储在非连续的内存段中),Harp-DAAL 将使用 Java/OpenMP 线程执行第二个复制操作,线程会同时传输数据段。

2 - 直接批量复制(左)对比多线程不规则复制(右)

Harp-DAAL 应用于数据分析

K 均值是一种广泛使用并且相对简单的聚类算法,示例中清楚地展示了如何使用 Harp-DAALK 均值使用集群中心对数据进行建模并通过迭代优化快速收敛。K 均值聚类在 Flickr* 的大型图像数据集上执行,该数据集包括 1 亿张图像,使用在 ImageNet* 上训练的深度卷积神经网络模型从每张图像中提取了 4,096 维深度特征。数据预处理包括格式转换以及使用主成分分析 (PCA) 将维度从 4,096 降至 128。(Harp-DAAL 教程包含了对数据准备的描述。)3

Harp-DAAL 为开发人员提供了模块化的 Java 函数,以帮助他们自定义 K 均值算法以及面向最终用户调优参数。编程模型包括由集合连接的映射函数。K 均值示例采取 7 个步骤。

第一步:加载训练数据(特征向量)和模型数据(集群中心)

使用该函数从 Hadoop * 分布式文件系统 (HDFS) 中加载训练数据:

// create a pointArray

List<double[]> pointArrays = LoadTrainingData();

同样,创建一个 Harp 表对象 cenTable 并从 HDFS 加载中心。由于所有映射器均要求中心,因此主映射器将加载中心并将其广播至所有映射器。这样可支持不同的中心初始化方法:

// create a table to hold cluster centers

Table<DoubleArray> cenTable = new Table<>(0, new DoubleArrPlus());

 

if (this.isMaster()) {

  createCenTable(cenTable);

  loadCentroids(cenTable);

}

 

// Bcast centers to other mappers

bcastCentroids(cenTable, this.getMasterID());

 

第二步:将训练数据从 Harp 转换至英特尔® DAAL

HDFS 加载的训练数据存储在 Java 堆内存中。为了调度英特尔® DAAL 内核,该步骤将数据转换至英特尔® DAAL NumericTable,包括为 NumericTable 分配本地内存以及将数据从pointArrays 复制到 trainingdata_daal

// convert training data from Harp to DAAL

NumericTable trainingdata_daal = convertTrainData(pointArrays);

第三步:创建并设置英特尔® DAAL K 均值内核

英特尔® DAAL 提供了 Java API,旨在为每个节点上的 K 均值调用原生内核。使用以下方法调用:

// create a DAAL K-means kernel object

DistributedStep1Local kmeansLocal = new DistributedStep1Local(daal_Context,

Double.class, Method.defaultDense, this.numCentroids);

// set up input training data

kmeansLocal.input.set(InputId.data, trainingdata_daal);

// specify the number of threads used by DAAL kernel

Environment.setNumberOfThreads(numThreads);

// create cenTable on DAAL side

NumericTable cenTable_daal = createCenTableDAAL();

 

第四步:将聚类中心从 Harp 转换至英特尔® DAAL

聚类中心存储在 Harp cenTable中,以进行进程间(映射器)的通信。每次迭代后,聚类中心被转换至英特尔® DAAL

// Convert center format from Harp to DAAL

convertCenTableHarpToDAAL(cenTable, cenTable_daal);

 

第五步:使用英特尔® DAAL 内核执行的本地计算

每次迭代均调用本地计算的英特尔® DAAL K 均值内核。

// specify cluster centers to DAAL kernel

kmeansLocal.input.set(InputId.inputCentroids, cenTable_daal);

// first step of local computation by using DAAL kernels to get a partial result

PartialResult pres = kmeansLocal.compute();

 

第六步:映射器间的通信

Harp-DAAL K 均值使用 AllReduce 计算模型,每个映射器均保存整个模型数据(聚类中心)的本地副本。但是,Harp 提供不同的通信操作,以同步映射器之间的模型数据:

  • regroup & allgather(默认)
  • allreduce
  • broadcast & reduce
  • push & pull

regroup & allgather 操作中,首先整合来自不同映射器的相同聚类中心,按指定顺序将它们重新分配至映射器。求取聚类中心的平均值后,allgather 操作为每个映射器提供完整的平均聚类中心副本。

comm_regroup_allgather(cenTable, pres);

 

allreduce 操作中,进行 reduce 操作,并将聚类中心复制到每个映射器。然后,在每个映射器,将平均操作应用于聚类中心:

comm_allreduce(cenTable, pres);

 

 

在每次迭代结束后,调用 printTable 以检查聚类结果:

// for iteration i, print the first ten centers of the first ten dimensions

printTable(cenTable, 10, 10, i);

 

第七步:发布内存并存储聚类中心

完成所有迭代后,释放分配给英特尔® DAAL Harp 表对象的内存。聚类中心值作为输出存储在 HDFS 上:

// free memory and record time

cenTable_daal.freeDataMemory();

trainingdata_daal.freeDataMemory();

// Write out the cluster centers

if (this.isMaster()) {

     KMUtil.storeCentroids(this.conf, this.cenDir,

     cenTable, this.cenVecSize, output);

}

cenTable.release();

 

 

性能结果

我们通过包含不同算法特征的 4 个应用4,5结果来说明 Harp-DAAL 的性能。

1.    K 均值:具有规则内存访问的密集聚类算法

2.    MF-SGD(面向随机梯度下降的矩阵分解):具有不规则内存访问和大型模型数据的密集推荐算法

3.    子图计数:具有不规则内存访问的稀疏图形算法

4.    潜在狄利克雷分布 (LDA):具有大型模型数据和不规则内存访问的稀疏主题建模算法

测试平台包括两个集群:

1.    一个搭载英特尔® 至强® E5 2670 处理器 InfiniBand 互联* 的集群

2.    一个搭载特尔® 至强融核™ 7250 处理器和英特尔® Omni-Path 互联的集群

在图 3 中,Harp-DAAL Spark* 上使用来自英特尔® 数学核心函数库(英特尔® DAAL 的组成部分)的高度向量化内核求取了 30 个节点的 K 均值,实现了约 30 倍的加速。MF-SGD 在多达 30 个节点上运行,相比 NOMAD* 实现了 3 倍的加速,NOMAD* 是一种先进的 MPI C/C++ 解决方案。Harp 的旋转集合运算加速了推荐系统中大型模型数据的通信,带来了巨大优势。

3 - 3 种不同的重要机器学习算法的性能比较:

K-means、MF-SGD 和子图计数

处理拥有十亿个边缘的 Twitter 图形数据的大型子模板时,在基于英特尔® 至强™ E5 处理器的 16 个节点上运行的 Harp-DAAL 子图计数比 MPI-Fascia 提速 1.5 4 倍。性能提升得益于计算和通信的节点级管道重叠。图形顶点的邻区列表分区提高了单节点线程的并发性。

4 展示了 Harp LDA 的收敛和加速均优于其他先进的 MPI 实施方案,如 LightLDA* NomadLDA*5。该优势来自于对并行效率的两项优化:

1.    Harp 使用旋转计算模型进行最新模型节点间的通信,同时利用计时器控件降低同步的开销。

2.    在节点内级别,开发用于减轻负载不平衡的动态调度机制。

4 - Clueweb 数据集(300 亿个标记,5,000 个主题)上各种 LDA 实施方案的性能

当前的 Harp-DAAL 系统提供 13 个分布式数据分析和机器学习算法,利用本地计算内核,如英特尔® DAAL 2018 版本的 K 均值。此外,Harp-DAAL 正在开发自己的数据密集型内核,包括上述大规模子图计数算法,该算法可在 15 分钟内处理一张包含数十亿个边缘和 10 个顶点子模板的社交网络 Twitter 图形。Harp-DAAL 框架和机器学习算法能够公开访问5 ,因此,您可以下载软件、学习教程并将 Harp-DAAL 应用于其他数据密集型应用。

 #DataScience

参考资料

1.Harp 代码库,https://github.com/DSC-SPIDAL/harp

2.英特尔® DAALhttps://github.com/intel/daal

3.Harp-DAAL 教程,https://github.com/DSC-SPIDAL/harp/tree/tutorial

4.Langshi Chen 等,《测试 Harp-DAALKNL 集群上的高性能 Hadoop》,第 10 IEEE 云计算国际会议(IEEE 2017)会议纪要,2017 6 25-30 日。

5.Bo Peng 等,《HarpLDA+: 优化潜在狄利克雷分布,提高并行效率》,2017 IEEE 大数据会议,2017 12 11-14 日。