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 ...
随机推荐
- IM云通信行业步入快车道,谁将成为代表中国的全球IM“独角兽”?
2016年,Twilio的成功上市,以及抢眼的股价表现,拓宽了全球云通信行业的想象空间,行业内公司估值水平也集体上调. 在中国,IM云通信行业也从2016年开始进入了一个“黄金发展时期”,一批如融云. ...
- Kippo-Failed to load application: 'module' object has no attribute 'IPluggableAuthenticationModules'
Kippo-Failed to load application: 'module' object has no attribute 'IPluggableAuthenticationModules' ...
- 方法的重写【java语言】
1.父类 package com.wyq.study; public class Father{//书写类 //书写属性 private String name; private int age; / ...
- iOS项目工程及目录结构
做过一些iOS的项目,不同项目的沉淀没有积累到一起,目录的管理都在后期随着人员的增加越来越混乱,因此在这里做一些梳理,希望达到两个目的. 一套相对通用的目录结构,作为后续项目的模版. 积累相应的基础库 ...
- vue组件:canvas实现图片涂鸦功能
方案背景 需求 需要对图片进行标注,导出图片. 需要标注N多图片最后同时保存. 需要根据多边形区域数据(区域.颜色.名称)标注. 对应方案 用canvas实现涂鸦.圆形.矩形的绘制,最终生成图片bas ...
- 【linux】【进程】stand alone 与 super daemon 区别
本文引用自 鸟哥的linux私房菜如果依据 daemon 的启动与管理方式来区分,基本上,可以将 daemon 分为可独立启动的 stand alone , 与透过一支 super daemon 来 ...
- 逃离迷宫 HDU - 1728(bfs)
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 二叉排序树:HUD3999-The order of a Tree(二叉排序树字典序输出)
The order of a Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- MIP启发式算法:local branching
*本文主要是记录并分享最近学习到的知识,算不上原创 *参考文献见链接 本文主要是讲述local branching算法,主要以M. Fischetti的论文 “Local braching”和Pier ...
- Python中的属性访问与描述符
Python中的属性访问与描述符 请给作者点赞--> 原文链接 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个nam ...