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

标签 docker tensorflow ipu popart poplar

为什么我指定 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 个关联的用户空间 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/

相关文章:

spring - 如何将Spring Boot RESTful Web服务Docker镜像部署到EC2?

mongodb - Windows Docker mongo 容器不适用于卷安装

python - FailedPreconditionError : Attempting to use uninitialized in Tensorflow

python - virtualGraph 和 pipelineStage Graphcore 的 PopART/Poplar 库的区别

docker - 收到错误 "Get http://localhost:9443/metrics: dial tcp 127.0.0.1:9443: connect: connection refused"

bash - 为什么运行docker容器时没有执行 `~/.bashrc`?

python - Jupyter Notebook 中的 TensorFlow 问题

python - Tensorflow qint8、quint8、qint32、qint16 和 quint16 数据类型是什么?

tensorflow - 在 IPU 模型上运行 TensorFlow 程序会引发 "Illegal instruction (core dumped)"错误

ipu - Poplar 小码如何包含来自其他头文件的代码?