无法在nvidia-docker容器中使用GPU运行代码。 (夜间-GPU-PY3)

时间:2018-04-19 04:17:22

标签: docker tensorflow nvidia-docker

我在教自己什么是docker以及如何使用它。我是码头工人的新手,所以希望在这里学习一些基础知识。

我在我的计算机上安装了nvidia-docker(关注installation guide)和tensorflow / tensorflow:nightly-gpu-py3(nightly-gpu,启动GPU(CUDA)容器)。

  • Docker:NVIDIA Docker 2.0.3,版本:17.12.1-ce
  • 主机操作系统:Ubuntu 16.04桌面
  • 主持人Arch:amd64

我的Probelm

cifar10_multi_gpu_train(使用tensorflow编写的python)和简单的monte-carlo模拟(用纯cuda编写)都无法运行(致命错误:没有curand.h)而fdm(写入pure cuda)或简单矩阵乘法(用python编写,带有tensorflow)在容器中工作(tensorflow / tensorflow:nightly-gpu-py3)。

仅使用CPU(如a3c)的代码可以正常使用tensorflow。

某些使用GPU的代码会返回错误消息。 (当代码使用<curand.h>

详细

在容器(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

locate cudnn.h

/usr/local/lib/python3.5/dist-packages/tensorflow/include/tensorflow/core/util/use_cudnn.h

代表locate cuda.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-docker run 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      |
|=============================================================================|
+-----------------------------------------------------------------------------+

我做了什么

  1. 重新安装nvidia-docker,nightly-gpu-py3和#include <curand.h> - &gt;失败

  2. 在nightly-gpu-py3容器中,重新安装cuda / cuda toolki和#include <curand.h> - &gt;失败

  3. 尝试在其他未使用docker且已安装cuda / tensorflow-gpu的计算机上运行所有代码。他们工作正常。

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

    问题

    1. 安装nvidia-docker后,我可以使用nvidia-docker run <myImage>运行容器。不是docker镜像意味着它可以保存依赖项(PATH,包,...)来运行某个代码(在我的例子中,使用<curand.h>的代码)? (和容器做实际工作?)
    2. tensorflow / tensorflow:nightly-gpu-py3图片有CUDA Toolkit / cuDNN吗?在nightly-gpu-py3中没有<curand.h>意味着我不正确地安装/下载了nvidia-docker / nightly-gpu-py3?
    3. 安装CUDA Toolkit或在容器内重新安装cuda(nightly-gpu-py3)失败(我跟着进程here)。有什么方法可以在容器内使用<curand.h>(nightly-gpu-py3)?
    4. sudo nvidia-docker run -it --rm -p 8888:8888 -p 6006:6006 <image> /bin/bash是我用一个给定图像开始一个新容器的命令。这可能是个问题吗?

0 个答案:

没有答案