Tensorflow 安装教程

在文章复现的时候发现,大部分经典文章采用的框架都是tensorflow 1.x版本,然而1.x版本限制了cuda10版本,现如今2025年cuda版本早就在12了,只能支持tensorflow2.x版本的,但使用2.x版本的时候有需要将源代码进行修改使其能兼容1.x版本。为了在安装1.x版本的同时又不对cuda版本进行降级由此写下这篇文章。

思路:用 conda 在虚拟环境中安装 CUDA 10.x 运行时cuDNN 7,与系统驱动解耦;然后安装 tensorflow-gpu==1.15.5。这样既能跑 TF1.x,又不影响全局 CUDA 12+ 环境。


1) 环境准备与约束

  • 操作系统:建议 Linux x86_64(TF1.x GPU 官方 wheel 主要面向该平台)。
  • Python 版本3.7(TF1.15.x 最稳)。
  • NVIDIA 驱动:需兼容 CUDA 10.x(一般较新的驱动向后兼容;无需卸载或降级系统驱动)。

2) 快速安装步骤(GPU)

2.1 创建并进入 conda 环境

conda create -n TF1 python=3.7 -y
conda activate TF1

2.2 在环境内安装 CUDA 10.x 与 cuDNN 7

当前用的是 10.1 + cuDNN 7.6.5;若遇到缺库报错,可改用 cudatoolkit=10.0 试一下。

conda install cudatoolkit=10.1 cudnn=7.6.5 -c conda-forge -c nvidia

2.3 安装 TensorFlow 1.15.5(GPU)

pip install "tensorflow-gpu==1.15.5"
# 让 TF 在本环境内能找到 cudatoolkit/cuDNN 的动态库
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH"

3) 验证 GPU 是否可用

python - <<'PY'
import os, glob, tensorflow as tf
print("TF version:", tf.__version__)
print("Built with CUDA:", tf.test.is_built_with_cuda())
print("GPU available:", tf.test.is_gpu_available(cuda_only=True))
print("cuDNN libs:",
      [os.path.basename(p) for p in glob.glob(os.path.join(os.environ.get("CONDA_PREFIX",""), "lib", "libcudnn.so*"))][:3])
PY

预计输出:

  • 版本:1.15.5
  • Built with CUDA: True
  • GPU available: True
  • 能列出 libcudnn.so*

4) 常见兼容包固定(避免新版本不兼容)

你的固定组合是合理的,直接照用:

pip install --no-cache-dir "protobuf==3.19.6"
pip install --no-cache-dir "numpy==1.19.5" "h5py==2.10.0"

5) 常见问题

A. ImportError: libcublas.so.10.0/10.1 not found

  • 原因:TF1.15 的 wheel 需 10.x 的 CUDA 运行库。

  • 解决:在 当前 conda 环境 内安装对应 cudatoolkit(10.0 或 10.1)与 cudnn,并确认:

    echo $CONDA_PREFIX
    ls $CONDA_PREFIX/lib/libcublas.so*
    ls $CONDA_PREFIX/lib/libcudnn.so*
    

    若还不行,导出库路径:

    export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH"
    

B. TypeError / AttributeErrorprotobuf>=4 相关

  • 解决:把 protobuf 固定到 3.19.x

C. h5py/numpy ABI 不兼容

  • 解决:按上面的固定版本来(h5py==2.10.0, numpy==1.19.5)。

D. 看得到 GPU,但 TF 报 OOM 或分配失败

  • 试试按需增长:

    import tensorflow as tf
    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    sess = tf.Session(config=config)
    

E. 明明装了 GPU 版,却只跑 CPU

  • 检查是否进入了正确的 conda 环境(which pythonpip show tensorflow-gpu)。
  • 检查是否误设置了 CUDA_VISIBLE_DEVICES=""
  • 再次确认 LD_LIBRARY_PATH 指向了 $CONDA_PREFIX/lib

6) 在 TF2.x 中复现 TF1.x 代码

TF2.x 上跑 1.x ,要加入:

import tensorflow as tf
tf.compat.v1.disable_eager_execution()
sess = tf.compat.v1.Session()
# 其余 1.x API 用 tf.compat.v1.* 访问

7) 可选:容器方案(避免污染宿主)

如果你的团队更偏好可移植方案,可以选 CUDA 10.x + cuDNN 7 的基础镜像,在容器内用上面相同的步骤 pip install tensorflow-gpu==1.15.5 并挂载数据目录。适合多人复现与集群任务。


8) 完整流程

# 1) env
conda create -n TF1 python=3.7 -y
conda activate TF1

# 2) CUDA runtime & cuDNN in env
conda install cudatoolkit=10.1 cudnn=7.6.5 -c conda-forge -c nvidia

# 3) TF1 GPU
pip install "tensorflow-gpu==1.15.5"
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH"

# 4) pins
pip install --no-cache-dir "protobuf==3.19.6"
pip install --no-cache-dir "numpy==1.19.5" "h5py==2.10.0"

# 5) verify
python - <<'PY'
import os, glob, tensorflow as tf
print("TF version:", tf.__version__)
print("Built with CUDA:", tf.test.is_built_with_cuda())
print("GPU available:", tf.test.is_gpu_available(cuda_only=True))
print("cuDNN libs:", [os.path.basename(p) for p in glob.glob(os.path.join(os.environ.get("CONDA_PREFIX",""), "lib", "libcudnn.so*"))][:3])
PY
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐