graphcore IPU 的 Linux /dev/ipu* 设备名称的含义和用途是什么?

What is the meaning and purpose of the Linux /dev/ipu* device names for graphcore IPUs?

为什么我指定 ipu4ipu4_ex 都在 docker 中使用 ipu 设备,如下面的命令?

docker run --device=/dev/**ipu4**:/dev/ipu4 --device=/dev/**ipu4_ex**:/dev/ipu4_ex -ti graphcore/tools gc-inventory

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

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

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

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

gc-docker --device-id 0 -- -ti graphcore/tools gc-inventory

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

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

谢谢,干得好..祝你有美好的一天..