【TensorFlow实战——笔记】第3章:TensorFlow第一步_TensorFlow的编译及安装
3.1 TensorFlow的编译及安装
安装有两种情况
- 使用CPU,安装容易
- 使用GPU,需要先安装CUDA和cuDNN,比较复杂
不管哪种情况,我们都推荐使用Anaconda作为Python的环境,因为可以避免大量的兼容性问题。
TensorFlow目前支持比较完善的是Linux和Mac(对Windows的支持还不太全面)。而Mac系统主要使用CPU版本(Mac系统很少使用NVIDIA显卡,而目前TensorFlow对CUDA支持得比较好,对AMD的OpenCL支持还属于实验阶段),安装方式和Linux的CPU方式基本一致。
安装Anaconda
Anaconda是Python的一个科学计算发行版,内置了数百个Python经常会使用的库,也包括许多我们做机器学习或数据挖掘的库,包括Scikit-learn、NumPy、SciPy和Pandas等,其中可能有些是TensorFlow的依赖库。
Anaconda的下载地址:
Mac下有两种安装方式,一种是窗口式的安装程序(.pkg),一种是命令行安装程序(.sh),一般选择第二种。下载后执行以下命令:
bash Anaconda3-4.4.0-MacOSX-x86_64.sh
TensorFlow CPU版本的安装
TensorFlow的CPU版本相对容易安装,一般分为两种情况,一种是安装编译好的release版本,推荐大部分用户安装这种版本;第二种使用分支源码进行编译安装。
第一种安装release版本,到https://github.com/tensorflow/tensorflow下载最新的release版本(.whl)到本地,然后本地执行:
pip install --gpgrade tensorflow-1.3.0rc0-py3-none-any.whl
第二种使用源码编译安装,先确保系统安装了gcc(版本最好介于4.8~5.4之间),还要确保安装了构建工具bazel。bazel是Google自家的编译工具,以快速、可扩展、灵活、可靠著称,下载安装方式如下地址:
安装步骤:
(1) 下载源码包,解压
wget https://github.com/tensorflow/tensorflow/archive/v1.3.0-rc0.tar.gz
tar -zxvf v1.3.0-rc0.tar.gz
(2) 进入源码目录,配置
cd tensorflow-1.3.0-rc0
./configure
- 选择Python路径,确保使用Anaconda的Python路径
- 选择CPU编译优化选项,默认-march=native就好
- 是否使用jemalloc作为默认的malloc实现(仅linux),默认就好
- 是否开启Google云平台支持,选择否
- 是否需要支持Hadoop File System,如果需要读取HDFS数据,就选择yes
- 是否开启XLA JIT编译功能,建议选no
- 选择Python的Library路径,依然使用Anaconda的路径
- 不选择使用GPU,包括OpenCL和CUDA
(3) 执行编译
bazel build --copt=-march=native -c opt //tensorflow/tools/pip_package:build_pip_package
(4) 编译结束,生成pip安装包
bazel-bin/tensonflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
(5) 最后安装
pip install /tmp/tensorflow_pkg/tensorflow-xxx-xxx-xxx-xxx.whl
TensorFlow GPU版本的安装
TensorFlow的GPU版本安装相对复杂。首先需要NVIDIA显卡,然后安装显卡驱动、CUDA和cuDNN。
CUDA的安装
CUDA是NVIDIA推出使用GPU资源进行通用计算(Genral Purpose GPU)的SDK,安装包里一般集成了显卡驱动。
先下载NVIDIA CUDA:
(1) 暂停NVIDIA驱动的X server
sudo init 3
(2) 将CUDA的安装包权限设置成可执行,并安装
chmod u+x cuda_8.0.61_375.26_linux.run
sudo ./cuda_8.0.61_375.26_linux.run
(3) 按q键跳过协议说明,并接受协议后选择安装驱动程序
(4) 选择安装路径,一般默认/usr/local/cuda-8.0
(5) 不安装CUDA例子
(6) 安装完毕
cuDNN的安装
cuDNN是NVIDIA推出的深度学习中CNN和RNN的高度优化的实现。
下载cuDNN:
进入安装目录并解压包
cd /usr/local
sudo tar -zxvf cudnn-8.0-linux-x64-v5.1.tgz
这样就完成了cuDNN的安装。
CUDA的环境变量设置
vim ~/.bashrc
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-8.0
export PATH=/usr/local/cuda-8.0/bin:$PATH
source ~/.bashrc
安装TensorFlow
先到https://github.com/tensorflow/tensorflow下载最新的GPU release版本(.whl)到本地,执行:
pip install --gpgrade tensorflow_gpu-1.3.0rc0-cp35-cp35m-linux_x86_64.whl
然后一步步选择安装完成。
- [WCF权限控制]模拟(Impersonation)与委托(Delegation)[上篇]
- Android EclipseIDE技巧
- 什么是编译错误,运行时错误及逻辑错误?
- 我的WCF之旅(4):WCF中的序列化[上篇]
- WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]
- 微信年度重磅“小游戏”上线,罗胖一度退出的小程序正在逆袭
- 谈谈WCF中的Data Contract(2):WCF Data Contract对Generic的支持
- Android注解学习(1)
- [WCF权限控制]ASP.NET Roles授权[上篇]
- [WCF权限控制]ASP.NET Roles授权[下篇]
- 如何解决分布式系统中的跨时区问题[实例篇]
- Visual Studio对程序集签名时一个很不好用的地方
- 一个关于解决序列化问题的编程技巧
- [WCF权限控制]从两个重要的概念谈起:Identity与Principal[上篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何用Python实现电子邮件的自动化
- 在Win下安装Visual Studio和Parallel Studio XE
- 我们将项目语言从Python转向Go的5个原因
- GFN-xTB的编译与API使用
- 红外光谱的理论计算
- 一起刷题(leetcode)第二篇:如何用Python实现递归
- 如何成为Python的数据操作库Pandas的专家?
- 谈谈Gaussian软件中的guess=mix
- 用ORCA做DLPNO-CCSD(T)计算
- Fortran调用C函数
- 在Python中创建命令行界面的最佳方式
- Diels-Alder反应的区域选择性分析
- 传说中的画图神器Plotnine,Python中的ggplot2
- 用ORCA做结构优化及轨迹查看
- 前端兼容之痛