4 điểm bởi GN⁺ 2026-03-03 | 2 bình luận | Chia sẻ qua WhatsApp
  • Phân tích trực tiếp cấu trúc bên trong của Apple Neural Engine (ANE) để triển khai cách bỏ qua CoreML và truy cập trực tiếp vào phần cứng
  • Loại bỏ tầng trừu tượng của CoreML và thông qua API _ANEClient để tự thực hiện biên dịch, nạp và chạy mô hình
  • Phân tích MIL (Machine Learning Intermediate Language)định dạng nhị phân E5 để xác nhận ANE là một bộ máy thực thi đồ thị dựa trên các primitive phép toán cố định
  • Chứng minh khả năng truyền dữ liệu zero-copy giữa GPU↔ANE bằng bộ nhớ chia sẻ IOSurface
  • Nghiên cứu này là phần đầu tiên trong loạt 3 bài khám phá đo hiệu năng thực tế và khả năng huấn luyện trên ANE của M4, đồng thời có ý nghĩa như trường hợp điều khiển trực tiếp đầu tiên đối với phần cứng riêng tư của Apple

Cách tiếp cận reverse engineering với sự cộng tác giữa con người và AI

  • Nghiên cứu được thực hiện với sự hợp tác giữa nhà nghiên cứu con người và Claude Opus 4.6 của Anthropic
    • Con người định hướng khám phá, AI thực hiện phân tích dữ liệu và viết mã
  • Mục tiêu khởi đầu từ câu hỏi: “Liệu có thể huấn luyện trực tiếp mô hình trên Apple Neural Engine hay không?”
  • Apple không công khai ISA, cấu trúc nội bộ và giao diện lập trình trực tiếp của ANE
    • Chỉ có thể truy cập thông qua CoreML, khiến việc hiểu cách phần cứng hoạt động trở nên khó khăn
  • Vì vậy, nhóm nghiên cứu đã lần ngược toàn bộ ngăn xếp phần mềm từ CoreML đến driver kernel IOKitxác lập được đường đi mã lệnh để điều khiển ANE trực tiếp

Cấu trúc của Neural Engine

  • ANE không phải GPU hay CPU mà có dạng bộ máy thực thi đồ thị (graph execution engine)
    • Chạy toàn bộ đồ thị mạng nơ-ron đã biên dịch như một phép toán nguyên tử duy nhất
  • ANE trên chip M4 (tên mã H16G) có 16 lõi, độ sâu hàng đợi yêu cầu 127, điều khiển DVFS độc lập, và khả năng ngắt điện 0mW khi nhàn rỗi
  • Apple lần đầu đưa ANE 2 lõi vào A11 (2017) và đã mở rộng qua từng thế hệ

Khác biệt so với các nghiên cứu trước đây

  • Các tài liệu công khai hiện có:
    • Tài liệu về hoạt động và phân tích hiệu năng ANE của Matthijs Hollemans
    • Mẫu reverse engineering ban đầu của mdaiter/ane
    • Driver Linux reverse engineered của Asahi Linux
    • Mã tối ưu hóa transformer chính thức của apple/ml-ane-transformers
  • Thành quả riêng của nghiên cứu này:
    • Truy cập trực tiếp vào API _ANEClient mà không cần CoreML
    • Giải mã đường biên dịch MIL trong bộ nhớ
    • Đo thông lượng thực tế sau khi loại bỏ overhead của CoreML
    • Thực hiện huấn luyện mô hình trên phần cứng vốn chỉ dành cho suy luận

Phương pháp phân tích

  • Khám phá lớp: dùng lệnh dyld_info -objc để trích xuất danh sách các lớp trong AppleNeuralEngine.framework
  • Method swizzling: chặn lời gọi CoreML để xác định đường gọi vào framework riêng tư
  • Phân tích nhị phân: giải mã bundle E5 đã biên dịch để xác định định dạng chương trình
  • Phân tích scaling: thay đổi kích thước ma trận, độ sâu đồ thị và số kênh để suy luận topology phần cứng
  • Kết quả là phát hiện hơn 40 lớp riêng tư như _ANEClient, _ANEModel, _ANERequest, _ANEIOSurfaceObject, _ANEInMemoryModel

Bỏ qua CoreML: truy cập trực tiếp _ANEClient

  • Thông qua _ANEClient, có thể điều khiển trực tiếp toàn bộ pipeline biên dịch → nạp → đánh giá mô hình
  • CoreML thực chất chỉ là một tầng tiện ích bao quanh quá trình này
  • ANE hỗ trợ tối đa 127 yêu cầu đánh giá đồng thời (queue depth), phù hợp cho suy luận streaming thông lượng cao
  • Có thể truyền bộ nhớ chia sẻ giữa GPU và ANE bằng I/O buffer dựa trên IOSurface

MIL: ngôn ngữ đầu vào của ANE

  • CoreML sử dụng MIL (Machine Learning Intermediate Language) thay vì ONNX hay protobuf
    • Dựa trên static single assignment (SSA), khai báo rõ kiểu và shape
    • Trong mã ví dụ, phép toán matmul được biểu diễn rõ ràng
  • Layout tensor dùng định dạng NCDHW + Interleave với cấu trúc [Batch, Channels, Depth, Height, Width]

Định dạng nhị phân E5

  • Chương trình MIL được biên dịch thành nhị phân FlatBuffer E5
    • Nhân ma trận 1024×1024: 2.688 byte, nhân ma trận 128×128: 2.680 byte
    • Kích thước mã gần như giống nhau → chỉ chứa thông tin cấu hình được tham số hóa, không phải thuật toán phép toán ma trận
  • Điều này cho thấy ANE thực thi đồ thị bằng cách kết hợp các primitive phép toán cố định như Conv, MatMul, Elementwise

Đường biên dịch trong bộ nhớ

  • Có thể dùng _ANEInMemoryModelDescriptor để biên dịch MIL ngay trong bộ nhớ mà không cần truy cập đĩa
  • Vấn đề chính và cách xử lý:
    • milText không phải NSString mà cần NSData (byte UTF-8)
    • weights phải ở dạng dictionary ánh xạ tên–dữ liệu
    • Bên trong vẫn cần truy cập thư mục tạm → bắt buộc phải có quyền ghi
  • Phát hiện lỗi chính tả Desctiptor trong mã nội bộ của Apple

Hồ sơ phần cứng

  • Kết quả phân tích IOKit cho thấy ANE có kênh quản lý điện năng và xung nhịp (DVFS) độc lập
    • Có nhiều trigger phần cứng/phần mềm như ANE_ADCLK_TRIG, ANE_PPT_TRIG
  • Trong ANECompiler.framework, Conv được xác nhận là primitive phép toán cốt lõi
    • Ở Part 2, việc chuyển 1×1 Conv thành MatMul được cho là sẽ tăng hiệu năng gấp 3 lần

Giao thức IOSurface

  • Toàn bộ dữ liệu vào/ra đều được xử lý thông qua đối tượng bộ nhớ chia sẻ IOSurface
    • Cùng cơ chế chia sẻ texture như GPU
    • Mở ra khả năng xây dựng pipeline zero-copy GPU↔ANE

Cấu trúc bộ nhớ đệm biên dịch

  • Trình biên dịch ANE lưu cache nhị phân E5 trên đĩa
    • Đường dẫn: ~/Library/Caches/.../com.apple.e5rt.e5bundlecache/.../H16G.bundle/
    • Lần biên dịch đầu mất 20–40ms, nếu trúng cache thì chạy gần như ngay lập tức
    • Có lợi cho suy luận, nhưng với huấn luyện thì cần biên dịch lại do trọng số thay đổi

Các vùng chưa được khám phá

  • Những lớp chưa được phân tích:
    • _ANEChainingRequest — có thể cho phép nối nhiều mô hình trong một lần dispatch
    • _ANESharedEvents, _ANESharedSignalEvent, _ANESharedWaitEvent — fence/signal để đồng bộ GPU↔ANE
    • _ANEPerformanceStats — có thể là bộ đếm hiệu năng phần cứng
    • _ANEVirtualClient — có thể liên quan đến truy cập ảo hóa đa tiến trình
  • Các mục vẫn chưa xác nhận:
    • Vi kiến trúc lõi và ISA của ANE
    • Cách phân bổ lõi cho các phép toán trong đồ thị
    • Tần số xung nhịp và cấu trúc SRAM

Kế hoạch tiếp theo

  • Part 2: scaling của nhân ma trận, nút thắt SRAM, so sánh hiệu năng Conv và MatMul, kiểm chứng con số “38 TOPS” của Apple
  • Part 3: huấn luyện mạng nơ-ron trên ANE
  • Toàn bộ mã được công khai trong thư mục ane/ của github.com/maderix/ANE
  • Môi trường thử nghiệm: M4 Mac Mini, macOS 15.x

2 bình luận

 
GN⁺ 2026-03-03
Ý kiến trên Hacker News
  • Tôi đã làm ở đội Xcode nhiều năm. Tôi hiểu rõ cách Apple cố tình khiến những phần như thế này trở nên khó khăn
    Tôi nghĩ tác giả đã làm một việc thực sự xuất sắc, và cũng đang mong chờ phần 3
    • Trước đây từng có thể tách riêng console của Xcode ra thành một cửa sổ độc lập, nên tôi thắc mắc vì sao họ lại bỏ tính năng đó
  • Tôi không hiểu khi nào Neural Engine thực sự hoạt động trong phần mềm mã nguồn mở
    Tôi chủ yếu dùng các thư viện Python ML như lightgbm, sklearn, xgboost và numpy
    Tôi muốn biết liệu các phép tính này có được tăng tốc trên phần cứng Apple hay không, và có cách đơn giản nào để benchmark không
    Hầu hết benchmark đều ở mức hàm C, nên tôi không rõ ở các thư viện mức cao có hiệu quả hay không
    ChatGPT lại bảo tôi so sánh Intel Mac với Apple Silicon, nghe mà buồn cười. Chắc đây cũng là một phần lý do khiến mọi người vẫn ghét AI
    • Trong phần lớn phần mềm mã nguồn mở, NPU hầu như không được tận dụng
      Lý do là NPU thường được tối ưu riêng cho từng nhà sản xuất, nên các nhà phát triển mã nguồn mở rất khó hỗ trợ
      Apple ANE cũng không phải ngoại lệ, và nghiên cứu lần này có vẻ là một nỗ lực giải quyết vấn đề đó trong phạm vi riêng của Apple ANE
  • Phần 2 có bao gồm benchmark
    Theo bài Inside the M4 Apple Neural Engine, nó đạt hiệu năng 6.6 FLOPS/W và khi không dùng thì tắt hoàn toàn nên tiêu thụ 0W
    • Nhưng con số 38 TOPS mà Apple công bố thì khác với thực tế
      Apple tính “38 TOPS INT8” bằng cách lấy FP16 19 TFLOPS × 2, nhưng phần cứng thực tế không chạy phép toán INT8 nhanh gấp đôi
      Cách tính này khiến tôi thấy giống một kiểu phóng đại hơi không giống Apple
  • Trong bài, từ “chúng tôi” được nói là sự hợp tác giữa maderix (con người) và Claude Opus 4.6 (Anthropic), nhưng thành thật mà nói tôi khó tin được
    LLM có thể tạo ra thông tin sai nhưng rất thuyết phục, đủ để đánh lừa cả chuyên gia
    Tôi nghi ngờ liệu mọi dữ kiện có được kiểm chứng thủ công hay không. Xét ở khía cạnh đó, việc cảnh báo trước như vậy lại khiến tôi thấy may vì có thể khỏi cần đọc
    • Claude có xu hướng che đi benchmark để người dùng chỉ thấy kết quả đẹp
      Trong bài cũng có thể thấy vài benchmark kỳ quặc như vậy
    • Từ trước đến nay con người cũng vẫn viết ra những nghiên cứu dối trá nhưng nghe rất hợp lý
      Ngay cả trước thời LLM, giới học thuật đã đầy những bài báo bị thao túng và các nghiên cứu không thể tái lập
      Cuối cùng, kiểu phân tích này chỉ đáng tin khi có thêm nhiều kỹ sư khác cùng kiểm chứng
  • Tôi cũng mắc lỗi kiểu này, nhưng phần lớn bình luận có vẻ đang trôi sang kiểu “bất cứ thứ gì liên quan Apple”
    Có quá nhiều câu chuyện không liên quan đến chủ đề
  • Thật bất ngờ khi mã nguồn của ANE cũng không được chia sẻ cho cả đội MLX
    Có lẽ đó cũng là một trong những lý do khiến Awni, người phụ trách dự án MLX, rời Apple
  • Những nội dung cơ bản về ANE trên M1/M2 thực ra đã được biết đến qua tài liệu Asahi Linux
    Nhưng điểm hay của bài này là nó xác nhận sâu hơn và mở rộng thêm các nội dung đó
    Nếu CoreML gần như không có overhead với các phép toán matmul lớn, thì vẫn còn nhiều dư địa để các framework AI chạy cục bộ tận dụng ANE cho giai đoạn prefill
    Tuy vậy, bước decode lại bị giới hạn bởi băng thông bộ nhớ, và quá trình biến matmul thành 1x1 convolution thì kém hiệu quả, nên lợi ích rõ ràng là không nhiều
  • Theo tin gần đây, Apple đang chuẩn bị một framework mới thay thế Core ML
    Tên của nó là Core AI, và được cho là sẽ giúp tích hợp LLM bên thứ ba vào ứng dụng dễ dàng hơn
    Bài liên quan: Bloomberg newsletter
  • Bài này rõ ràng là do con người viết, nhưng ở một vài câu vẫn thấy cách diễn đạt rất đặc trưng của LLM
    Dù vậy tôi vẫn thấy nó cực kỳ hữu ích và thú vị
    Kho GitHub được nhắc trong bài cũng rất đáng tham khảo
    • Có lẽ khoảng một năm nữa thôi, khi mọi người tương tác với LLM mỗi ngày, sẽ xuất hiện hiện tượng văn phong AI thấm vào ngôn ngữ của con người
    • Nhìn phần ‘Prior Art’ sẽ thấy rất nhiều động từ lặp lại không cần thiết như “documenting”, “providing insight into”
      Đoạn đó đúng là có dấu vết do AI viết
  • Hiện tại của kỹ sư phần mềm đã ở mức tương lai rồi
    Điều quan trọng hơn cả việc reverse engineering ANE là Manjeet đã mở rộng năng lực kỹ thuật của mình đến mức nào nhờ AI
    Đây chính là thời đại mà AI đang tăng tốc năng suất của lập trình viên