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

自建TensorFlow GPU Docker镜像
本文介绍如何从头创建一个自定义的Docker镜像,包含Python 3.6和TensorFlow GPU 1.12,适用于特定的CUDA和cuDNN版本。文章详细记录了从检查显卡环境、选择基础镜像、配置Python环境到安装TensorFlow的全过程,以及如何验证安装正确性和保存定制镜像。

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

 但是这些镜像存在一些不足,例如镜像 的系统环境是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

 

LibMambaUnsatisfiableError: Encountered problems while solving: - package tensorflow-gpu-1.10.0-hf154084_0 requires tensorflow 1.10.0, but none of the providers can be installed Could not solve for environment specs The following packages are incompatible ├─ pin-1 is installable and it requires │ └─ python 3.12.* , which can be installed; └─ tensorflow-gpu is not installable because there are no viable options ├─ tensorflow-gpu 1.1.0 would require │ └─ python 3.5* , which conflicts with any installable versions previously reported; ├─ tensorflow-gpu [1.1.0|1.11.0|1.12.0] would require │ ├─ python 3.6* , which conflicts with any installable versions previously reported; │ └─ tensorflow [1.11.0 |1.12.0 ], which requires │ └─ python 3.6.* , which conflicts with any installable versions previously reported; ├─ tensorflow-gpu [1.10.0|1.9.0] would require │ └─ tensorflow [1.10.0 |1.9.0 ] but there are no viable options │ ├─ tensorflow [1.10.0|1.9.0] would require │ │ └─ python 3.5.* , which conflicts with any installable versions previously reported; │ └─ tensorflow [1.10.0|1.11.0|...|2.1.0], which cannot be installed (as previously explained); ├─ tensorflow-gpu [1.13.1|1.14.0|1.15.0|2.0.0|2.1.0] would require │ └─ tensorflow [1.13.1 |1.14.0 |1.15.0.* |2.0.0 |2.1.0 ] but there are no viable options │ ├─ tensorflow [1.10.0|1.11.0|...|2.1.0], which cannot be installed (as previously explained); │ └─ tensorflow [1.13.1|1.14.0|...|2.6.0] would require │ └─ python 3.7.* , which conflicts with any installable versions previously reported; ├─ tensorflow-gpu 1.8.0 would require │ └─ tensorboard >=1.8.0,<1.9.0 but there are no viable options │ ├─ tensorboard 1.8.0 would require │ │ └─ python >=3.10,<3.11.0a0 , which conflicts with any installable versions previously reported; │ ├─ tensorboard 1.8.0 would require │ │ └─ python >=3.5,<3.6.0a0 , which conflicts with any installable versions previously reported; │ └─ tensorboard 1.8.0 would require │ └─ python >=3.6,<3.7.0a0 , which conflicts with any installable versions previously reported; ├─ tensorflow-gpu 2.3.0 would require │ └─ tensorflow 2.3.0 but there are no viable options │ ├─ tensorflow [1.13.1|1.14.0|...|2.6.0], which cannot be installed (as previously explained); │ └─ tensorflow [2.3.0|2.5.0|2.6.0] would require │ └─ python 3.8.* , which conflicts with any installable versions previously reported; └─ tensorflow-gpu [2.5.0|2.6.0] would require └─ tensorflow [2.5.0 |2.6.0 ] but there are no viable options ├─ tensorflow [1.13.1|1.14.0|...|2.6.0], which cannot be installed (as previously explained); ├─ tensorflow [2.3.0|2.5.0|2.6.0], which cannot be installed (as previously explained); └─ tensorflow [2.5.0|2.6.0] would require └─ python 3.9.* , which conflicts with any installable versions previously reported. Pins seem to be involved in the conflict. Currently pinned specs: - python 3.12.* (labeled as &#39;pin-1&#39;)
最新发布
08-17
<think>我们正在解决TensorFlow GPU版本在安装时出现的依赖冲突问题,特别是LibMambaUnsatisfiableError,并且Python版本被锁定在3.12.*的情况。 首先,我们需要了解问题背景: - TensorFlow GPU版本(tensorflow-gpu)需要特定的CUDA和cuDNN版本支持,同时有严格的Python版本要求。 -Python 3.12.*环境下,由于TensorFlow官方可能尚未提供对Python 3.12的预构建包,因此容易导致依赖冲突。 - 错误`LibMambaUnsatisfiableError`通常是由于conda(或mamba)在解决环境依赖时找不到满足所有依赖条件的包版本。 解决方案思路: 1. 确认TensorFlowPython 3.12的兼容性:目前(截至2024年)TensorFlow官方发布的稳定版本(如2.15)可能尚未支持Python 3.12。因此,可能需要使用较新的TensorFlow版本(如2.16.0或更高)或降级Python版本。 2. 由于用户要求Python版本锁定在3.12.*,我们尝试寻找支持Python 3.12的TensorFlow版本。根据TensorFlow官方发布信息,从TensorFlow 2.16.0开始支持Python 3.12(参考:https://github.com/tensorflow/tensorflow/releases/tag/v2.16.0)。 3. 使用conda/mamba安装时,指定正确的TensorFlow版本和对应的CUDA/cuDNN依赖。 具体步骤: 步骤1:创建一个新的conda环境(推荐,以避免破坏现有环境) 步骤2:尝试安装支持Python 3.12的TensorFlow GPU版本(>=2.16.0) 步骤3:如果步骤2失败,考虑使用pip安装,因为conda仓库的更新可能滞后。 详细步骤: 方案A:使用conda/mamba安装(推荐使用mamba,因为它更快且能更好地解决依赖) ```bash # 创建新环境并指定Python 3.12 conda create -n tf_gpu python=3.12 conda activate tf_gpu # 安装mamba(如果尚未安装) conda install -n base -c conda-forge mamba # 使用mamba安装tensorflow-gpu(注意:tensorflow-gpu包在conda-forge上,但官方推荐使用tensorflow包,它已经包含GPU支持) # 根据conda-forge,tensorflow包支持Python 3.12,但需要指定版本>=2.16.0 mamba install -c conda-forge tensorflow=2.16.0 ``` 方案B:使用pip安装(如果conda安装失败) ```bash # 创建并激活环境(同上) conda create -n tf_gpu python=3.12 conda activate tf_gpu # 使用pip安装TensorFlow(官方PyPI包) pip install tensorflow==2.16.0 ``` 注意:安装完成后,需要验证GPU是否可用: ```python import tensorflow as tf print(tf.config.list_physical_devices(&#39;GPU&#39;)) ``` 如果上述方法仍然出现依赖冲突,可以考虑以下备选方案: 1. 检查CUDA和cuDNN版本:TensorFlow 2.16.0需要CUDA 11.8和cuDNN 8.6。如果系统没有安装,可以使用conda安装: ```bash mamba install -c conda-forge cudatoolkit=11.8.0 cudnn=8.6.0 ``` 然后设置环境变量(在激活环境后): ```bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/ ``` 或者使用conda的自动设置(将cudatoolkit和cudnn与tensorflow一起安装)。 2. 如果使用pip安装,也可以尝试安装tensorflow-cpu,但用户需要GPU版本,所以不推荐。 3. 如果上述所有方法都失败,可能需要考虑使用Docker容器,但用户可能希望直接在主机上运行。 引用说明: [^1]: TensorFlow 2.16.0开始支持Python 3.12,详见官方发布说明:https://github.com/tensorflow/tensorflow/releases/tag/v2.16.0 生成相关问题: 1. 如何验证TensorFlow是否正在使用GPU? 2.安装TensorFlow GPU版本时,如何正确安装CUDA和cuDNN? 3. 如果使用conda安装后,TensorFlow找不到GPU,应该如何排查?</think>### 解决 TensorFlow-GPU 安装依赖冲突(Python 3.12 锁定) #### 问题分析 `LibMambaUnsatisfiableError` 表明 conda/mamba 无法解决依赖冲突,主要原因是: 1. **Python 3.12 兼容性**:TensorFlow 官方从 2.16.0 开始支持 Python 3.12[^1],旧版本(如 2.15)不兼容 2. **CUDA 工具链限制**:TensorFlow-GPU 需要特定版本的 CUDA/cuDNN,与 Python 3.12 存在依赖冲突 3. **包源不一致**:conda-forge 和默认源可能提供不兼容的依赖组合 --- ### 解决方案(逐步操作) #### 方法 1:安装 TensorFlow 2.16+(推荐) ```bash # 创建新环境(避免冲突) conda create -n tf_gpu python=3.12 conda activate tf_gpu # 通过 conda-forge 安装(包含 GPU 支持) mamba install -c conda-forge tensorflow=2.16.0 ``` > ✅ 验证安装: > ```python > import tensorflow as tf > print(tf.config.list_physical_devices(&#39;GPU&#39;)) # 应显示 GPU 设备 > ``` #### 方法 2:手动解决依赖链 ```bash # 1. 强制安装核心依赖 mamba install -c conda-forge cudatoolkit=11.8 cudnn=8.6 python=3.12 # 2. 安装 TensorFlow(通过 pip) pip install tensorflow==2.16.0 # 3. 设置环境变量 export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH ``` #### 方法 3:使用 Docker 容器(彻底隔离) ```bash # 使用官方 TensorFlow GPU 镜像 docker run --gpus all -it tensorflow/tensorflow:2.16.0-gpu ``` --- ### 关键注意事项 1. **CUDA 版本要求**:TensorFlow 2.16 需要 CUDA 11.8[^1] 2. **驱动兼容性**:确保 NVIDIA 驱动 ≥ 520.x(通过 `nvidia-smi` 检查) 3. **虚拟环境**:必须使用独立环境(避免与其他包冲突) 4. **备选方案**:若仍失败,可尝试降级 Python: ```bash conda create -n tf_gpu python=3.11 mamba install -c conda-forge tensorflow=2.15 ``` > 📌 引用说明: > [^1]: TensorFlow 2.16 开始支持 Python 3.12,详见官方发布说明:[Release Notes](https://github.com/tensorflow/tensorflow/releases/tag/v2.16.0) --- ### 相关问题 1. 如何验证 TensorFlow 是否成功调用了 GPU? 2. 在 Windows 系统上安装 TensorFlow-GPU 有哪些额外注意事项? 3. 如何解决 `Could not load dynamic library &#39;libcudnn.so.8&#39;` 类错误?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值