为什么我指定 ipu4
和 ipu4_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 个关联的用户空间 PCIe 设备。这是因为每个 Graphcore IPU 设备都有 4 个不同的内存区域(如果您使用 lspci -v
列出 Graphcore PCI 设备,您可以看到)。每个内存区域对应于设备的不同功能部分(您可以在 this Stack Exchange post 中详细了解为什么设备可能希望拥有多个不同的内存区域)。这些内存区域是 IPU 配置空间、IPU 交换空间、ICU 邮箱和主机交换内存设备。
Graphcore PCIe 驱动程序将 IPU PCIe 设备内存区域桥接到您在 docker 命令中看到的 4 个用户空间字符设备。应用程序需要将内存区域映射到用户空间才能访问它们。如果无法从使用 IPU 的 docker 容器访问这些设备中的任何一个,那么您将遇到问题......因此,为什么使用 gc-docker
工具比记住所有用户要容易得多空间设备名称!
关于docker - Graphcore IPU 的 Linux/dev/ipu* 设备名称的含义和用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65932242/