MLModel crashes when it is released on some iOS systems

We use MLModel in our app, which uses two file formats: mlmodel and mlpackage. We find that when the model is released, models using mlmodel format have a certain probability of crashing. And these crashes account for the majority (over 85%) in the iOS 16.x system. Here is the crash stack:

Exception Type:  SIGTRAP
Exception Codes: TRAP_BRKPT at 0x1b48e855c
Crashed Thread:  5
Thread 5 Crashed:
0   libdispatch.dylib                   0x00000001b48e855c _dispatch_semaphore_dispose.cold.1 + 40
1   libdispatch.dylib                   0x00000001b48b2b28 _dispatch_semaphore_signal_slow
2   libdispatch.dylib                   0x00000001b48b0e58 _dispatch_dispose + 208
3   AppleNeuralEngine                   0x00000001ef07b51c -[_ANEProgramForEvaluation .cxx_destruct] + 32
4   libobjc.A.dylib                     0x00000001a67ed4a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
5   libobjc.A.dylib                     0x00000001a67f221c objc_destructInstance + 80
6   libobjc.A.dylib                     0x00000001a67fb9d0 _objc_rootDealloc + 80
7   AppleNeuralEngine                   0x00000001ef079e04 -[_ANEProgramForEvaluation dealloc] + 72
8   AppleNeuralEngine                   0x00000001ef07ca70 -[_ANEModel .cxx_destruct] + 44
9   libobjc.A.dylib                     0x00000001a67ed4a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
10  libobjc.A.dylib                     0x00000001a67f221c objc_destructInstance + 80
11  libobjc.A.dylib                     0x00000001a67fb9d0 _objc_rootDealloc + 80
12  AppleNeuralEngine                   0x00000001ef07bd7c -[_ANEModel dealloc] + 136
13  CoreFoundation                      0x00000001ad4563cc cow_cleanup + 168
14  CoreFoundation                      0x00000001ad49044c -[__NSDictionaryM dealloc] + 148
15  Espresso                            0x00000001bb19c7a4 Espresso::ANERuntimeEngine::compiler::reset() + 1340
16  Espresso                            0x00000001bb19cac8 Espresso::ANERuntimeEngine::compiler::~compiler() + 108
17  Espresso                            0x00000001bacd69e4 std::__1::__shared_weak_count::__release_shared() + 84
18  Espresso                            0x00000001ba944d00 std::__1::__hash_table<std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>, std::__1::__unordered_map_hasher<Espresso::platform, std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>, std::__1::hash<Espresso::platform>, std::__1::equal_to<Espresso::platform>, true>, std::__1::__unordered_map_equal<Espresso::platform, std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>, std::__1::equal_to<Espresso::platform>, std::__1::hash<Espresso::platform>, true>, std::__1::allocator<std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>>>::__deallocate_node(std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>, void*>*>*) + 40
19  Espresso                            0x00000001ba8ea640 std::__1::__hash_table<std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>, std::__1::__unordered_map_hasher<Espresso::platform, std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>, std::__1::hash<Espresso::platform>, std::__1::equal_to<Espresso::platform>, true>, std::__1::__unordered_map_equal<Espresso::platform, std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>, std::__1::equal_to<Espresso::platform>, std::__1::hash<Espresso::platform>, true>, std::__1::allocator<std::__1::__hash_value_type<Espresso::platform, std::__1::shared_ptr<Espresso::net_compiler>>>>::~__hash_table() + 28
20  Espresso                            0x00000001ba8e5750 Espresso::net::~net() + 396
21  Espresso                            0x00000001bacd69e4 std::__1::__shared_weak_count::__release_shared() + 84
22  Espresso                            0x00000001bad750e4 std::__1::__vector_base<std::__1::shared_ptr<Espresso::net>, std::__1::allocator<std::__1::shared_ptr<Espresso::net>>>::clear() + 52
23  Espresso                            0x00000001ba902448 std::__1::__vector_base<std::__1::shared_ptr<Espresso::net>, std::__1::allocator<std::__1::shared_ptr<Espresso::net>>>::~__vector_base() + 36
24  Espresso                            0x00000001ba8ed99c std::__1::unique_ptr<EspressoLight::espresso_plan::priv_t, std::__1::default_delete<EspressoLight::espresso_plan::priv_t>>::reset(EspressoLight::espresso_plan::priv_t*) + 188
25  Espresso                            0x00000001ba95b7fc EspressoLight::espresso_plan::~espresso_plan() + 72
26  Espresso                            0x00000001ba902078 EspressoLight::espresso_plan::~espresso_plan() + 16
27  Espresso                            0x00000001ba8e690c espresso_plan_destroy + 372
28  CoreML                              0x00000001c48c45cc -[MLNeuralNetworkEngine _deallocContextAndPlan] + 40
29  CoreML                              0x00000001c48c43bc -[MLNeuralNetworkEngine dealloc] + 40
30  libobjc.A.dylib                     0x00000001a67ed4a4 object_cxxDestructFromClass(objc_object*, objc_class*) + 116
31  libobjc.A.dylib                     0x00000001a67f221c objc_destructInstance + 80
32  libobjc.A.dylib                     0x00000001a67fb9d0 _objc_rootDealloc + 80

~~~~ Our code that release the MLModel object ~~~~ 

Moreover, we use a synchronization mechanism to ensure that the release of the MLModel and the data processing of the model (by calling [model predictionFromFeatures]) do not occur simultaneously. What could be the possible causes of the problem, and how can we prevent it from happening? Any advice would be appreciated.

It could be a bug which was fixed in iOS 18. Could you please file a Feedback Assistance report so that we can confirm and also potentially provide a workaround?

MLModel crashes when it is released on some iOS systems
 
 
Q