2017-05-23 10 views
0

QT 애플리케이션을 빌드하는 Dockerfile을 작성했으며 빌드에 몇 가지 문제가 있습니다. Nvidia-docker - 빌드 프로세스에서 libnvcuvid.so를 찾을 수 없습니다.

ninja: error: '/usr/lib/x86_64-linux-gnu/libnvcuvid.so', needed by 'bin/x64/release/*****/librtmpPlugin.so', missing and no known rule to make it 

내가 임시 컨테이너에이 오류를 해결 심볼릭 링크에 추가 :

빌드 명령이 Dockerfile에있는 경우

, 그것은이 오류 trhows

ln -s /usr/local/nvidia/lib64/libnvcuvid.so.1 /usr/lib/x86_64-linux-gnu/libnvcuvid.so 

을하지만 추가 할 때 그 라인과 빌드 - 다시, 나는 여전히 같은 오류가 있어요.

처음에는 매달려있는 이미지에서 일부 캐시가 있지만 모든 문제를 해결하기 때문에 문제가 지속되는 것으로 보았습니다.

이 내 ENV 키의 일부는 다음과 같습니다

RUN mv /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/x86_64-inux-gnu/libOpenCL.so.1_old 
RUN ln -s /usr/local/cuda/lib64/libOpenCL.so.1 /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 
RUN ln -s /usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so 
RUN ln -s /usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libnvidia-ml.so /usr/lib/x86_64-linux-gnu/libnvidia-ml.so 

내가 엔비디아 CUDA 8 이미지를 사용하고 있습니다 :

ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64 
ENV LIBRARY_PATH /usr/local/cuda/lib64/stubs:${LIBRARY_PATH} 
ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH} 
ENV OPENCL_HEADERS /usr/local/cuda/include 
ENV LIBOPENCL /usr/local/cuda/lib64 
ENV CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda 
ENV CUDA_NVCC_EXECUTABLE /usr/bin/nvcc 

이 내가 다른 오류를 제거했던 '해킹'의 일부입니다 + 마지막 버전 인 nvidia docker, Docker 버전 17.03.1-ce.

Dockerfile 컴파일 프로세스와 컨테이너 런타임간에 차이가 없다고 생각했습니다.

+1

해당 라이브러리는 CUDA의 일부가 아닙니다. 그것은 NVIDIA 드라이버와 함께 제공됩니다. – talonmies

답변

0

이미지 nvidia/cudanvidia drivers 소프트웨어 빌드 방식에 따라 제공되지 않으므로 출력은 nividia-smi과 비슷한 드라이브를 설치해야합니다.

apt-get install -y nvidia-381 

나는 미래에 몇 가지 문제가있을 수 있지만, 지금은 가고있는 방법입니다.

또한 nvidia-381 패키지에 많은 의존성이 있고 CUDA 패키지에서 libcuda.so을 제거했기 때문에 나는 많은 경고를 받기 시작 했으므로 libcuda.so의 이름을 바꿔야했습니다.

RUN mv /usr/lib/x86_64-linux-gnu/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so_old 
RUN ln -s /usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so 
+1

이것은 'nvidia-docker'가있는 꽤 강한 no-no입니다. 'nvidia-docker '의 요점은 당신이 docker 이미지 나 dockerfile에 드라이버를 설치할 필요가 없다는 것입니다. 어쨌든 그렇게한다면, 당신은 'nvidia-docker'와 함께 제공되는 유연성을 깨고 있습니다. 또 다른 접근 방법은 [here] (https://github.com/NVIDIA/nvidia-docker/issues/103)를보십시오. –