VNCoreMLModel缓慢的启动时间

时间:2018-11-01 14:54:24

标签: ios coreml

第一次致电VNImageRequestHandler时有人遇到任何问题吗?

我正在用苹果VNCoreMLModel测试MobileNet.mlmodel,并且我通过VNImageRequestHandler(ciImage: sourceImage, orientation: imageOrientation)发出的第一个请求大约需要1.9秒,但随后的每个请求都需要0.213秒。我只是通过做VNCoreMLRequest(model: model, completionHandler: { ... }来生成请求。生成请求的处理程序(CIContext)时,我没有设置VNImageRequestHandler(ciImage: sourceImage, orientation: imageOrientation),而是让系统处理该问题,我认为这会产生一些开销,但是在VNImageRequestHandler中指定自己时我可以看到请求忽略了该CIContext

所以我真正的问题是什么可能导致第一次请求和第二次请求之间的时间差。

干杯!

1 个答案:

答案 0 :(得分:0)

虽然我可能没有足够的重视,但我不记得曾经见过这种情况。但是,第一次使用模型时,需要做一些事情,尤其是如果模型在GPU上运行:

  • 需要将模型权重加载到内存中并转换为GPU内核使用的格式。
  • 需要加载GPU内核。
  • GPU需要“陷入困境”。对于速度测试,您想要先通过模型几次,以便对GPU进行预热,然后再进行测量。
  • 安装应用程序后首次使用MPS内核时,需要将Metal字节码编译为设备中GPU的特定机器代码。

如果模型在CPU或神经引擎上运行,则可能需要类似的初始化步骤。很难确切说明会发生什么,因为Core ML隐藏了所有这些东西。