pip安装 Tensorflow 安装包
最简单的 Tensorflow 的安装方法是在 pip 一键式安装官方预编译好的包
pip install tensorflow
通常这种预编译的包的编译参数选择是为了最大兼容性而不是为了最优性能,导致在使用过程中,每次运行代码都会输出一大堆的 warning 信息。例如在安装了谷歌官方的 Tensorflow 1.3.0 包后,运行以下测试代码时
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
Console 会输出
C:\Users\jgu\Anaconda3\python.exe C:/Users/sandman/PycharmProjects/untitled/tf_helloworld.py
2017-10-27 13:42:20.005261: W C:\work\tensorflow-1.3.1\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-10-27 13:42:20.005475: W C:\work\tensorflow-1.3.1\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
b'Hello, TensorFlow!'
Process finished with exit code 0
表示此 Tensorflow 版本只用到了 CPU SSE 指令集优化,可以运行在很多老架构的 CPU 指令集上。
为了充分利用 AVX/AVX2 来加速 Tensorflow 的 CPU 版本的计算速度,需要自己下载 Tensorflow 的源码,在编译时使用这些指令集。
以下教程基于最新的Tensorflow 1.3.1源码,利用用Visual Studio 2015/Visual Studio 2017来编译一个基于 AVX/AVX2 的 CPU 版本的 Tensorflow Python 安装包。
编译过程
准备工作
VS2015 (编译支持 AVX 的 Tensorflow 包)或 VS2017 (编译支持 AVX2 的 Tensorflow 包)
Anaconda + Python 3.6 64位版本
https://www.anaconda.com
Swigwin 3.0.12
http://www.swig.org/
cmake-3.9.3-win64-x64
https://cmake.org/
Git-2.14.2-64-bit
https://git-scm.com/
Tensorflow源码,目前最新版本为1.3.1
https://github.com/tensorflow/tensorflow
VS2015编译过程
打开 VS2015 64 位命令行编译环境
在命令行环境中进入 Tensorflow 的源码路径 tensorflow-1.3.1\tensorflow\contrib\cmake
新建一个文件夹 build2015,进入 build2015 文件夹
用 CMake 生成 VS2015 的编译项目
C:\...\build2015>cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release
-DSWIG_EXECUTABLE=C:\work\swigwin-3.0.12\swig.exe
-DPYTHON_EXECUTABLE="C:\Users\jgu23\AppData\Local\Continuum\Anaconda3\python.exe"
-DPYTHON_LIBRARIES="C:\Users\jgu23\AppData\Local\Continuum\Anaconda3\libs\python36.lib"
-Dtensorflow_WIN_CPU_SIMD_OPTIONS=/arch:AVX
用 MSBuild 编译生成 Tensorflow 的 pip 安装包
C:\...\build2015>MSBuild /p:Configuration=Release tf_python_build_pip_package.vcxproj
编译时需要联网,git 会从网上下载必要的项目包
经过漫长的编译过程(我的编译环境是 i5 7440hq + 12G 内存)
pip 安装 Tensorflow pip 安装包
如果编译没错误的话,进入到 C:\...\build2015\tf_python\dist 目录下,可以看到一个文件
tensorflow-1.3.1-cp36-cp36m-win_amd64.whl
这个就是编译出来的 Tensorflow 安装包
在进入 Anaconda Prompt 界面
进入到 C:\...\build2017\tf_python\dist 目录下,输入“pip install tensorflow-1.3.1-cp36-cp36m-win_amd64.whl”
到这里,Tensorflow 就已经编译安装成功了
最后验证一下
运行代码
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
Console 输出
C:\Users\jgu\Anaconda3\python.exe C:www.tygj178.com /Users/sandman/PycharmProjects/untitled/tf_helloworld.py
2017-10-27 13:48:20.005261: W C:\work\tensorflow-1.3.1\tensorflow\core\platform\cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
b'Hello, TensorFlow!'
说明这个 Tensorflow 包支持 AVX 指令集
注意
VS2015 编译 Tensorflow 最高只支持到 AVX, 如果 CMake 生成编译项目时指定 CPU 指令集支持到 AVX2,编译时将出现 error C3861: 'xxx': identifier not found 错误。要支持 AVX2 指令集,必须用 VS2017 编译
查看大图
VS2017编译过程
打开 VS2017 64 位命令行编译环境
在命令行环境中进入 Tensorflow 的源码路径 tensorflow-1.3.1\tensorflow\contrib\cmake
新建一个文件夹 build2017,进入 build2017 文件夹
用 CMake 生成 VS2017 的编译项目
C:\...\build2017>cmake .. -A x64 -DCMAKE_BUILD_TYPE=Release
-DSWIG_EXECUTABLE=C:\work\swigwin-3.0.12\swig.exe
-DPYTHON_EXECUTABLE="C:\Users\jgu23\AppData\Local\Continuum\Anaconda3\python.exe"
-DPYTHON_LIBRARIES="C:\Users\jgu23\AppData\Local\Continuum\Anaconda3\libs\python36.lib"
-Dtensorflow_WIN_CPU_SIMD_OPTIONS=/arch:AVX2
这里比 VS2015 的编译多了一步
用 VS2017 打开 tf_core_kernels.vcxproj
进入 Properties->Configuration Properties-www.dashuju178.com>VC++ Directories->Executable Directories
将 Executable Directories下的 $www.fengshen157.com/ (VC_ExecutablePath_x64) 改为 $(VC_ExecutablePath_x64_x64)
保存项目,退出
用 MSBuild 编译生成 Tensorflow 的 pip 安装包
C:\...\build2017>MSBuild /p:Configuration=Release tf_python_build_pip_package.vcxproj
编译时需要联网,git 会从网上下载必要的项目包
经过漫长的编译过程(我的编译环境是 i5 7440hq + 12G 内存)
pip安装 Tensorflow 安装包
如果编译没错误的话,进入到 C:\...\build2017\tf_python\dist目录下,可以看到一个文件
tensorflow-1.3.1-cp36-cp36m-win_amd64.whl
这个就是 Tensorflow 的安装包
在进入 Anaconda Prompt 界面
进入到 C:\...\build2017\tf_python\dist 目录下,输入 “pip install tensorflow-1.3.1-cp36-cp36m-win_amd64.whl”
到这里,Tensorflow 就已经编译安装成功了
最后验证一下
运行代码
import tensorflow as tf
hello = tf.constant('Hello,www.yongshiyule178.com TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
Console输出
C:\Users\jgu\Anaconda3\python.exe C:/Users/sandman/PycharmProjects/untitled/tf_helloworld.py
b'Hello, TensorFlow!'
Process finished with exit code 0
没有任何 warning 输出,说明这个 Tensorflow 包支持 AVX2 指令集
常见错误及解决方法
编译 re2.vcxproj 时出错
warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
以及
Error C2001: Newline in constant
错误原因:此错误和编译平台的 windows 操作系统的locale设为中文有关,英文的 windows 没有这个错误
解决办法: 修改 CMakeCache.txt,让 MSBuild 编译这个项目时,强制按照 utf-8 编码文件的格式来解析文件
进入 C:\...\tensorflow-1.3.1\tensorflow\contrib\cmake\build2017\re2\src\re2 目录
用文本编辑器打开 CMakeCache.txt,找到以下2行
在 CMAKE_CXX_FLAGS_RELEASE 这里添加蓝色部分,修改为
CMAKE_CXX_FLAGS_RELEASE:STRING=/MD /O2 /Ob2 /DNDEBUG /source-charset:utf-8
编译 tf_core_kernels.vcxproj 时出错
fatal error c1060: the compiler is out of heap space
以及
fatal error C1002: compiler is out of heap space in pass 2
错误原因:VS 编译环境默认的编译工具链为32位,Tensorflow 编译时会消耗大量的内存,导致编译器消耗的内存超出了32位编译器的寻址范围。
解决方法:
VS2015
需要运行 64 位命令行编译环境,在“开始”菜单中选择运行 “VS2015 x64 Native Tools Command Prompt”,如本文 2.2 章中“打开 VS2015 64 位命令行编译环境”部分所示
或者在命令行里手工切换
首先进入 VS2015 的安装目录 “cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC”
输入“vcvarsall amd64”
参考 MSDN “How to: Enable a 64-Bit Visual C++ Toolset on the Command Line”
https://msdn.microsoft.com/en-us/library/x4d2c09s.aspx
VS2017
可能因为 Tensorflow 项目中 CMake 脚本对 VS2017 支持不好,所以无法按照 VS2015 的修改办法来通过指定64位编译环境的方法来解决这个问题。我们需要用 VS2017 打开 tf_core_kernels.vcxproj,手工将 Properties->Configuration Properties->VC++ Directories->Executable Directories 下的$(VC_ExecutablePath_x64)改为$(VC_ExecutablePath_x64_x64)
如本文 2.3 章中“VS2017 打开 tf_core_kernels.vcxproj”部分所示
结论
通过手工编译 Tensorflow 源码来支持 AVX/AVX2 指令,可以消除运行 Tensorflow 程序时烦人的 warning 提示,并且可以获得比官方预编译版本更快的 Tensorflow 学习/推理速度,节省了 Tensorflow 开发者的时间。
pip安装 Tensorflow 安装包的更多相关文章
- 【pycharm】在pycharm上,使用python的pip安装tensorflow过程
如题:在pycharm上,使用python的pip安装tensorflow过程 最后成功安装的版本信息是: python版本是3.6.5 pip版本是9.0.1 pycharm版本是2018.1 te ...
- Python使用pip安装TensorFlow模块
1.首先确保已经安装python,然后用pip来安装matplotlib模块. 2.进入到cmd窗口下,建议执行python -m pip install -U pip setuptools进行升级. ...
- arcgis安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法
安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法 windows/temp目录相关权限不对,右击temp文件夹,选择管理员获取所有权限.
- Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法
原文:Installshield关于.NET安装时需要重启动的处理办法,以及延伸出的重启后继续安装的安装包的一点想法 很多朋友做安装包的时候,所打包的软件需要.NET Framework之类的环境,他 ...
- vs2017离线安装且安装包不占用C盘空间
[参考]vs2017离线安装且安装包不占用C盘空间 第一步:下载离线安装包 https://www.visualstudio.com/zh-hans/downloads/ 在官方地址下载vs_prof ...
- 在Win10中,在安装msi安装包的时候常常会出现代码为2502、2503的错误。
前言:在Win10中,在安装msi安装包的时候常常会出现代码为2502.2503的错误.其实这种错误是由于安装权限不足造成的,可以这种msi的安装包不像其他exe的安装程序,在安装包上点击“右键”之后 ...
- Pip安装TensorFlow报错:MemoryError
问题描述 使用pip安装TensorFlow时,一直报错,情况如下: 解决办法 使用如下命令可正常安装: pip3 install --no-cache-dir tenstoflow --no-cac ...
- 趟坑:使用pip安装TensorFlow
这几天在安装TensorFlow,看了很多教程,方法也试了几种. 最后还是用pip安装成功的,过程如下. 1.安装ubuntu后在 系统设置-软件与更新-附加驱动 里,更新N卡驱动. (N卡官网下载 ...
- VS2015 安装mvc4安装包以及vs2010 sp1后导致Razor语法失效代码不高亮(能正常运行)/视图页面无法智能提示(.cshtml)解决办法
VS2015默认asp.net mvc 版本为5.0以上,默认不支持创建5.0以下的版本.所以想要使用mvc 4.0只能单独安装.在网上搜了几篇教程后在微软官网下载了Visual Studio 201 ...
随机推荐
- UVALive 3983 Robotruck (单调队列,dp)
如果状态定义为序号和重量的话,决策就是下一个垃圾捡或者不减,但是状态数太多了. 如果只定义序号作为状态的话,决策就变成从前面的某个j一直捡到i才送回垃圾. 这就变成了一个区间选最小值的问题,用单调队列 ...
- Spark 配置整理
Spark 的配置有很多,这里一方面总结一下官方文档中的内容,一方面将网上查到的资料中用到的针对特定问题的配置整理一下. 先看一下官网的配置:http://spark.apache.org/docs/ ...
- Python-OpenCV中的filter2D()函数
使用自定义内核对图像进行卷积.该功能将任意线性滤波器应用于图像.支持就地操作.当光圈部分位于图像外部时,该功能会根据指定的边框模式插入异常像素值. 语法 函数原型: dst=cv.filter2D(s ...
- idea存留
1.导师匿名评价系统 类似看准网 2.在线降重软件 基于翻译api,或者后期写算法 在线查重导流 公众号: e搜罗
- Mac OS X El Capitan系统完整性保护System Integrity Protection (SIP)
http://blog.csdn.net/yulimin/article/details/49992031 引言:前段时间经历了XCode编译器代码被注入的事件后,这次 Mac OS X El Cap ...
- 《队长说得队》【Alpha】Scrum meeting 5
项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 ...
- C#数组排序方法
在C#中常用的数组排序的方法有:选择排序法.冒泡排序法.插入排序法和希尔排序法等. 一.选择排序法 using System;using System.Collections.Generic;usin ...
- 【dsu || 线段树合并】bzoj4756: [Usaco2017 Jan]Promotion Counting
调半天原来是dsu写不熟 Description The cows have once again tried to form a startup company, failing to rememb ...
- java版RSA工具类
/** * RSA算法加密/解密工具类 */ public class RSAUtils { private static final Logger LOGGER = LoggerFactory.ge ...
- 点击tr实现选择checkbox功能,点击checkobx的时候阻止冒泡事件, jquery给checkbox添加checked属性或去掉checked属性不能使checkobx改变状态
给tr添加点击事件,使用find方法查找tr下的所有层级的元素,children只查找下一层级的元素,所以使用find.find的返回值为jquery对象,在这个项目中不知道为什么使用jquery给c ...