docker 安装 基于python3.6 的 tensorflow-gpu

dockerhub 上 如图,官方提供了很多tensorflow的镜像,可根据自己的驱动,cuda版本使用对应的镜像,具体使用方式参考tensorflow 官方docker安装文档 https://www.tensorflow.org/install/docker?hl=zh-cn

docker 安装 基于python3.6 的 tensorflow-gpu

 但是这些镜像存在一些不足,例如镜像 的系统环境是ubuntu,python 版本是3.5等等,为了解决这些问题,自己手工制作了一个 python3.6 ,tensorflow-gpu ==1.12 的tensorflow 镜像

主要安装过程如下:

1. 查看显卡环境

# 查看 显卡型号
lspci | grep -i nvidia
# 查看显卡驱动
nvidia-smi
# 查看cuda 版本
nvcc -V
# 查看cudnn 的版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
2.dockerhub 上搜索cuda 镜像根据自己的cuda 版本,cudnn 版本,操作系统环境 选择 镜像 ,并pull到本地,本人使用了9.0-cudnn7-devel-centos7
docker pull nvidia/cuda:9.0-cudnn7-devel-centos7

3. 启动镜像,配置自己的环境

  • docker images 查看 镜像ID
  • 启动 docker 容器,命令如下: 
docker run --runtime=nvidia -it -v <服务器本地路径>:<docker容器路径> 镜像ID bash

其中  --runtime=nvidia 为nvidia_docker 执行的固定格式, -v 挂载 磁盘路径 ,防止docke人执行过程中文件丢失

4. docker 容器内配置环境

  1. 检查 容器内是否能够联网 ,不能联网 请设置代理
    # 检查网络
    curl www.baidu.com
    # 设置代理 代理地址自己配置
    export http_proxy="http://192.168.1.1:8080"
    export https_proxy="http://192.168.1.1::8080"

     

  2. 安装python3.6
    # 更新系统环境
    yum install epel-release
    yum install https://centos7.iuscommunity.org/ius-release.rpm
    # 安装 vim
    yum -y install vim*
    # 安装 python 3.6
    yum install python36u
    # 安装 pip 
    yum install python36u-pip
    # 添加软连接
    ln -s /bin/python3.6 /bin/python3
    ln -s /bin/pip3.6 /bin/pip3
    # 更新 pip 和 setuptools
    python3.6 -m pip install --no-cache-dir -U pip
    python3.6 -m pip install --no-cache-dir -U setuptools

     

  3. 安装tensorflow
    python3.6 -m pip install --no-cache-dir ipython requests numpy pandas quandl
    # 注意修改 tensorflow 的版本号
    python3.6 -m pip install --no-cache-dir tensorflow-gpu==1.12.0rc0

     

  4. 设定 python 系统默认版本 ,并修改 yum 的python 依赖
    更改 yum 的python依赖 共两个文件 /usr/bin/yum 和# /usr/libexec/urlgrabber-ext-down
    # vi /usr/bin/yum
    #!/usr/bin/python2
    
    # vi /usr/libexec/urlgrabber-ext-down
    #!/usr/bin/python2
    
    # 更新 yum
    yun update
    
    # 设定 python 默认版本
    rm -rf /bin/python && ln -s /bin/python3 /bin/python

     

  5. 安装环境校验
    1. 检查python 版本
    2. 检查 pip: pip -v
    3. 检查yum : yum info python
    4. 检查 tensorflow gpu 是否安装成功 ,官方提供的检验代码地址:https://www.tensorflow.org/guide/using_gpu
#coding:utf-8

import tensorflow as tf

print (tf.__version__)
# 单GPU 检测
with tf.device('/device:GPU:0'):
  a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
  b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
  c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))
# 多GPU 检测
c = []
for d in ['/device:GPU:2', '/device:GPU:3']:
  with tf.device(d):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3])
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2])
    c.append(tf.matmul(a, b))
with tf.device('/cpu:0'):
  sum = tf.add_n(c)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(sum))

6. 容器保存

另起一个终端,保存 修改后的容器保存成镜像

# 查看容器Id
docker ps

# 容器保存
docker commit <容器Id> <容器名称>

 

6 .其他

 

使用docker 开发 启动容器时,一定要注意命令参数的格式,记得挂载服务器地址

到此 docker 安装tensorflow 已经完全完成,上述所有命令如下:

yum install epel-release
# export http_proxy="http://192.168.1.1:8080"
# export https_proxy="http://192.168.1.1:8080"
yum install epel-release
yum -y install vim*
yum install https://centos7.iuscommunity.org/ius-release.rpm
yum install python36u
yum install python36u-pip
ython3.6 -m pip install --no-cache-dir -U pip
python3.6 -m pip install --no-cache-dir -U setuptools
python3.6 -m pip install --no-cache-dir ipython requests numpy pandas quandl
python3.6 -m pip install --no-cache-dir tensorflow-gpu==1.12.0rc0
vim /usr/bin/yum
vim /usr/libexec/urlgrabber-ext-down
ln -s /bin/python3.6 /bin/python3
rm -rf /bin/python && ln -s /bin/python3 /bin/python
yum update
pip -V
yum info python
vim gpu_test.py
python gpu_test.py