与docker容器共享CUDA库

与docker容器共享CUDA库,cuda,ubuntu-12.04,docker,Cuda,Ubuntu 12.04,Docker,我正在使用docker启动独立的应用程序。我的应用程序将使用CUDA库进行GPGPU计算。我正在考虑建立一个形象与cuda安装在它,但这将使它太大。我也不确定CUDA显示器驱动程序是否能在docker映像上成功安装 更好的方法是在机器上与容器共享CUDA库,有什么方法吗 谢谢,, pradeep。如果您可以将驱动程序作为卷装载到主机上,那么您可以通过使用docker run-v hostdir:containerdir:rw装载驱动程序,直接在容器内与它对话(请参阅) 如果您没有将设备安装在容器

我正在使用docker启动独立的应用程序。我的应用程序将使用CUDA库进行GPGPU计算。我正在考虑建立一个形象与cuda安装在它,但这将使它太大。我也不确定CUDA显示器驱动程序是否能在docker映像上成功安装

更好的方法是在机器上与容器共享CUDA库,有什么方法吗

谢谢,,
pradeep。

如果您可以将驱动程序作为卷装载到主机上,那么您可以通过使用
docker run-v hostdir:containerdir:rw装载驱动程序,直接在容器内与它对话(请参阅)

如果您没有将设备安装在容器外部,那么我怀疑即使通过共享库直接与图形卡通信,也无法使用标准Docker配置,因为Docker中的默认LXC配置不包括
sys\u rawio
,这是出于安全性和可移植性的原因


有关默认情况下删除的功能列表,请参阅该文件。

如果可以将驱动程序作为卷装载到主机上,则可以通过使用
docker run-v hostdir:containerdir:rw装载驱动程序,直接从容器内与之对话(请参阅)

如果您没有将设备安装在容器外部,那么我怀疑即使通过共享库直接与图形卡通信,也无法使用标准Docker配置,因为Docker中的默认LXC配置不包括
sys\u rawio
,这是出于安全性和可移植性的原因


查看该文件以获取默认情况下删除的功能列表。

我将从使用

docker run --privileged ubuntu -ti --rm bash

--privileged是一个大锤子,但它提供了一个具有全部功能的容器:)

我将从使用

docker run --privileged ubuntu -ti --rm bash

--privileged是一个大锤子,但它给了您一个具有全部功能的容器:)

您确定Docker提供PCI-e直通吗?没有它,您的容器化应用程序将无法与主机内核驱动程序或GPU交互。@Talonmes:我也不确定,我也是docker的新手。因此,探索让CUDA在容器中运行的方法您确定Docker提供PCI-e直通吗?没有它,您的容器化应用程序将无法与主机内核驱动程序或GPU交互。@Talonmes:我也不确定,我也是docker的新手。所以想办法让CUDA在集装箱里运行谢谢你Andy。我确实安装了设备,我只是不知道安装部分。好的,到目前为止我已经克服了大部分错误。CUDA代码的编译也很好。我得到了一个生成的可执行文件,但当我运行它时,它会弹出一条消息,说选择了不正确的NVIDIA驱动程序版本。将发布准确的错误消息,我现在正在尝试其他操作。docker run-v/usr/bin:/usr/bin:ro-v/usr/lib:/usr/lib:ro-v/dev/dev:ro ubuntu nvidia smi nvidia:无法打开设备文件/dev/nvidiactl:未经许可的操作这意味着我可能完全错误地需要-v。你能用
docker run--privileged
试试吗?这将为您提供最大的容器权限。让我们看看这是否会消除不允许的
操作。
如果有效,我将重新做我的原始答案。我记不清了,但我相信我做了一些与启用mknod相关的事情(不幸的是,我也不记得了,我离开docker并开始直接使用lxc容器已经有很长一段时间了). 我不必使用priviliged选项,但缺点是我必须从源代码构建docker。mknod和其他高级系统调用很可能是docker最新版本中提供的私有模式的一部分。所以,我敢打赌,如果我们做
--privileged
,它一定会很好。无论如何,非常感谢您在我刚开始使用容器时提供的帮助:)谢谢您,安迪。我确实安装了设备,我只是不知道安装部分。好的,到目前为止我已经克服了大部分错误。CUDA代码的编译也很好。我得到了一个生成的可执行文件,但当我运行它时,它会弹出一条消息,说选择了不正确的NVIDIA驱动程序版本。将发布准确的错误消息,我现在正在尝试其他操作。docker run-v/usr/bin:/usr/bin:ro-v/usr/lib:/usr/lib:ro-v/dev/dev:ro ubuntu nvidia smi nvidia:无法打开设备文件/dev/nvidiactl:未经许可的操作这意味着我可能完全错误地需要-v。你能用
docker run--privileged
试试吗?这将为您提供最大的容器权限。让我们看看这是否会消除不允许的
操作。
如果有效,我将重新做我的原始答案。我记不清了,但我相信我做了一些与启用mknod相关的事情(不幸的是,我也不记得了,我离开docker并开始直接使用lxc容器已经有很长一段时间了). 我不必使用priviliged选项,但缺点是我必须从源代码构建docker。mknod和其他高级系统调用很可能是docker最新版本中提供的私有模式的一部分。所以,我敢打赌,如果我们在任何情况下使用
--privileged
,都会很好,非常感谢您在我刚开始使用容器时提供的帮助:)