【问题标题】:Running a CUFFT rountine in Nvidia-Docker在 Nvidia-Docker 中运行 CUFFT 例程
【发布时间】:2020-02-13 08:56:32
【问题描述】:

我是 Docker 新手,尤其是 Nvidia-Docker。我正在尝试将我的代码包装到 docker 容器中并在某些主机上运行它。但显然出了点问题,我无法在 docker 中运行我的代码。我已经安装了 Nvidia-docker 并且 Dockerfile 取自 here。这是我的完整 docker 代码

FROM nvidia/cuda:9.1-runtime-ubuntu16.04
RUN apt-get update && apt-get install -y \
        cuda-command-line-tools-$CUDA_PKG_VERSION \
        cuda-libraries-dev-$CUDA_PKG_VERSION \
        cuda-minimal-build-$CUDA_PKG_VERSION \
&& \
    rm -rf /var/lib/apt/lists/*

ENV LIBRARY_PATH /usr/local/cuda/lib64/stubs

FROM python:3.7-slim
RUN pip install numpy
RUN apt update && \
    apt-get -y install gcc && \
    apt-get -y install g++
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
ADD helmsolver /helmsolver
CMD dpkg -l | grep -i cuda
CMD cd helmsolver && bash tests.sh

还有一个 bash 脚本代码,其中 cudahelmf 和 cudahelmd 之前由

编译
nvcc helm3dcudafnd.cu -o cudahelm -I/usr/local/cuda/samples/common/inc/ -lcufft -lcufftw -D DOUBLE
#!/bin/sh
mkdir helmholtz
cd helmholtz
        mkdir build
        mkdir workdir
        mkdir src
        mkdir scripts
        ls
        cp ../cudahelmf ./build
        cp ../cudahelmd ./build
        cp ../tmp.py ./scripts/
        cd workdir
        python3 ../scripts/script1.py 21 21 1
        ../build/cudahelmd config.cfg >> results_double.txt
        ../build/cudahelmf config.cfg >> results_float.txt

我使用构建和运行 docker

nvidia-docker build -t helm .
nvidia-docker run --rm -ti helm

运行后出现错误

../build/cudahelmd: error while loading shared libraries: libcufft.so.9.1: cannot open shared object file: No such file or directory

我做错了什么?是否因为 -lcufft 编译选项而发生,并且 docker 不知道从哪里获得它?并且 docker 安装后没有 /usr/local/cuda/ 目录。由于 cuda-libraries-dev 包含 cufft 库并且安装成功结束,这似乎很奇怪。

这是我计算机上的 nvcc 版本,代码已在其中编译和先前测试过。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85

和 nvidia-docker 版本

Docker version 19.03.3, build a872fc2f86

附:也许有一个选项可以在 docker 中编译代码?

【问题讨论】:

  • @RobertCrovella 它没有帮助
  • 容器中的/usr/local/cuda/lib64 目录中有libcufft... 文件吗?他们是谁?
  • @RobertCrovella 没有我之前提到的这样的目录
  • 如果您只是从FROM nvidia/cuda:9.1-runtime-ubuntu16.04 开始并且不安装您在 dockerfile 中的下 3 个 cuda 包,会发生什么情况?当我这样做时,我有一个目录 /usr/local/cuda/lib64 ,其中包含所需的 cufft 库。
  • @RobertCrovella 没有任何反应,没有新目录,尤其是 cuda。你能展示你完整的 Dockerfile 吗?

标签: python linux docker cuda nvidia-docker


【解决方案1】:

问题是您正在运行一个没有COPY 的多级dockerfile 从一个到另一个,因此您将仅以独立的python3 容器结束,该容器没有来自nvidia 容器,因此您需要复制所需的python 容器中的类似文件:

COPY --from=0 SOURCE DEST

【讨论】:

  • 谢谢,我明白了,但仍然无法运行我的代码。如果我猜对了,COPY 必须在FROM 命令之后?那么,我在 python 和 CUDA 部分做 FROMCOPY 吗?
  • 副本应该只在python部分,你还需要在python部分设置env
  • 谢谢你,@LinPy!我能够同时运行python和cuda,但是出现了一个新问题。现在 cuda 抛出 35 错误代码cudaErrorInsufficientDriver。你有什么解决办法吗?
  • 请考虑使用所有当前设置打开一个新帖子....应该完成此帖子,因为它解决了问题中的主要问题
猜你喜欢
  • 2020-02-17
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多