vad*_*ade 18 macos ios metal metal-performance-shaders coreml
是否有任何公开文档明确说明了CoreML's
在 macOS 上运行推理模型时 GPU 设备放置的策略?它如何决定是否应在集成、离散或 CPU 上运行?可以可靠地“强制”一条路径吗?对于像配备多个独立 GPU 和多个 eGPU 的新款 Mac Pro 这样的系统来说,这种情况有何变化?
我对 rMBP 的测试表明答案是否定的 - 温度、电池、插入电源、自动图形设置和应用程序支持,甚至可能还有一些 MLModel 架构启发式方法都在设备放置中发挥着作用。
结合上下文更长:
我很好奇是否有任何关于 CoreML 的设备选择启发式的公开文档。通过添加 10.15 的 CoreML preferredMetalDevice
API MLModelConfig
,我想可以强制MTLDevice
/ MLModel
Vision 请求运行。
在我使用 Vega 20 的 2018 rMBP 上对集成、分立和 eGPU 进行的测试中,似乎只有 eGPU 在请求时始终运行 CoreML 模型。
我的 CoreML 模型是一个管道模型,由具有多个输出的 MobileNet 分类器(附加到自定义特征提取器的多头分类器)组成。
我很想了解设备选择偏好,原因如下:
a) 我想确保我的MLModel
输入图像CIImages
由MTLTextures
本地设备推理支持,以限制 PCI 传输并继续在单个 GPU 设备上进行处理
b) 我的模型实际上是输入视频帧,WWDC '19 / 10.15 引入了 VideoToolbox 和 AVFoundation API,以帮助在特定 GPU 上强制使用特定视频编码器和解码器。
理论上,如果一切顺利,我应该能够MTLDevice
为视频解码、预处理、CoreML/Vision 推理和后续编码指定相同的内容 - 让所有IOSurface
支持的CVPixelBuffers
、CVMetalTextureRefs
和MPSImages
朋友驻留在同一个 GPU 上。
Apple 有一个 Pro Apps WWDC 视频,表明这是实现多 GPU 支持/Afterburner 解码器支持的快速路径。
CoreML
确实允许建议的设备放置起作用吗?
我正在运行配备 Vega 20 GPU 的视网膜 MacBook Pro 2018,并尝试各种方法让 Vega 20 点亮。
禁用自动图形切换
禁用自动图形切换/将 NSSupportsAutomaticGraphicsSwitching 设置为 False
禁用自动图形切换/将 NSSupportsAutomaticGraphicsSwitching 设置为 True
启用自动图形切换/设置 NSSupportsAutomaticGraphicsSwitching 为 False
启用自动图形切换/设置 NSSupportsAutomaticGraphicsSwitching 为 True
电池充满并已插入我的 Apple 电源适配器
电池充满并已插入我的 eGPU
结果:
MLModel
如果我每次使用MLModelConfig
with - ,我都可以可靠地让 eGPU 在我的机器上运行推理。preferredMetalDevice
如果我需要的话,我可以相当可靠地让集成 GPU 运行推理 - 但有时在某些电池电源配置、插入电源或自动图形切换选项的情况下,它不会运行。
我无法可靠地让独立 GPU 在上述任何配置组合上一致运行 - 但确实看到我的所有资源都驻留在 GPU 上(纹理等),并且看到 CoreML 配置为在那里运行。它只是不报告任何活动。
我已将 info.plist 配置为具有适当的 eGPU 支持,并且可以热插拔/检测设备更改并将工作分派给 eGPU,并且还支持检测设备删除请求。这一切都有效。CoreML 不尊重我的设备放置!
目前还没有公开文件明确说明CoreML\xe2\x80\x99s GPU利用率计划。请注意,您的问题似乎提出了许多不同的问题,并且应该更关注每个帖子的一个问题,但我会尽力回答它们。
\n你可以 \xe2\x80\x9cforce\xe2\x80\x9d 它仅在CPU上运行:
\nlet config = MLModelConfiguration()\nconfig.computeUnits = .cpuOnly\n
Run Code Online (Sandbox Code Playgroud)\n或者CPU和GPU:
\nconfig.computeUnits = .cpuAndGPU\n
Run Code Online (Sandbox Code Playgroud)\n或者包括神经引擎(如果可用)且 MLModel 层支持的所有可用计算单元:
\nconfig.computeUnits = .all\n
Run Code Online (Sandbox Code Playgroud)\n当有多个 Metal 设备时,您可以选择使用哪一个。请参阅此示例代码,在最高功率的 Metal 设备、外部 GPU 或不驱动显示器的 GPU 之间进行选择。
\n您还可以选择允许低精度损失:
\nconfig.allowLowPrecisionAccumulationOnGPU = true\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
2226 次 |
最近记录: |