基于Intel DevCloud平台和SYCL框架的逻辑斯蒂回归并行算法设计

本次实验在intel的DevCloud平台上,基于SYCL并行编程模型,利用软件缺陷数据集并行化的训练了逻辑斯蒂回归模型。

针对训练过程中存在的可拆分为若干互相独立、指令相同的小问题的步骤,进行并行化改进。利用设备的单指令流多数据流模式,使大量小问题可以在设备上同时进行计算。

相比串行训练,本次实验的程序实现在多种规模大小的数据集实现了约4.5的加速比,大大加速了逻辑斯蒂回归模型的训练。

一、实验环境

1.1实验平台

本次实验在intel的DevCloud(英特尔开发人员云)提供的oneAPI工具集上进行。DevCloud提供了几种针对不同工作负载的配置,从人工智能和推理训练到FPGA开发,再到边缘原型和预生产部署,用户可以使用最适合自己业务需求的环境; oneAPI是一个综合性的软件开发工具集,旨在支持跨多种硬件架构的高性能计算。它提供了一套统一的编程模型和工具,使开发人员能够轻松地利用不同类型的处理器和加速器来加速应用程序的执行。

通过lscpu和htop等命令查询得知,该平台提供189G内存和两块Intel® Xeon® Gold 6128 CPU @ 3.40GHz。使用SYCL框架提供的用户自定义device选择器,依次优选选择GPU、其他加速设备和CPU。用get_info函数进行测试得知,主存平台提供Intel® FPGA Emulation Device进行加速,不提供GPU。因此本次实验使用6核心12线程的Gold 6128 CPU进行加速。
在这里插入图片描述

1.2软件环境

DevCloud为SYCL并行编程框架提供的开发环境包括Ubuntu 20.04操作系统和2023.2.0版本的icpx编译器。本次实验使用的程序由C++语言开发。

1.2.1 英特尔并行程序编译器

本次实验使用Intel® oneAPI DPC++/C++ Compiler提供的icpx命令,对实验中使用的基于SYCL框架的c++程序进行编译。编译器支持c++17及以上的特性,能将SYCl源代码或offload kernels编译为多种设备可执行的命令。

1.2.2 SYCL框架

SYCL是OpenCL的高级编程模型,是一种跨越CPU、GPU、FPGA和AI加速器等多种架构的一致性编程语言。SYCL受到Codeplay的ComputeCpp、英特尔的DPC++、AMD的hipSYCL以及Xilinx的triSYCL等多家厂商产品的支持。本次实验使用的opeAPI正是英特尔提供的一种SYCL实现。

二、实验说明

2.1 逻辑斯蒂回归

逻辑斯谛回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型。本次实验仅关注针对二分类任务的二项逻辑斯蒂回归模型,其由条件概率分布 P(Y|X)表示,形式为参数化的逻辑斯蒂分布。这里,随机变X取值为实数,随机变量Y取值为1或0。实验通过监督学习的方法,从有标签数据集中学习模型参数。
在这里插入图片描述
这里,x∈Rn是输入,Y∈{0,1} 是输出,w∈Rn和b∈R是参数,w称为权值向量,b称为偏置,w·x为w和x的内积。
对于给定的输入实例x,根据模型求得P(Y=1|x)和P(Y=0|x)。逻辑斯蒂回归比较两个条件概率值的大小,将实例x分到概率值较大的那一类。
求解逻辑斯蒂回归模型的参数时,常将问题转化为一个最优化问题,如将优化目标设置为最小化模型在训练集上的平均平方误差,再使用牛顿法或梯度下降法等算法迭代进行学习。本次实验使用梯度下降优化方法,每次迭代时,遍历整个训练集,并用下列公式进行参数更新:
在这里插入图片描述
其中 α 是学习率,控制每次更新的步长;θ是模型的一个参数,J是目标函数。

2.2数据集

本次实验在SoftwareDefects数据集[4]的基础上进行训练和评价。该数据集记录了101764个C语言程序的21种特征,并用布尔类型作为数据的标签——true代表程序存在缺陷,false代表程序无缺陷。在给定代码的各种属性的情况下预测程序中是否存在缺陷。
(部分)数据分布
为了在有限时间内完成串行程序的测试用于对比,因此对数据集进行下采样,随机选取其中10000条、30000条或50000条记录,分别在并行和串行程序上进行测试,记录运行时间。

2.3评价指标

本次实验用平均平方误差(MSE)来衡量模型的质量。MSE的值越小,说明模型的预测值与真实值之间的差异越小,模型的性能越好。其大小等于模型预测结果与真值之间误差平方的算术平均值,定义如下:
在这里插入图片描述其中,yi代表数据集的第i个样本的真值,而y ̂_i为模型预测值。

三、并行加速的方法

3.1总体思路

进行并行计算。
实际操作中,由于存在原矩阵宽度无法整除工作组子组宽度的情况,部分线程存在数组越界访问风险。需要对边界进行判断。
SYCL的ND-Range 内核通过提供对本地内存的访问和将执行映射到硬件上的计算单元来实现低水平的性能调整。它引入了组的概念,并将执行范围划分为工作组、子组和工作项,分别对应执行单元、SIMD单元以及单个线程。本次实验中,在计算预测输入样本的标签值使用的矩阵乘法时,将整个运算划分为若干个包含16*16个工作项的子组,所有的子组构成整个工作组。在 ND-Range 内核中,每个工作组被分配一个唯一的工作组 ID,其维度与用于工作项的索引空间相同。每个工作项都被分配一个本地 ID,在工作组内是唯一的,因此一个工作项可以通过其全局 ID 或其本地 ID 和工作组 ID 的组合来唯一地识别。在给定的工作组中,工作项将同时在单个计算单元的处理单元上执行。以矩阵乘法核函数为例,计算工作项ID的方式如下:
在这里插入图片描述

3.2实现方法

3.2.1数据、内存准备及队列创建

创建SYCL队列,使用默认设备选择器,本次实验中将选中一块CPU。
setup_data函数用于从文件中读取训练集,将特征和标签分别存储在矩阵X和y中。并用Normalize_Matrix_min_max函数对输入矩阵进行最小-最大归一化。完成数据集准备后,将以下任务提交给队列:根据输入数据的大小,用malloc_device函数在设备上为其开辟存储空间,并用memcpy将矩阵从主机拷贝到设备。并用wait函数等待上述任务完成,实现主机和设备间的同步。
用InitializeRandom函数随机初始化模型参数,并迭代用训练集学习这些模型参数。

3.2.2 模型训练

Logistic_Regression_SYCL函数是逻辑斯蒂回归的核心实现。它将数据传递到GPU,并使用SYCL来进行并行计算。在每次迭代中,它对每一个训练样本执行以下操作:将其输入模型中计算预测值、计算误差并更新模型的每一个参数、统计计算误差并将其归约为一个值。训练时,使用了一些核函数。这些核函数被提交到SYCL队列中,将被分配到相应设备上并行计算。
在这里插入图片描述
定义执行各个核函数时使用的工作组和子组的维度。这些维度用于将工作项分配到设备上进行并行计算。
进入迭代循环,本次实验使用的循环迭代次数为150。在每次迭代中,遍历数据的每个样本。使用matrixMulKernel计算每个样本的预测值;使用sigmoidKernel应用Sigmoid函数,将预测值映射到0到1之间;使用updateParamsAbsErrorKernel根据误差更新模型参数。计算每个样本的误差,并将其存储在gpu_abs_error中;使用reduceKernel将误差归约为一个标量值;最后,计算平均误差,并将其添加到cost_function向量中,以便后续分析。在此过程中,用lambda表达式的方式向SYCL队列提交任务,parallel for执行对应核函数。
下面详细分析主要内核函数的内容。

(1)matrixMulKernel
该核函数中 ,首先需要判断自己在工作组中所处的位置,然后检查是否越界,最后完成分配给他的乘法计算。
在这里插入图片描述

(2)sigmoidKernel
sigmod(x)=□(1/(1+e^(-x) ))

该核函数的计算如上公式所示。其作用是,将输入数据映射到一个[0,1]区间,而真实标签在训练过程中则是使用1表示true,0表示false。这样,就可以将预测结果和真值计算误差。
在这里插入图片描述

(3)updateParamsAbsErrorKernel
该核函数负责更新模型参数,参数的取值在将在梯度的负方向上移动一小段距离,距离大小由alpha控制,实验中alpha取值为0.03。
在这里插入图片描述

四、实验结果

在这里插入图片描述
1.数据集大小:10000
在这里插入图片描述
2.数据集大小:30000
在这里插入图片描述
3.数据集大小:50000
在这里插入图片描述

参考文献

[1] 朱虎明. 面向人工智能的高性能计算系统及其应用.
[2] 李航. 统计学习方法. 清华大学出版社, 2012.
[3]Walter Reade, Ashley Chow. (2023). Binary Classification with a Software Defects Dataset. Kaggle. https://kaggle.com/competitions/playground-series-s3e23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值