Tensorflow针对CPU的编译优化加速-解决Not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

本文主要是介绍Tensorflow针对CPU的编译优化加速-解决Not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文介绍Tensorlfow 针对 CPU SSE4.1 SSE4.2 AVX AVX2 FMA 的编译优化,以提升Tensorflow在CPU上的计算速度,实测可以提升两倍以上的速度。

1、问题

在用 pip 安装tensorflow的CPU版本后,在运行的时候通常会出现如下提示:Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

该提示说明你的CPU支持AVX扩展,但是你安装的TensorFlow版本无法编译使用。而AVX的利用可以大大提升线性代数运算。

由于AVX不是所有CPU都支持(实际上08年以后的intel  CPU都支持...),所以通过 pip install 安装的 tensorflow CPU 版本是不支持AVX的。

---------------

所谓AVX,全称为高级矢量扩展(Advanced Vector eXtensions,AVX)是英特尔在2008年3月提出的英特尔和AMD微处理器的x86指令集体系结构的扩展,英特尔首先通过Sandy Bridge处理器在2011年第一季度推出,随后由AMD推出Bulldozer处理器在2011年第三季度.AVX提供了新功能,新指令和新编码方案。

特别是,AVX引入了融合乘法累加(FMA)操作,加速了线性代数计算,即点积,矩阵乘法,卷积等。几乎所有机器学习训练都涉及大量这些操作,因此将会支持AVX和FMA的CPU(最高达300%)更快。该警告指出您的CPU确实支持AVX。

---------------

2、AVX编译优化

 Tensorflow使用谷歌开源的 Bazel 自动化构建工具编译项目,有一定的学习成本。

但是可以借助github上编译好的版本进行安装。 

(1)linux/Mac OS 编译

github地址: https://github.com/lakshayg/tensorflow-build

下表为开源项目中的一部分,根据Tensorflow、Ubuntu、GCC、和python版本选择对应的下载链接。

实际上版本并没有表中那么严格的限制,比如tensorflow版本,版本 1.4.0~1.13.0的主要API变动不大,假如表格中没有对应版本的话,可以选最近的版本,实测是可以通过的。

同样的,GCC版本假如高于表中的版本,也选最近的低版本即可

操作系统也不一定是Ubuntu,应该Debian系的都可以。

TFHWOSGCCPythonSupports 
1.9.0CPUUbuntu 16.045.43.6.6FMA, AVX, AVX2, SSE4.1, SSE4.2Download
1.9.0CPUUbuntu 16.045.43.5.2FMA, AVX, AVX2, SSE4.1, SSE4.2Download
1.9.0CPUUbuntu 16.045.42.7.12FMA, AVX, AVX2, SSE4.1, SSE4.2Download
1.9.0CPUUbuntu 18.047.33.6.5FMA, AVX, AVX2, SSE4.1, SSE4.2Download
1.10.0CPUUbuntu 18.047.33.6.5FMA, AVX, AVX2, SSE4.1, SSE4.2Download
1.10.0CPUUbuntu 18.047.32.7.15rc1FMA, AVX, AVX2, SSE4.1, SSE4.2Download

下载后得到 tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl 类似的文件,然后直接在对应的环境中:

pip install tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl

或者:

conda install tensorflow-1.9.0-cp36-cp36m-linux_x86_64.whl

然后再运行项目,AVX 相关的警告就消失了,而且模型训练和测试速度应该有大幅提升。

(2)windows 编译

github 地址:https://github.com/fo40225/tensorflow-windows-wheel

方法同上,找到对应的版本 pip install 或者conda install 即可

 

这篇关于Tensorflow针对CPU的编译优化加速-解决Not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101106

相关文章

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.