Skip to content

Add support for iOS15 / macOS12 in MPS Delegate; Add support for node visitor pattern#13

Closed
DenisVieriu97 wants to merge 1 commit intomainfrom
dev/denis/node_visitor_preprocessing
Closed

Add support for iOS15 / macOS12 in MPS Delegate; Add support for node visitor pattern#13
DenisVieriu97 wants to merge 1 commit intomainfrom
dev/denis/node_visitor_preprocessing

Conversation

@DenisVieriu97
Copy link
Copy Markdown
Owner

@DenisVieriu97 DenisVieriu97 commented Jan 3, 2024

Summary of changes:

  • Replace the previous MPS runtime from ExecuTorch which was relying on iOS17 / macOS Sonoma APIs for serialization of the MPSGraphExecutable. Instead of creating the MPSGraph nodes and serializing them during AOT, create the corresponding entries of the EdgeIR nodes in the FlatBuffer, and parse them during runtime to construct the graph. This removes any dependency on iOS17 / macOS 14.0 APIs.
  • Add support for node visitor pattern:
    • Each node visitor class visits an op and serializes the data into MPSTensors and MPSNodes which get appended in the FlatBuffer
    • The entries from the FlatBuffer are parsed in the runtime and based on them the MPSGraph is constructed (for more info see MPSGraphBuilder class and corresponding ops from operators/ folder.
    • This method removes the addition read and writes to disk of the MPSGraphExecutable (once during AOT and once during runtime).

@DenisVieriu97 DenisVieriu97 marked this pull request as draft January 3, 2024 23:24
@DenisVieriu97 DenisVieriu97 changed the title [DFRAFT] Add support for iOS15 / macOS12 in MPS Delegate; Add support for node visitor pattern Add support for iOS15 / macOS12 in MPS Delegate; Add support for node visitor pattern Jan 19, 2024
@DenisVieriu97 DenisVieriu97 marked this pull request as ready for review January 19, 2024 00:41
@DenisVieriu97 DenisVieriu97 force-pushed the dev/denis/node_visitor_preprocessing branch from 5586cc8 to 62f8639 Compare January 19, 2024 05:11
@DenisVieriu97 DenisVieriu97 force-pushed the dev/denis/node_visitor_preprocessing branch from 62f8639 to b48a228 Compare January 19, 2024 17:09
@DenisVieriu97 DenisVieriu97 force-pushed the dev/denis/node_visitor_preprocessing branch from 73ad2f4 to fd617b0 Compare January 19, 2024 19:47
@DenisVieriu97
Copy link
Copy Markdown
Owner Author

Already merged in main executorch branch.

manuelcandales pushed a commit that referenced this pull request Aug 27, 2025
BNNS copy crashes the process when the dtypes differ
(pytorch#11714).

With the example in this PR
(pytorch#11714), we crash the
process on main. Here is the stack trace from LLDB:

```
Process 19234 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x0000000190ac9388 libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill:
->  0x190ac9388 <+8>:  b.lo   0x190ac93a8    ; <+40>
    0x190ac938c <+12>: pacibsp 
    0x190ac9390 <+16>: stp    x29, x30, [sp, #-0x10]!
    0x190ac9394 <+20>: mov    x29, sp
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
  * frame #0: 0x0000000190ac9388 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x0000000190b0288c libsystem_pthread.dylib`pthread_kill + 296
    frame #2: 0x0000000190a0bc60 libsystem_c.dylib`abort + 124
    frame #3: 0x0000000190910174 libsystem_malloc.dylib`malloc_vreport + 892
    frame #4: 0x0000000190913c90 libsystem_malloc.dylib`malloc_report + 64
    frame #5: 0x000000019091821c libsystem_malloc.dylib`___BUG_IN_CLIENT_OF_LIBMALLOC_POINTER_BEING_FREED_WAS_NOT_ALLOCATED + 32
    frame #6: 0x000000019d2f4084 libBNNS.dylib`___lldb_unnamed_symbol1620 + 564
    frame #7: 0x000000019d2f5bac libBNNS.dylib`___lldb_unnamed_symbol1628 + 680
    frame #8: 0x000000019d69ce48 libBNNS.dylib`BNNSCopy + 616
    frame #9: 0x000000030c74d950 _portable_lib.cpython-310-darwin.so`(anonymous namespace)::copy_using_bnns(executorchcoreml::MultiArray const&, executorchcoreml::MultiArray&) + 188
    frame #10: 0x000000030c74cfdc _portable_lib.cpython-310-darwin.so`(anonymous namespace)::copy(executorchcoreml::MultiArray const&, executorchcoreml::MultiArray&, executorchcoreml::MultiArray::CopyOptions) + 72
    frame #11: 0x000000030c74ceec _portable_lib.cpython-310-darwin.so`executorchcoreml::MultiArray::copy(executorchcoreml::MultiArray&, executorchcoreml::MultiArray::CopyOptions) const + 148
    frame #12: 0x000000030c7488d4 _portable_lib.cpython-310-darwin.so`invocation function for block in (anonymous namespace)::copy(MLMultiArray*, executorchcoreml::MultiArray&) + 376
    frame #13: 0x000000030c748ac8 _portable_lib.cpython-310-darwin.so`invocation function for block in (anonymous namespace)::copy(MLMultiArray*, executorchcoreml::MultiArray&) + 52
    frame #14: 0x000000019ad33f4c CoreML`CoreML::MultiArrayBuffer::getBytesWithHandler(void (void const*, unsigned long) block_pointer) const + 340
    frame pytorch#15: 0x000000019ad34138 CoreML`-[MLMultiArray(ScopedBufferAccess) getBytesWithHandler:] + 152
    frame pytorch#16: 0x000000030c7485ec _portable_lib.cpython-310-darwin.so`(anonymous namespace)::copy(MLMultiArray*, executorchcoreml::MultiArray&) + 296
    frame pytorch#17: 0x000000030c744f68 _portable_lib.cpython-310-darwin.so`(anonymous namespace)::set_outputs(std::__1::vector<executorchcoreml::MultiArray, std::__1::allocator<executorchcoreml::MultiArray>>&, NSArray<MLMultiArray*>*) + 180
```


With this PR, the process succeeds.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant