14

TL/DR:

在 macOS 上运行推理模型时,是否有任何公开文件明确说明CoreML'sGPU 设备放置策略?它如何决定它应该在集成、离散还是 CPU 上运行?可以可靠地“强制”一条路径吗?对于具有多个独立 GPU 和多个 eGPU 的新 Mac Pro 等系统,这种情况有何变化?

我对我的 rMBP 的测试表明答案是否定的——温度、电池、插入电源、自动图形设置和应用程序支持,甚至可能一些 MLModel 架构启发式都在设备放置中发挥作用。

我想要一些答案!

更长的上下文:

我很好奇是否有任何关于 CoreML 的设备选择启发式的公共文档。随着 10.15 的 CoreML preferredMetalDeviceAPI 的添加MLModelConfig,我想可以强制MTLDevice运行MLModel/ Vision 请求。

在我使用 Vega 20 在我的 2018 rMBP 上使用集成、离散和 eGPU 进行的测试中,似乎只有 eGPU 在请求时始终运行 CoreML 模型。

我的 CoreML 模型是一个管道模型,由具有多个输出的 MobileNet 分类器(附加到自定义特征提取器的多头分类器)组成。

出于以下几个原因,我很想了解设备选择偏好:

a) 我想确保将运行由本地支持的设备推理的MLModel图像,以限制 PCI 传输并继续在单个 GPU 设备上进行处理CIImagesMTLTextures

b) 我的模型实际上是输入视频帧,WWDC '19 / 10.15 引入了 VideoToolbox 和 AVFoundation API,以帮助强制特定 GPU 上的特定视频编码器和解码器。

从理论上讲,如果一切正常,我应该能够MTLDevice为视频解码、预处理、CoreML/Vision 推理和后续编码指定相同的内容——让所有IOSurface支持CVPixelBuffersCVMetalTextureRefs、、MPSImages和朋友驻留在同一个 GPU 上。

Apple 有一个 Pro Apps WWDC 视频,表明这是通往多 GPU 支持/Afterburner 解码器支持的快速路径的前进之路。

CoreML 实际上是否允许建议的设备放置工作?

我正在运行配备 Vega 20 GPU 的 Retina MacBook Pro 2018,并尝试各种方法让 Vega 20 点亮。

  • 禁用自动图形切换
  • 禁用自动图形切换/将 NSSupportsAutomaticGraphicsSwitching 设置为 False
  • 禁用自动图形切换/将 NSSupportsAutomaticGraphicsSwitching 设置为 True
  • 启用自动图形切换/将 NSSupportsAutomaticGraphicsSwitching 设置为 False
  • 启用自动图形切换/将 NSSupportsAutomaticGraphicsSwitching 设置为 True

  • 电池充满并插入我的 Apple 电源适配器

  • 充满电池并插入我的 eGPU

结果:

  • 如果我每次都MLModel使用MLModelConfigwith - ,我可以可靠地让 eGPU 运行推理。preferredMetalDevice

  • 如果我要求,我可以相当可靠地让集成 GPU 运行推理 - 但有时在某些电池电源配置、插入电源或自动图形切换选项的情况下,它不会运行。

  • 我无法可靠地让离散 GPU 在上述任何配置组合上始终如一地运行 - 但确实看到我的所有资源都驻留在 GPU(纹理等)上,并且看到 CoreML 被配置为在那里运行。它只是不报告任何活动。

我已将我的 info.plist 配置为具有适当的 eGPU 支持,并且可以热插拔/检测设备更改并将工作分配给 eGPU,并且还支持检测设备移除请求。这一切都有效。CoreML 不尊重我的设备放置!

任何见解都是最有帮助的。

提前致谢。

4

0 回答 0