python - 在 Nvidia-Docker 中运行 CUFFT 例程

标签 python linux docker cuda nvidia-docker

我是 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 中编译代码的选项?

最佳答案

问题是你正在运行一个多级dockerfile,没有从一个到另一个的COPY,因此你最终只会得到独立的python3容器,它没有来自的任何内容>nvidia 容器,因此您需要在 python 容器中复制所需的文件:

COPY --from=0 SOURCE DEST

关于python - 在 Nvidia-Docker 中运行 CUFFT 例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58415644/

相关文章:

Python 无法在 Web 浏览器中运行

c - 来自 proc_fs.h 的 proc_create_entry 错误 "implicit declaration"

docker - Docker和Windows 10

ruby - 从源代码安装 Ruby1.9 时找不到 OpenSSL header /库

linux - 如何从 bash 制作批处理脚本

java - 使用 docker 在 tomcat web 服务器中部署 java 应用程序

python - python脚本在docker容器中执行的速度比本地执行更快

python - Numpy:数组 > 5 产生 "The truth value of an array with more than one element is ambiguous"

python - 分组装箱

python - Windows 下的 pysox