使用Bazel从源码构建TensorFlow时出现CUDA库未找到错误
适配CUDA 3.0 GPU的TensorFlow解决方案
先回应你关于预构建版本的需求,再解决源码构建时的库缺失问题:
一、适配CUDA 3.0的预构建TensorFlow版本
由于你的GPU仅支持Compute Capability 3.0,TensorFlow从1.13版本开始就不再对该算力提供官方支持,所以你需要选择1.12及更早的版本,同时匹配你的CUDA 9.0环境:
- 推荐安装TensorFlow GPU 1.12.0,这个版本既兼容CUDA 9.0 + CuDNN 7.x,也支持Compute Capability 3.0的GPU,直接用pip安装即可:
pip install tensorflow-gpu==1.12.0 - 如果你需要更早期的版本,比如1.11.0也可以,但1.12.0是最后一个支持CC3.0的稳定版本,功能相对更完善。
二、解决源码构建时的CUDA库缺失问题
如果坚持从源码构建,你遇到的“找不到多个CUDA库”问题,大概率是环境变量配置不完整或者Bazel未正确识别CUDA路径导致的,试试以下步骤:
确认CUDA/CuDNN环境变量配置
先检查你的~/.bashrc(或~/.zshrc)里是否添加了完整的CUDA相关环境变量,添加后执行source ~/.bashrc生效:export CUDA_HOME=/usr/local/cuda-9.0 export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$CUDA_HOME/extras/CUPTI/lib64:$LD_LIBRARY_PATH export PATH=$CUDA_HOME/bin:$PATH验证配置是否生效:
- 执行
echo $CUDA_HOME,应输出/usr/local/cuda-9.0 - 执行
ldconfig -p | grep libcudart,应能看到libcudart.so.9.0的路径
- 执行
在Bazel构建命令中明确指定CUDA路径
有时候Bazel无法自动识别CUDA安装路径,你可以在构建命令里手动指定,修改后的命令如下:bazel build --config=opt --config=cuda \ --action_env=CUDA_PATH=/usr/local/cuda-9.0 \ --action_env=CUDNN_INSTALL_PATH=/usr/local/cuda-9.0 \ --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" \ //tensorflow/tools/...(注:如果你的CuDNN不是安装在CUDA目录下,需要把
CUDNN_INSTALL_PATH改成CuDNN实际路径)检查CuDNN版本与文件完整性
你提到的CuDnn 1.7.3应该是笔误吧?CUDA 9.0对应的CuDNN版本应为7.x系列(比如7.3.1),请确认:/usr/local/cuda-9.0/lib64下存在libcudnn.so.7、libcudnn.so.7.3.x(x为具体版本号)的文件- 如果缺少软链接,可手动创建:
sudo ln -s /usr/local/cuda-9.0/lib64/libcudnn.so.7.3.1 /usr/local/cuda-9.0/lib64/libcudnn.so.7 sudo ln -s /usr/local/cuda-9.0/lib64/libcudnn.so.7 /usr/local/cuda-9.0/lib64/libcudnn.so
确认CUPTI库已安装并可被访问
TensorFlow依赖CUDA的CUPTI工具库,该库位于/usr/local/cuda-9.0/extras/CUPTI/lib64,请确认这个路径已加入LD_LIBRARY_PATH,且目录下存在libcupti.so.9.0文件。
内容的提问来源于stack exchange,提问作者Connor O'Hara
相关产品推荐
相关产品推荐

