TensorFlow(以下简称tf)有两个巨大的问题:第一,代码复杂,冗长;第二,各版本之间api变化剧烈。这两个问题导致各种大坑。解决这两个问题,优先使用docker部署,其次,必须写requirements指定版本。
tf、python、cuda、cudnn必须严格匹配,否则行为会不可预计。对应关系可以参考:TensorFlow版本配套关系表
由匹配表可知,所有版本都支持python2.7和python3.6,考虑到兼容性问题,优先统一使用anaconda 进行安装:1)cpu版tf,anaconda可以创建多个虚拟环境,每个虚拟环境均使用python3.6,安装不同的tf版本;2)gpu版tf,anaconda创建多个虚拟环境,每个虚拟环境均使用python3.6,对照版本配套关系表,根据tf的版本选择对应的cuda和cudnn的版本。
1.安装cpu版的tf
1.1 下载anacodna3
wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
1.2 安装anaconda3,参考文档 https://docs.anaconda.com/anaconda/install/linux/
apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6 |
bash Anaconda3-2019.03-Linux-x86_64.sh
选择安装目录/home/xxxx/usr/anaconda/anaconda3
由conda进行初始化
安装完毕后,开一个新的terminal,提示符号前有(base),运行“conda -h”,有帮助信息出现,表明安装成功。
2.安装tensorflow
2.1 先创建一个新的环境,该环境python版本3.6,准备安装tf1.8.0
conda create -n tf1.8.0 python=3.6
2.2 安装cpu版的tf
conda acitvate tf1.8.0
pip install tensorflow=1.8.0
2.3 列出所有虚拟环境
conda env list
3.一个极简单的例子a.py,出自tf官网,稍微改动循环和print语句
import tensorflow as tf
import numpy as np
# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300
# 构造一个线性模型
#
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b
# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# 初始化变量
init = tf.initialize_all_variables()
# 启动图 (graph)
sess = tf.Session()
sess.run(init)
# 拟合平面
for step in range(0, 201):
sess.run(train)
if step % 20 == 0:
print( step, sess.run(W), sess.run(b))
运行 python a.py
输出:
0 [[ 0.73350215 -0.35192442]] [0.51274]
20 [[0.21187824 0.11603166]] [0.28335908]
40 [[0.12922443 0.19301133]] [0.2881235]
60 [[0.10951589 0.20137715]] [0.29429254]
80 [[0.10355849 0.20123121]] [0.29750484]
100 [[0.10142089 0.2006139 ]] [0.2989421]
120 [[0.10058274 0.20027132]] [0.2995563]
140 [[0.10024147 0.20011549]] [0.29981458]
160 [[0.10010044 0.20004849]] [0.29992265]
180 [[0.10004186 0.2000203 ]] [0.29996774]
200 [[0.10001743 0.20000844]] [0.29998657]
4.要解决的问题
anaconda3的安装,涉及到一堆问题,以及各种配置。把一台机器上的anaconda目录和.barch的conda配置部分,复制到另一台机器上,是不是可以直接使用?有待验证。按理来说是可以的。因为安装过程只涉及这两个东西。如果能做到这样,方便程度应该会好很多。可以进行批量自动化的安装。