Модели передачи стиля, использующие намного больше памяти на iPhone Xs - PullRequest
0 голосов
/ 26 сентября 2018

Я использую модели Core ML для передачи стиля изображения.Инициализированная модель занимает ~ 60 МБ памяти на iPhone X в iOS 12. Однако та же модель, загруженная на iPhone Xs (Max), потребляет более 700 МБ ОЗУ.

В приборах, которые я вижу,Среда выполнения выделяет 38 IOSurfaces, каждый из которых содержит до 54 МБ памяти, а также множество других связанных с Core ML (Espresso) объектов.На iPhone X их нет.

Я предполагаю, что среда выполнения Core ML делает что-то другое, чтобы использовать всю мощь A12.Тем не менее, мое приложение вылетает из-за нехватки памяти.

Я уже пытался снова конвертировать свои модели с новейшей версией coremltools.Однако они идентичны.

Я что-то пропустил?

1 Ответ

0 голосов
/ 27 сентября 2018

Вот некоторые выводы и обходные пути, которые я нашел:

Из того, что я увидел в Instruments, я пришел к выводу, что среда выполнения CoreML предварительно выделяет все буферы (отсюда и множествоIOSurfaces) требуется для выполнения нейронной сети при инициализации модели (с использованием метода Espresso::ANERuntimeEngine::blob_container::force_allocate()).Интересно, что это происходит только для моделей с относительно высоким входным размером (1792 x 1792), а не для более мелких (1024 x 1024).

Поскольку это происходит только на X, я предположил, что это как-то связано сНейронный двигатель A12.Поэтому я сконфигурировал модель для использования CPU и GPU только в качестве вычислительного устройства (MLComputeUnitsCPUAndGPU вместо MLComputeUnitsAll), и это помогло - больше никаких предварительно выделенных буферов.Поэтому сейчас я использую это в качестве обходного пути.

...