作者 | Mikel Bober-Irizar

翻译 | 刘畅

编辑 | Donna

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

2018新年伊始,互联网公司发现了两个非常严重的新漏洞。这两个漏洞分别是熔毁(Meltdown)幽灵(Spectre),它们主要会影响几大处理器供应商。

这些漏洞会使攻击者利用处理器在推测性执行时产生的错误,读取(并潜在地执行)其各自进程之外的存储器位置。这意味着,攻击者可以读取其他软件存储器中的敏感数据。

如果在Linux内核中打一个叫做KAISER(也称为KPTI)或PTI(页表隔离)的补丁,可以有效地解决了利用了Meltdown的攻击。但是,这个补丁会对Linux的性能造成很大的影响。据报告显示,CPU性能下降的范围是5%到35%,另有一些综合的评测标准显示,CPU的性能下降幅度甚至超过了50%。

(报告地址:https://www.phoronix.com/scan.php?page=article&item=linux-415-x86pti&num=2)

然而,PTI的性能问题在很大程度上取决于每个人手头需要执行的任务。换句话说,这种性能的大幅度下降可能仅仅出现在FSMark等综合的基准测试中。

所以问题来了:在机器学习的应用程序中,我们会看到什么样的性能?

环境部署


为了比较在使用和不使用PTI时,机器学习应用程序的性能变化,我部署了一个新的带intel微码(也称为微指令)的机器。该机器装有Ubuntu 16.04版本的操作系统。

我还比较了Ubuntu 16.04(4.10.0-42-generic版本)上自动安装的最新内核与最新的主线内核版本(4.15.0-041500rc6-generic版本),这个版本的Linux带有PTI补丁。

我采用的工具是基于Python 3.6(带有用pip下载的额外软件包)的Anaconda,由它来执行整个测试。

我用于测试的机子配置包括英特尔酷睿i7-5820K(Haswell-E,stock clocks)和64GB DDR4 @ 2400MHz。

值得注意的是,AMD的处理器没有启用PTI补丁,因为它们不受Meltdown攻击的影响——所以如果你使用的是AMD处理器,性能将不会受到任何影响。

测试结果

请注意,图表上的比例是从60%开始的

首先,我们可以看到几乎所有的程序性能都有轻微的下降,不过在卷积层模型的推理过程中下降的速度非常快。尤其是AlexNet,它的推理速度比正常的慢了大约5%,但反向传播速度几乎是相同的——这就是为什么对训练造成的影响大约只是推理的一半。

就Keras的原始操作而言,全连接和LSTM层几乎没有受到任何的性能影响,但卷积层却减少了10%左右。

对于AlexNet和MNIST的基准测试,我使用了TensorFlow教程的模型。而对于Keras,我则使用了一个只有几层卷积并可以随机初始化的模型。我还计算了其在随机数据上的推理速度。

值得注意的是,这些基准测试都仅使用了CPU来运行。

我在这里使用了Scikit-learn工具包来衡量“传统”机器学习和数据科学算法的性能。

我们看到,与神经网络相比,操作系统带来的性能下降更大,且PCA和线性/逻辑回归受到的影响最严重。造成这种下降的原因可能是由于某些数学受到了非常严重的影响——正如下面针对NumPy的基准结果所讨论的那样。

有趣的是,K最近邻算法完全没有受到PTI的影响,而且目测在新的内核上表现的还稍好一些。这有可能只是在性能测试错误的范围之内,但也有可能是其他一些内核的改进,稍微帮助提高了该算法的速度。

我还从内存里缓存的文件中提取了一个pandas.read_csv()函数的基准,用于查看带PTI的系统对CSV解析的速度降低了多少——输入博世(Bosch)Kaggle竞赛数据集(大小2GB,1M行,1K列,类型是浮点数, 80%缺失),带来了6%左右的读取性能下降。

所有的Scikit-learn工具包基准也是在博世数据集上进行计算的。我发现,普遍来讲,它对于进行机器学习算法基准测试,效果是很好的,因为这是一个庞大的,标准化的且格式良好的数据集(尽管因为采用完整的数据会花费太久的时间,kNN和K-means算法是在一个子集上进行计算的)。



这些基准在这里可能是最综合的了,因为仅测试了单一的scipy操作的速度。然而,这些结果告诉我们,PTI带来的性能损失是与任务依赖有极大联系的。在这里我们可以看到,大多数的操作受到的影响都很小,包括点积和FFT(快速傅里叶变换)操作,其对性能的影响也很小。

当PTI启用时,SVD(奇异值分解),LU分解和QR(正交三角)分解性能都会受到大幅度的影响。QR分解从190GFLOPS降低到110GFLOPS,降低了37%的性能。这可能有助于解释为什么PCA(主要依赖于SVD)和线性回归(主要依赖于QR分解)的性能会下降。

这些基准测试是使用英特尔自己的ibench软件包完成的,只是使用了Anaconda而不是英特尔的python发行版。



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

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

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

这并不是XGBoost在大量线程内核上执行的完美表示(因为它是在12个逻辑内核上运行了40个线程)。不过,它也能表明,带PTI的系统在CPU同时处理很多事情时,会带来更大的性能影响。不幸的是,我不能访问任何的可以修改内核的高内核数量的服务器,所以我不能得到一个更深入的结果。

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

结论


最重要的结论是,PTI带来的性能影响其实是非常依赖于任务的——一些任务不受影响,而有些任务的性能却下降了40%。不过就总体而言,我认为这种影响比我预期的要小,因为只是一些应用程序受到了严重的影响。

原文链接:https://medium.com/implodinggradients/meltdown-c24a9d5e254e

热文精选

2018年了,但愿你还有被剥削的价值!因为AI失业潮真的开始了...

2018 年了,该不该下定决心转型AI呢?

不用数学也能讲清贝叶斯理论的马尔可夫链蒙特卡洛方法?这篇文章做到了

盘点深度学习一年来在文本、语音和视觉等方向的进展,看强化学习如何无往而不利

先搞懂这八大基础概念,再谈机器学习入门!

这三个普通程序员,几个月就成功转型AI,他们的经验是...

干货 | AI 工程师必读,从实践的角度解析一名合格的AI工程师是怎样炼成的

AI校招程序员最高薪酬曝光!腾讯80万年薪领跑,还送北京户口

详解 | 如何用Python实现机器学习算法

经验 | 如何高效学Python?

详解CPU漏洞对机器学习的影响:几乎所有卷积层都受影响,QR分解降速37%相关推荐

  1. 计算机主板与检测,主板知识详解:CPU自动检测和硬件错误的侦测

    主板知识详解:CPU自动检测和硬件错误的侦测 1.CPU 的自动检测 以前的老式主板,需要用户自己设定 CPU 的外频.倍频以及电压等参数(一般都是通过跳线来设定).现在生产的主板,都能自动检测到这 ...

  2. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!...

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  3. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

  4. 微软修复打印机服务漏洞 所有支持Windows系统都受影响

    在本月的补丁星期二活动日中,在常规安全公告中涵盖一项Windows Print Spooler组件系统的漏洞,Windows Vista及更高版本都受影响可能会导致某些安全问题. 根据微软安全公告MS ...

  5. 基于python的数据建模与分析案例_基于案例详解Python数据分析与机器学习

    课程概述: 使用数据领域最主流语言Python及其分析与建模库作为核心武器.对于机器学习经典算法给出完整的原理推导并基于实例进行讲解,基于案例演示如何应用机器学习算法解决实际问题. 课程特色: 通俗易 ...

  6. 线性回归详解(2)机器学习

    多元线性回归   在介绍完机器学习的相关概念后,我们先从机器学习中最简单入门的线性回归模型出发,并且从最底层的数学讲起,完全深入理解机器学习的本质. 1 基本概念   线性回归是机器学习中有监督机器学 ...

  7. 归一化,正则化等梯度下降优化详解(4)机器学习

      在学习了梯度下降机器原理本质,以及可能遇到的问题之后,我们可以进一步针对梯度下降进行优化,使得最终更快更准的走向最优值. 1 归一化 1.1 归一化目的   在不同特征的滑动过程中,不同方向的陡峭 ...

  8. c++ 多核cpu序列号_详解CPU几个重点基础知识

    作者 | 骏马金龙 责编 | 阿秃 关于CPU和程序的执行 1.程序的运行过程,实际上是程序涉及到的.未涉及到的一大堆的指令的执行过程. 当程序要执行的部分被装载到内存后,CPU要从内存中取出指令,然 ...

  9. 详解CPU几个重点基础知识

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 骏马金龙 责编 | 阿秃 关于CPU和程序的执行 1.程序的运行过程,实际上是程序涉及到的.未涉及到的一大堆的指令的执行过程. 当程 ...

最新文章

  1. Understanding Stock Types in SAP EWM
  2. 蚂蚁金服自研的OceanBase升级到2.0了,据说性能……
  3. 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化
  4. 1006 换个格式输出整数 (15分)
  5. swift解析html数据类型,ios-Swift:以标签或textVi显示HTML数据
  6. js中startsWith 函数不能在任何浏览器兼容的问题
  7. 区块链产业生态、存在问题及政策建议|一文读懂新趋势
  8. 使用Swagger辅助开发Fabric Application的Web API
  9. Linux的软连接、硬链接和find命令
  10. 为知笔记linux输入中文,为知笔记wiznote无法输入中文,fcitx输入法问题解决
  11. 射频电路设计——射频器件基础
  12. Android Kotlin关于新增本地数据库对象表字段问题
  13. 批处理For--分割字符串
  14. 2022-03-02 组建raft集群实战及日志复制与主从切换调研
  15. Xcelsius 2008 sp3的新部件与新功能
  16. 区块链项目_数字资产控股DAH_清算结算
  17. 贾又福大象鸿蒙,2016贾又福工作室师生优秀作品全国巡展
  18. java gettext返回值_JAVA getText() 取不到值
  19. windows 静态ip与动态ip切换脚本
  20. 开课吧WEB全栈架构师【6期,9-12期】

热门文章

  1. [日记]一个人去散步
  2. Kafka面试题及答案整理 110道 (持续更新)
  3. python 定义字典键为变量_在python字典中使用变量作为键名
  4. python isdigit()
  5. 概率统计 —— 常犯错误
  6. Oracle学习之段区块初步概念
  7. Python Data Structures
  8. 5.1软件升级的小阳春
  9. spoolsv.exe占CPU100% 的解决方法
  10. 【组队学习】【31期】青少年编程(Scratch 四级)