1

在尝试在 docker 容器的构建命令中编译暗网时,我经常遇到异常include/darknet.h:11:30: fatal error: cuda_runtime.h: No such file or directory

我正在根据此处的说明构建容器:https ://github.com/NVIDIA/nvidia-docker/wiki/Deploy-on-Amazon-EC2 。我有一个简单的Dockerfile测试 - 相关部分:

FROM nvidia/cuda:9.2-runtime-ubuntu16.04
...
WORKDIR /
RUN apt-get install -y git
RUN git clone https://github.com/pjreddie/darknet.git
WORKDIR /darknet
# Set OpenCV makefile flag
RUN sed -i '/OPENCV=0/c\OPENCV=1' Makefile
RUN sed -i '/GPU=0/c\GPU=1' Makefile
#RUN ln -s /usr/local/cuda-9.2 /usr/local/cuda
# HERE I have been playing with commands to show me the state of the docker image to try to troubleshoot the problem
RUN find / -name "cuda_runtime.h"
RUN ls /usr/local/cuda/lib64/
RUN less /usr/local/cuda/README
RUN make

在运行容器时,我看到的大多数文档都使用 nvidia 库进行引用,但暗网在构建gpu支持时编译方式不同,因此我需要cuda_runtime.h在构建时可用。

也许我误解了nvidia-docker正在做的事情 - 我假设nvidia-docker存在,因为 Nvidia 代码必须安装在实际主机上而不是容器内,并且他们使用某种机制与容器共享“本机”代码,因此 GPU 可以管理 - 这是正确的吗?

我应该在构建容器时尝试构建darknet还是应该将它安装在主机上,然后以某种方式使其可用于容器?这似乎违背了容器的可移植性,但我可以忍受一些限制来访问 GPU。

4

1 回答 1

5

来自 nvidia/cuda:9.2-runtime-ubuntu16.04

您的图像只有运行CUDA 应用程序所需的 CUDA-9.2 的零碎部分,但没有构建应用程序所需的部分。

您需要使用 -devel 变体。

于 2018-12-05T04:46:21.680 回答