图形核心 IPU 的 Linux /dev/ipu* 设备名称的含义和目的是什么?

Moo*_*MZC 2 docker tensorflow popart poplar ipu

为什么我像下面的命令一样指定ipu4并且ipu4_ex都在 docker 中使用 ipu 设备?

docker run --device=/dev/**ipu4**:/dev/ipu4 --device=/dev/**ipu4_ex**:/dev/ipu4_ex -ti graphcore/tools gc-inventory
Run Code Online (Sandbox Code Playgroud)

小智 6

启动需要访问 Graphcore IPU 的 docker 映像的建议方法是使用gc-docker命令行工具,您可以在此处阅读更多信息。此命令行工具在 Poplar SDK 中可用,并封装了系统安装的 docker 命令行,因此您无需像上面显示的那样担心手动传入设备。

对于感兴趣的用户,您可以gc-docker通过使用--echoarg查看幕后调用的内容,在这里您将看到与您发布的内容类似的内容:

docker run --device=/dev/ipu0:/dev/ipu0 --device=/dev/ipu0_ex:/dev/ipu0_ex --device=/dev/ipu0_mailbox:/dev/ipu0_mailbox --device=/dev/ipu0_mem:/dev/ipu0_mem -ti graphcore/tools gc-inventory
Run Code Online (Sandbox Code Playgroud)

这是相应的gc-docker调用的样子:

gc-docker --device-id 0 -- -ti graphcore/tools gc-inventory
Run Code Online (Sandbox Code Playgroud)

如您所见,每个 IPU 设备都有 4 个关联的用户空间 PCIe 设备。这是因为每个 Graphcore IPU 设备都有 4 个不同的内存区域(如果您lspci -v用来列出 Graphcore PCI 设备,您可以看到这些区域)。每个内存区域对应于设备的不同功能部分(您可以在这篇 Stack Exchange 帖子中阅读更多关于为什么设备可能想要拥有多个不同内存区域的信息)。这些内存区域是 IPU 配置空间、IPU 交换空间、ICU 邮箱和主机交换存储设备。

Graphcore PCIe 驱动程序将 IPU PCIe 设备内存区域桥接到您在 docker 命令中看到的 4 个用户空间字符设备。应用程序需要将内存区域映射到用户空间来访问它们。如果无法从使用 IPU 的 docker 容器访问这些设备中的任何一个,那么您将遇到问题......因此为什么使用该gc-docker工具比记住所有用户空间设备名称要容易得多!