博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
The Meltdown bug and the KPTI patch: How does it impact ML performance?
阅读量:2032 次
发布时间:2019-04-28

本文共 2027 字,大约阅读时间需要 6 分钟。

原文地址

作者:

前言

这里写图片描述

(备注:KPTI 在计算机中指 Kernel page-table isolation,是一种Linux内核功能,可以减弱安全漏洞带来的影响)

2018年一开始,网上曝出了两个非常严重的新漏洞。这两个漏洞分别是熔断(Meltdown)幽灵(Spectre),这些漏洞是处理器的推断性执行(speculative execution)中的错误,它允许攻击者读取(并有可能破坏)进程之外的内存位置,这意味着程序可以在其他软件的内存中读取敏感数据。

为了修复这个bug,Linux Kernel开发团队开发了一个叫做KAISER(也称为KPTI)或PTI(页表隔离)的补丁的补丁来有效的修复熔断(Meltdown)的问题。然而,此补丁会对Cpu的性能造成很大的影响。

据报告显示,CPU性能下降的范围在5%到35%之间,另有一些综合的评测标准显示,CPU的性能下降幅度甚至超过了50%。。

虽然如此,实际上PTI的性能问题在很大程度上取决于任务类型(也就是Task-Oriented)。也就是说,打了补丁之后而导致的CPU性能的大幅下降可能仅仅出现在FSMark等基准测试中。

所以问题来了:在机器学习中,打了这个补丁是否会导致CPU的计算性能出现变化?

环境

为了比较打了PTI和没打PTI的情况,作者准备了一台新的Ubuntu16.04的机器(预先安装Intel微码(Intel microcode))和装有最新的内核的版本Ubuntu 16.04 (4.10.0–42-generic) ,这个版本的Linux带有PTI补丁。

这里,作者用Anaconda3 + Python3.6来进行开发测试。

硬件条件是:

  • Intel Core i7–5820K (Haswell-E, stock clocks)
  • 64GB of DDR4 @ 2400MHz

值得注意的是,AMD处理器不需要担心此问题(免疫熔断(Meltdown)攻击)。

实验结果

这里写图片描述

首先,我们可以看到几乎所有的程序性能都有轻微的下降,不过在卷积层模型的前向传播过程中速度下降的很快。尤其是AlexNet,它的前向传播速度比正常的慢了大约5%,但反向传播速度几乎没什么变化。

就Keras的原始操作而言,打了补丁的机器上全连接和LSTM层几乎没有产生性能损失,但卷积层的性能降低了10%左右。

对于AlexNet和MNIST的基准测试,我使用了。对Keras,作者使用了一个层数不多并随机初始化权重的模型。还计算了其在随机数据上的前向传播计算的速度。值得注意的是,上述基准测试都仅使用了CPU来运行。

这里写图片描述

我们看到,与神经网络相比,操作系统带来的性能下降更大,且PCA降维,线性回归,逻辑回归等常用机器学习算法受到的影响更为严重。

造成这种下降的原因可能是由于某些数学运算受到了非常严重的影响——正如下面针对NumPy的基准结果所讨论的那样。

有趣的是,K最近邻算法(kNN)没有受到PTI的影响,甚至在新的内核上表现的还稍好一些。不过可能只是在性能测试错误的范围之内,但也有可能是由于内核的一些改进导致算法的速度得到稍许提升。

作者还使用pandas.read_csv()读取内存中的文件做测试

查看带PTI的系统对CSV解析的速度的影响——(
,大小2GB,1M行,1K列,类型是浮点数, 80%缺失)。发现结果是产生了6%左右的读取性能下降。

上述所有的使用Scikit-learn工具而做的基准测试都是在博世数据集上进行计算的。普遍来讲,它对于进行机器学习算法基准测试,效果不错。因为这是一个庞大的,标准化的且格式良好的数据集(由于使用完整的数据会花费太久的时间,故这里kNN和K-means算法是在一个子集上进行计算的)。

这里写图片描述

对XGBoost算法进行测试时,我得到了一些有趣的结果。

在大多数情况下,使用较少的线程数时,无论使用慢速精确的方法还是快速直方图方法,PTI带给XGBoost的性能影响都可以忽略不计。

但是,当使用非常多的线程时,也就是CPU同时处理更多的任务时,使用PTI系统会带来速度的下降。

这并不是XGBoost在大量线程内核上执行的完美表示(因为它是在12个逻辑内核上运行了40个线程)。这表明:带PTI的系统在CPU同时处理很多事情时,会带来更大的性能下降。不幸的是,作者无法的使用可以修改为更高内核数的服务器,所以不能得到更全面、有深度的结果。

与测试Scikit-learn一样,这些测试都是在博世(Bosch)数据集上进行的。

结论

通过上述实验,我们得出一个重要的结论:PTI补丁影响是任务导向的(Task–Oriented),一些任务不受影响,而有些任务的性能却下降了40%。总的来说,PTI补丁的影响小于作者的预估,只有很少类型的应用才会受到严重的影响。

最后,感谢您的阅读!希望本文能为您对于新补丁产生影响提供一点有益的认识。

转载地址:http://qvxaf.baihongyu.com/

你可能感兴趣的文章
MyBatis和Hibernate的区别个人感悟
查看>>
Python3.x爬虫教程:爬网页、爬图片、自动登录
查看>>
Python验证码识别处理实例
查看>>
那些年,我开发过的软件
查看>>
进程和线程的定义及区别、线程同步、进程通讯方式总结
查看>>
栈,堆,全局,文字常量,代码区总结
查看>>
24天学会设计模式----门面模式(外观模式)
查看>>
24天学会设计模式------工厂方法模式
查看>>
Get与Post区别与范例讲解
查看>>
servlet和Jsp生命周期解读
查看>>
Oracle与Mysql主键、索引及分页的区别小结
查看>>
前端优化 9 个技巧,提高 Web 性能
查看>>
MVC、MVP、MVVM之间的关系
查看>>
跨域问题:解决跨域的三种方案
查看>>
计算机网络--HTTP协议(二)
查看>>
Http状态码(404、500等)
查看>>
Spring 手动提交事务
查看>>
代码重构(一):函数重构规则
查看>>
IP地址分类
查看>>
Spring总结之注解(2)
查看>>