如何重新安装从源码编译生成的TensorFlow .whl文件?
我来帮你梳理两种场景下的具体操作步骤,都是亲测靠谱的方案:
方案一:降级编译主机到CUDA 9.0,重新编译适配目标主机的TensorFlow
这种方案适合不想改动目标主机环境的情况,编译出的包能直接在CUDA 9.0的机器上运行:
- 先清理现有CUDA 9.1环境
- 打开Windows控制面板→程序和功能,找到所有带「CUDA Toolkit 9.1」的条目,挨个卸载,包括配套的NVIDIA驱动、单独安装的cuDNN也要一起删掉
- 手动清理残留:删掉
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1文件夹,再去系统环境变量里移除CUDA_PATH、CUDA_PATH_V9_1这些相关条目
- 安装CUDA 9.0+适配的cuDNN
- 下载对应Windows版本的CUDA Toolkit 9.0,安装选「自定义」模式,只勾选你需要的组件(比如CUDA Runtime、开发工具这些),路径默认就行
- 下载TensorFlow r1.6.0适配的cuDNN版本(推荐cuDNN 7.0.5),解压后把
bin、include、lib里的文件分别复制到CUDA 9.0目录下的同名文件夹里(比如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin) - 配置环境变量:添加
CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0,再把%CUDA_PATH%\bin、%CUDA_PATH%\libnvvp加到系统Path里
- 重新编译TensorFlow r1.6.0
- 进入之前克隆的r1.6.0源码目录,先清掉旧编译缓存:
bazel clean - 重新配置编译参数:运行
./configure,遇到CUDA版本提示时输入9.0,cuDNN版本输入对应的7.0.5,其他参数(比如Python路径、GPU架构)按你之前的配置来就行 - 编译生成.whl包:执行
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package - 导出pip包:
bazel-bin\tensorflow\tools\pip_package\build_pip_package D:\tf_output(这里D:\tf_output是你自己指定的输出文件夹)
- 进入之前克隆的r1.6.0源码目录,先清掉旧编译缓存:
- 部署到目标主机
- 把生成的.whl文件复制到CUDA 9.0的目标机器上
- 先卸载目标机上旧的TensorFlow:
pip uninstall tensorflow-gpu -y - 安装新编译的包:
pip install D:\tf_output\tensorflow_gpu-1.6.0-cpXX-cpXXm-win_amd64.whl(XX替换成你的Python版本,比如36对应Python3.6)
方案二:升级目标主机到CUDA 9.1,直接用现有编译好的.whl
如果目标主机允许升级CUDA,这个方案更省时间,不用重新编译:
- 卸载目标主机的CUDA 9.0
- 同样通过控制面板卸载所有CUDA 9.0相关组件,清理残留文件夹和环境变量
- 安装CUDA 9.1+适配的cuDNN
- 下载对应Windows版本的CUDA Toolkit 9.1,自定义安装组件
- 下载适配CUDA 9.1的cuDNN(推荐cuDNN 7.1.4),解压后复制文件到CUDA 9.1的对应目录
- 配置环境变量:把
CUDA_PATH设为v9.1的路径,对应的bin目录加到系统Path
- 安装现有.whl包
- 卸载目标机上旧的TensorFlow:
pip uninstall tensorflow-gpu -y - 安装你之前用CUDA9.1编译好的.whl文件:
pip install 你的whl文件完整路径
- 卸载目标机上旧的TensorFlow:
额外注意事项
- 不管选哪种方案,编译主机和目标主机的Python版本必须一致,不然.whl包会安装失败
- 编译时要注意GPU架构参数,比如你的新GPU如果是Pascal架构(比如1080Ti),配置时要输入
6.1,如果是更新的架构,r1.6.0可能支持有限,要提前确认适配性 - 安装完成后可以跑个简单代码验证:
如果输出import tensorflow as tf with tf.Session() as sess: print(tf.test.is_gpu_available())True,说明环境适配成功了
内容的提问来源于stack exchange,提问作者omatai
相关产品推荐
相关产品推荐

