我能在MacBook Pro上使用来自Docker容器中的GPU吗?(AMD Radeon GPU)

18

我想在我的MacBook Pro上的Docker容器中运行支持GPU(Gazebo)的应用程序。

通过我的研究,似乎大约一年前Docker发布了适用于MacOS的本机Docker应用程序。

在此之前,Docker会生成一个完整的Linux虚拟机并在其上运行容器。

现在,它显然使用了一些本地的虚拟化框架,使其更加优化和接近硬件,从而彻底改变了Docker在Mac上容器化的方法。

所有这些对我来说并不是很清楚,我也不确定我所说的一切是否正确。

现在可以从Docker容器中使用我的MacBook Pro的GPU吗?如果可以,怎么做?

我目前正在使用的命令行适用于常规X11应用程序,但不适用于支持GPU的应用程序,如Gazebo:

xhost +
docker run -it -e DISPLAY=$ip:0 -v /tmp/.X11-unix:/tmp/.X11-unix image_name bash

你有没有想过在deb0ch容器内运行Gazebo的方法? - hornairs
没有,从来没做过:/ - deb0ch
1
2020年更新:您可能想看一下https://ade-cli.readthedocs.io/en/latest/,那里有对OSX的实验性支持。没有GPU和显示器非常缓慢,但从技术上讲,Gazebo在MacOS上运行在容器中。Turtlebot3的示例图像可在https://gitlab.com/deb0ch/ade-turtlebot3找到。 - deb0ch
1个回答

17

仍然涉及虚拟机。

Docker for Mac使用名为XHyve的虚拟化层。它比VirtualBox或类似软件更轻便,更简洁(模拟较少的外围设备),但仍然涉及虚拟化技术。


理论上可以进行PCI直通,但无法通过主GPU并仍然使用它。

具有IOMMU的硬件(是的,您的MacBook Pro具有支持此功能的Intel芯片组)可以允许虚拟化环境直接访问PCI硬件。

但是,您无法将硬件的控制权转移到VM并仍从主机使用该硬件。 (某些高端服务器网络卡通过具有多个PCI端点来解决这个问题,因此主机和每个客户端都得到不同的端点来相互通信)。


因此-您可以获取一个外部连接的雷雳电缆连接的GPU,然后它可能在未来起作用...

截至2017年中期撰写本文,Xhyve的底层支持还没有实现,即使在许多进行开创性工作的人使用的KVM上,也只有有限的成功报告(具有特定视频卡-Radeon HD 5850)。


如果您无法将硬件控制权移交给虚拟机并仍然可以从主机使用它,那么为什么我的VMware虚拟机可以与我的主机同时使用GPU? - deb0ch
@deb0ch,如果您的客户端和主机同时可以使用GPU,则主机显然不会放弃完全控制(这涉及将内存和中断直接映射到客户端,因此甚至本身都看不到它们)。 您仍然可以提供一个虚拟驱动程序,提供部分访问权限并充当中介; 这会带来一定的性能损失,但如果您想共享访问权限,那就这样吧。 - Charles Duffy
那么,如果Docker或Apple在未来实现它,是否可能为容器提供类似的部分GPU访问权限呢? 顺便说一下,非常感谢您的有益见解 :) - deb0ch
是的,如果未来有人构建支持,那就可能了。已经有不只是VMware支持共享访问--在virtio-gpu中有OSS原生Linux支持,但我没有听说过有人为MacOS/xhyve构建类似的东西。 - Charles Duffy
1
顺便说一下,谈到2021年初的情况--nVidia明确支持旨在商业市场的显卡的PCI直通,例如Quadro系列;而对于消费级别的显卡,如果它们检测到虚拟化环境,则其驱动程序将拒绝安装。AMD显卡仍然可以通过,但是在重新启动VM时重置它们(以能够重新启动VM但不重新启动主机)并没有得到很好的支持(需要第三方软件),除了目前非常罕见且难以找到的Big Navi单元。据我所知,这些都不受Xhyve支持。 - Charles Duffy
1
继续早期2021年的更新:nVidia的专业级显卡确实有额外的PCI端点,可以像2017年的高端网络卡一样单独传递。但是,除非你准备在GPU上花费约5k美元,否则这对消费市场不太可能有影响(而且开箱即用的Docker也不适合该用途的运行时环境)。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接