在iPhone Xs上使用更多内存的样式转移模型

时间:2018-09-26 14:17:34

标签: ios coreml memory-consumption iphone-xs

我正在使用Core ML模型进行图像样式转换。初始化后的模型在iOS 12的iPhone X上需要约60 MB的内存。但是,在iPhone Xs(最大)使用者上加载的同一模型则需要700 MB以上的RAM。

在工具中,我可以看到运行时分配了38个IOSurfaces,每个IDOS最多具有54 MB的内存食物图,同时还分配了许多其他与Core ML(Espresso)相关的对象。这些都不在iPhone X上。

我的猜测是,Core ML运行时为了利用A12的功能做了一些不同的事情。但是,由于内存压力,我的应用程序崩溃了。

我已经尝试使用最新版本的coremltools再次转换我的模型。但是,它们是相同的。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

以下是一些发现和我发现的解决方法:

根据我在仪器中看到的内容,我得出的结论是,CoreML运行时正在预先分配初始化模型时使用神经网络所需的所有缓冲区(因此有许多IOSurfaces)(使用方法{ {1}})。 有趣的是,这仅在输入尺寸相对较大(1792 x 1792)的型号上发生,而在较小尺寸(1024 x 1024)的型号上则没有。

由于这仅发生在X轴上,因此我认为这与A12的神经引擎有关。因此,我将模型配置为仅将CPU和GPU用作计算单元(Espresso::ANERuntimeEngine::blob_container::force_allocate()而不是MLComputeUnitsCPUAndGPU),并且达到了这个目的-没有更多的预分配缓冲区。 因此,我暂时将其用作解决方法。