如何使用 AMDGPU-Pro 在 Docker 容器中运行 OpenCL 程序?

Jan*_*lho 8 drivers docker amd-graphics

我有一个全新的 Ubuntu 16.04 安装,只安装了 AMDGPU-Pro(专有)驱动程序和 docker-engine(来自 apt.dockerproject.org PPA)。

我想在 Docker 容器中运行 OpenCL 程序。我想:内核是共享的,所以 GPU 模块应该可用于容器,缺少的是访问模块的库。

我设置了一个容器并在其中编译了一个 OpenCL 程序。运行其中的程序返回未找到设备。所以我将二进制文件复制到主机,并在那里执行二进制文件(检测到我的两个 GPU 设备)。

我尝试创建一个新容器(来自 Ubuntu:16.04)并复制二进制文件,以及它从用于编译的容器中需要的所有库,以及/usr/lib/x86_64-linux-gnu/amdgpu-pro来自主机的文件夹。

不幸的是,这也不起作用。我可能会错过什么?

Jan*_*lho 13

设法让它工作。概括:

  • 需要将来自 /usr/lib/x86_64-linux-gnu/amdgpu-pro 的库添加到容器中
  • 需要将 /etc/OpenCL 中的配置文件添加到容器中
  • 需要允许容器访问/dev/dri设备

这是构建 docker 镜像的示例脚本:https : //gist.github.com/anonymous/fea9c0a9e986eeda7cf58e47f47c89f2

这是一个使用创建的映像运行容器的示例命令:

docker run -it --device /dev/dri:/dev/dri climage
Run Code Online (Sandbox Code Playgroud)

如果有人遇到类似的问题,我还将列出我是如何找到“解决方案”的:

  • 使用 strace 在主机中运行测试二进制文件以列出所有系统调用
    • strace ./cltest &> host.strace
  • 在容器中运行测试二进制文件,同时使用 strace 列出所有系统调用
    • docker run --rm --security-opt seccomp:unconfined -v $(pwd):/external climage strace /external/cltest &> ./container.strace
  • 手动或使用类似的方法比较两个输出 vimdiff
    • vimdiff container.strace host.strace
  • 查看命令结果在哪里不同,在某些情况下我找不到文件,所以我添加了它们,在其他情况下容器没有打开文件的权限(它在 /dev/dri 中,所以我允许它访问装置)