无法在nvidia docker容器中使用GPU运行代码。(nightly-gpu-py3)

无法在nvidia docker容器中使用GPU运行代码。(nightly-gpu-py3),docker,tensorflow,nvidia-docker,Docker,Tensorflow,Nvidia Docker,我在自学什么是docker以及如何使用它。我对docker很陌生,所以希望在这里学习一些基础知识 我在我的电脑上安装了nvidia docker(以下)和tensorflow/tensorflow:nightly-gpu-py3(,启动gpu(CUDA)容器) Docker:NVIDIA Docker 2.0.3,版本:17.12.1-ce 主机操作系统:Ubuntu 16.04桌面 主持人:amd64 我的问题 当(用纯cuda编写)或简单矩阵乘法(用python用tensorflow编写

我在自学什么是docker以及如何使用它。我对docker很陌生,所以希望在这里学习一些基础知识

我在我的电脑上安装了nvidia docker(以下)和tensorflow/tensorflow:nightly-gpu-py3(,启动gpu(CUDA)容器)

  • Docker:NVIDIA Docker 2.0.3,版本:17.12.1-ce
  • 主机操作系统:Ubuntu 16.04桌面
  • 主持人:amd64
我的问题 当(用纯cuda编写)或简单矩阵乘法(用python用tensorflow编写)在容器(tensorflow/tensorflow:nightly-gpu-py3)中工作时(用tensorflow编写)和简单蒙特卡罗模拟(用纯cuda编写)都无法运行(致命错误:no curand.h)

仅使用CPU(如)的代码在tensorflow中工作良好

某些使用GPU的代码返回错误消息。(当代码使用
时)

细节 在容器(tensorflow/tensorflow:nightly-gpu-py3)中,当我运行monte-carlo模拟时,我得到以下错误:

fatal error: curand.h: No such file or directory

locate curand.h
不返回任何内容,但当我尝试
locate curand
时,我得到:

/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcurand.so.9.0
/usr/local/cuda-9.0/targets/x86_64-linux/lib/libcurand.so.9.0.176
/usr/share/doc/cuda-curand-9-0
/usr/share/doc/cuda-curand-9-0/changelog.Debian.gz
/usr/share/doc/cuda-curand-9-0/copyright
/var/lib/dpkg/info/cuda-curand-9-0.list
/var/lib/dpkg/info/cuda-curand-9-0.md5sums
/var/lib/dpkg/info/cuda-curand-9-0.postinst
/var/lib/dpkg/info/cuda-curand-9-0.postrm
/var/lib/dpkg/info/cuda-curand-9-0.shlibs
对于
查找cudnn.h

/usr/local/lib/python3.5/dist-packages/tensorflow/include/tensorflow/core/util/use_cudnn.h
/usr/include/linux/cuda.h
/usr/local/cuda-9.0/targets/x86_64-linux/include/cuda.h
/usr/local/cuda-9.0/targets/x86_64-linux/include/dynlink_cuda.h
/usr/local/cuda-9.0/targets/x86_64-linux/include/dynlink_cuda_cuda.h
/usr/local/lib/python3.5/dist-packages/tensorflow/include/tensorflow/core/platform/cuda.h
/usr/local/lib/python3.5/dist-packages/tensorflow/include/tensorflow/core/platform/stream_executor_no_cuda.h
对于
查找cuda.h

/usr/local/lib/python3.5/dist-packages/tensorflow/include/tensorflow/core/util/use_cudnn.h
/usr/include/linux/cuda.h
/usr/local/cuda-9.0/targets/x86_64-linux/include/cuda.h
/usr/local/cuda-9.0/targets/x86_64-linux/include/dynlink_cuda.h
/usr/local/cuda-9.0/targets/x86_64-linux/include/dynlink_cuda_cuda.h
/usr/local/lib/python3.5/dist-packages/tensorflow/include/tensorflow/core/platform/cuda.h
/usr/local/lib/python3.5/dist-packages/tensorflow/include/tensorflow/core/platform/stream_executor_no_cuda.h

nvcc--version
返回:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176

在主机中(容器外部),当我尝试运行nvidia/cuda nvidia smi时,我得到

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.30                 Driver Version: 390.30                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:03:00.0  On |                  N/A |
|  0%   48C    P8    22W / 250W |    301MiB / 11177MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:81:00.0 Off |                  N/A |
|  0%   51C    P8    22W / 250W |      2MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+
我所做的
  • 重新安装nvidia docker、nightly-gpu-py3和
    #include
    -->失败

  • 在nightly-gpu-py3容器中,重新安装cuda/cuda toolki和
    #include
    -->失败

  • 已尝试在不使用docker和cuda/tensorflow gpu的其他计算机上运行所有代码。他们工作得很好

  • 我想我完全误解了nvidia docker的概念以及图像/容器的作用

    问题:
  • 安装nvidia docker后,我可以使用
    nvidia docker run
    运行容器。docker映像不是意味着它可以保存依赖项(路径、包等)以运行特定代码(在我的例子中,是使用
    的代码)吗?(集装箱是否有实际工作?)
  • tensorflow/tensorflow:nightly-gpu-py3映像是否具有CUDA工具包/cuDNN?nightly-gpu-py3中没有
    是否意味着我未正确安装/加载nvidia docker/nightly-gpu-py3
  • 安装CUDA工具包或在容器(nightly-gpu-py3)内重新安装CUDA失败(我遵循了该过程)。有什么方法可以在容器(nightly-gpu-py3)内使用
  • sudo nvidia docker run-it--rm-p 8888:8888-p 6006:6006/bin/bash
    是我用给定图像启动新容器的命令。这可能是个问题吗


  • 来自“Devel-docker映像包括从源代码构建所需的所有依赖项,而其他二进制文件只是安装了TensorFlow。”您使用的是非Devel映像。如果您希望完整的CUDA工具包可用,请尝试使用devel映像。在你的情况下,这将是
    nightly-devel-gpu-py3
    而不是
    nightly-gpu-py3
    我这样做:
    nvidia docker run-it--rm-p 8888:8888 tensorflow/tensorflow:nightly-devel-gpu-py3/bin/bash
    ,然后查看该容器中的
    /usr/local/cuda/include
    ,而且它确实有
    curand.h
    ,看起来是一个完整的CUDA工具包安装。