Решение - предотвратить запуск модели CoreML с таможенными слоями на ANE. Для этого используйте https://developer.apple.com/documentation/coreml/mlcomputeunits
let config = MLModelConfiguration()
config.computeUnits = MLComputeUnits.cpuAndGPU
Но если у вас большая модель, вы можете использовать черную магию CoreML для использования ANE.
Нужно разделить вашу модель на две части CoreML, где одна модель не имеет пользовательских слоев и может работать в ANE, в то время как другая часть может работать на CPU или GPU. И подключите выход первой модели к входу второй на стороне приложения SWIFT.
Пример, у меня есть модель, которая генерирует заголовок для изображения. И состоит из двух частей: экстрактор изображений и генератор титров.
Для преобразования этой модели в CoreML генератору титров требуются несколько пользовательских слоев, поэтому я разделил модель на две части CoreML:
// Standart initialize CoreML model
let model_features = CaptionMobile_features()
// Initialize CoreML model with options
// Prevent run model on ANE but alow run on CPU and GPU
let config = MLModelConfiguration()
config.computeUnits = MLComputeUnits.cpuAndGPU
guard let model_caption = try? CaptionMobile_caption(configuration: config)
else { fatalError("Can't intitalize Caption CoreML model") }
В результате модель с тяжелыми функциями работает на ANE, которая может увеличиваться до 10 раз. Пока маленькая модель работает на CPU или GPU.