带有tensorflow gpu的docker - ImportError:libcublas.so.9.0:无法打开共享对象文件:没有这样的文件或目录
Posted
技术标签:
【中文标题】带有tensorflow gpu的docker - ImportError:libcublas.so.9.0:无法打开共享对象文件:没有这样的文件或目录【英文标题】:docker with tensorflow gpu - ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory 【发布时间】:2018-08-30 00:02:49 【问题描述】:我正在尝试使用 Nvidia GPU 运行带有 tensorflow 的 docker,但是当我运行容器时出现以下错误:
pgp_1 | Traceback (most recent call last):
pgp_1 | File "/opt/app-root/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
pgp_1 | from tensorflow.python.pywrap_tensorflow_internal import *
pgp_1 | File "/opt/app-root/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
pgp_1 | _pywrap_tensorflow_internal = swig_import_helper()
pgp_1 | File "/opt/app-root/lib/python3.6/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
pgp_1 | _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
pgp_1 | File "/opt/app-root/lib64/python3.6/imp.py", line 243, in load_module
pgp_1 | return load_dynamic(name, filename, file)
pgp_1 | File "/opt/app-root/lib64/python3.6/imp.py", line 343, in load_dynamic
pgp_1 | return _load(spec)
pgp_1 | ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
Docker-compose
我的 docker compose 文件如下所示:
version: '3'
services:
pgp:
devices:
- /dev/nvidia0
- /dev/nvidia1
- /dev/nvidia2
- /dev/nvidia3
- /dev/nvidia4
- /dev/nvidiactl
- /dev/nvidia-uvm
image: "myimg/pgp"
ports:
- "5000:5000"
environment:
- LD_LIBRARY_PATH=/opt/local/cuda/lib64/
- GPU_DEVICE=4
- NVIDIA_VISIBLE_DEVICES all
- NVIDIA_DRIVER_CAPABILITIES compute,utility
volumes:
- ./train_package:/opt/app-root/src/train_package
- /usr/local/cuda/lib64/:/opt/local/cuda/lib64/
如您所见,我尝试使用卷将主机 cuda 映射到 docker 容器,但这没有帮助。
我能够成功运行nvidia-docker run --rm nvidia/cuda nvidia-smi
版本
库达
cat /usr/local/cuda/version.txt 显示 CUDA 版本 9.0.176
nvcc -V
nvcc -V nvcc:NVIDIA (R) Cuda 编译器驱动程序 版权所有 (c) 2005-2017 NVIDIA Corporation 建于 Fri_Sep__1_21:08:03_CDT_2017 Cuda 编译工具,9.0 版,V9.0.176
nvidia-docker 版本
NVIDIA Docker:2.0.3 客户: 版本:17.12.1-ce
API 版本:1.35
Go 版本:go1.9.4
Git 提交:7390fc6 建成时间:2018 年 2 月 27 日星期二 22:17:40
操作系统/Arch:linux/amd64
服务器: 引擎: 版本:17.12.1-ce
API 版本:1.35(最低版本 1.12)
Go 版本:go1.9.4
Git 提交:7390fc6
建成时间:2018 年 2 月 27 日星期二 22:16:13
操作系统/Arch:linux/amd64
实验:错误
张量流
1.5 支持 gpu,通过 pip
ldconfig -p | grep cuda
libnvrtc.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvrtc.so.9.0
libnvrtc.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvrtc.so
libnvrtc-builtins.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvrtc-builtins.so.9.0
libnvrtc-builtins.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvrtc-builtins.so
libnvgraph.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvgraph.so.9.0
libnvgraph.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvgraph.so
libnvblas.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvblas.so.9.0
libnvblas.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvblas.so
libnvToolsExt.so.1 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvToolsExt.so.1
libnvToolsExt.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnvToolsExt.so
libnpps.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnpps.so.9.0
libnpps.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnpps.so
libnppitc.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppitc.so.9.0
libnppitc.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppitc.so
libnppisu.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppisu.so.9.0
libnppisu.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppisu.so
libnppist.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppist.so.9.0
libnppist.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppist.so
libnppim.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppim.so.9.0
libnppim.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppim.so
libnppig.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppig.so.9.0
libnppig.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppig.so
libnppif.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppif.so.9.0
libnppif.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppif.so
libnppidei.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppidei.so.9.0
libnppidei.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppidei.so
libnppicom.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppicom.so.9.0
libnppicom.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppicom.so
libnppicc.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppicc.so.9.0
libnppicc.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppicc.so
libnppial.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppial.so.9.0
libnppial.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppial.so
libnppc.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppc.so.9.0
libnppc.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libnppc.so
libicudata.so.55 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libicudata.so.55
libcusparse.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcusparse.so.9.0
libcusparse.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcusparse.so
libcusolver.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcusolver.so.9.0
libcusolver.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcusolver.so
libcurand.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcurand.so.9.0
libcurand.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcurand.so
libcuinj64.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcuinj64.so.9.0
libcuinj64.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcuinj64.so
libcufftw.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcufftw.so.9.0
libcufftw.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcufftw.so
libcufft.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcufft.so.9.0
libcufft.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcufft.so
libcudart.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudart.so.9.0
libcudart.so.7.5 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcudart.so.7.5
libcudart.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcudart.so
libcudart.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcudart.so
libcuda.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcuda.so.1
libcuda.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcuda.so
libcublas.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcublas.so.9.0
libcublas.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcublas.so
libaccinj64.so.9.0 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libaccinj64.so.9.0
libaccinj64.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libaccinj64.so
libOpenCL.so.1 (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libOpenCL.so.1
libOpenCL.so (libc6,x86-64) => /usr/local/cuda-9.0/targets/x86_64-linux/lib/libOpenCL.so
在 Docker 与主机上使用 Tensorflow 进行测试
在主机上运行时,以下工作:
python3 -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"
v1.5.0-0-g37aa430d84 1.5.0
运行容器
nvidia-docker run -d --name testtfgpu -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow:latest-gpu
登录
nvidia-docker exec -it testtfgpu bash
测试 TensorFlow 版本
pip show tensorflow-gpu
显示:
pip show tensorflow-gpu
Name: tensorflow-gpu
Version: 1.6.0
Summary: TensorFlow helps the tensors flow
Home-page: https://www.tensorflow.org/
Author: Google Inc.
Author-email: opensource@google.com
License: Apache 2.0
Location: /usr/local/lib/python2.7/dist-packages
Requires: astor, protobuf, gast, tensorboard, six, wheel, absl-py, backports.weakref, termcolor, enum34, numpy, grpcio, mock
Python 2
python -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"
结果:
Illegal instruction (core dumped)
Python 3
python3 -c "import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)"
结果:
python3 -c "import tensorflow as tf; print(tf.GIT_
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named 'tensorflow'
【问题讨论】:
你试过这样安装吗,pip3 install --upgrade tensorflow-gpu? 【参考方案1】:问题在于您的 cuDNN 版本。 Tensorflow-GPU 1.5 版本将支持 cuDNN 7.0._ 版本。您可以从here 下载。确保您的 CUDA 版本 9.0._ 和 cuDNN 版本 7.0._ 。详情请参考here中的链接。
【讨论】:
如何查看安装的 cuDNN 版本?此外,您提供的链接 - 网址 - 包含v7.0.5
和 cudnn-9.0
- 所以我对我应该拥有哪个版本以及获得哪个版本感到困惑。
如果您使用的是 tensorflow 1.5,它将支持 CUDA 9.0._。但是你必须选择正确的 cuDNN 版本 v7.0.5 或 v7.0.4 应该支持。
我使用的是 TF 1.5。如何找出我安装了哪个版本的 cuDNN。感谢您的帮助。
您不想找到 cuDNN 版本,只需下载 v7.0.4 并解压缩并复制并粘贴到他们在站点中提到的 CUDA 文件夹。我使用了 CUDA 9.0 和 cuDNN v7.1._ 但它不起作用,然后我在它工作后将 cuDNN 版本更改为 v7.0.4。【参考方案2】:
CUDA的版本和TensorFlow的好像有冲突
首先,尝试使用nvcc --version
或cat /usr/local/cuda/version.txt
等命令之一检查您的CUDA 版本
如果是 8.x,您可能需要重新安装 CUDA 或更简单,将 TensorFlow 降级到 1.4。否则,如果您的 CUDA 是 9.x,则需要 TensorFlow 1.5 或更高版本。
希望对您有所帮助。
【讨论】:
谢谢@Dong,我已经用版本更新了我的帖子。我正在使用应该支持 nvidia 9 的 TF1.5。 我看到你的日志说它是 CUDA 7.5,对吧?我有一个带有 CUDA 8.0 的训练服务器,我只是尝试用 1.5 替换 tensorflow-gpu 1.4 并得到与您相同的错误:i.imgur.com/0rmz2Ds.png 在另一台服务器上我有 CUDA 9.0,它也适用于 TensorFlow 1.5:i.imgur.com/P7m0EW7.png所以,我仍然想建议你尝试几个不同版本的 tensorflow-gpu,看看哪一个有效。根据我的经验: - TF 1.4 与 CUDA 8.0 一起使用 - TF 1.5 和 1.6 与 CUDA 9.0 一起使用 - CUDA 9.1 没有任何功能,我先安装了它,然后将其删除。 我已经安装了 cuda-9.0。但是nvcc -V
显示的是第 7 版。您是否建议 nvcc 应该是第 9 版?
您的安装出了点问题。第一次和CUDA打交道,我也很困惑。你的路看起来很奇怪。不是 Debian?您可以尝试cat /usr/local/cuda/version.txt
之类的方法来查看哪个输出?
如果是这样我就不知道了。但是我从来没有在 docker 中运行它们。以上是关于带有tensorflow gpu的docker - ImportError:libcublas.so.9.0:无法打开共享对象文件:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NVIDIA 驱动程序/CUDA(支持 tensorflow-gpu)和带有 pip 的 Python3 为图像制作 Dockerfile?
tensorflow docker gpu 图像未检测到我的 GPU
在Docker中使用TensorFlow(GPU版+Ubuntu 20.04)
python docker 多进程提供 稳定tensorflow gpu 线上服务