3

我正在使用 Core ML 模型进行图像风格转换。在 iOS 12 中的 iPhone X 上,初始化模型占用约 60 MB 内存。但是,在 iPhone Xs (Max) 消费者上加载相同模型的内存超过 700 MB。

在仪器中,我可以看到运行时分配了 38 个 IOSurfaces,每个具有高达 54 MB 的内存 foodprint 以及许多其他 Core ML (Espresso) 相关对象。iPhone X 上没有这些。

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

我已经尝试使用最新版本的coremltools. 但是,它们是相同的。

我错过了什么?

4

1 回答 1

2

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

根据我在 Instruments 中看到的内容,我得出结论,CoreML 运行时在初始化模型时(使用方法)预先分配了执行神经网络所需的所有Espresso::ANERuntimeEngine::blob_container::force_allocate()缓冲区(因此有许多 IOSurfaces )。有趣的是,这只发生在输入尺寸相对较高 (1792 x 1792) 的模型上,而不是较小的模型 (1024 x 1024)。

由于这只发生在 Xs 上,我认为这与 A12 的神经引擎有关。因此,我将模型配置为仅将 CPU 和 GPU 用作计算单元(MLComputeUnitsCPUAndGPU而不是MLComputeUnitsAll),这样就成功了——不再有预先分配的缓冲区。所以我现在将其用作解决方法。

于 2018-09-27T09:18:30.400 回答