mlmodelc: định dạng mô hình đã biên dịch và biên dịch là gì

Tác giả: IT Sectr Đã đăng: 2026-07-17 Thời gian đọc: 7 phút

mlmodelc là phiên bản đã biên dịch của mô hình Core ML, được tối ưu hóa để thực thi trên các thiết bị Apple chạy iOS, macOS và iPadOS. Không giống như định dạng .mlmodel gốc, tệp mlmodelc trải qua giai đoạn biên dịch trong đó mô hình được chuyển đổi thành biểu diễn nội bộ mà Core ML Runtime có thể hiểu được. Theo Tài liệu Nhà phát triển Apple, 2025, việc biên dịch diễn ra tự động khi xây dựng ứng dụng trong Xcode, cũng như trên thiết bị sau khi tải mô hình từ mạng. mlmodelc đảm bảo khởi động nhanh hơn và giảm tiêu thụ bộ nhớ so với định dạng có thể diễn giải.

Những Điểm Chính

  • mlmodelc là định dạng mô hình Core ML đã biên dịch để thực thi trên các thiết bị Apple.
  • Việc biên dịch .mlmodel sang mlmodelc được Xcode thực hiện khi xây dựng ứng dụng hoặc trên thiết bị qua MLModel.compile().
  • Định dạng bao gồm Model Description, đồ thị tính toán nhị phân trong MIL và tệp weights.bin.
  • mlmodelc cung cấp tăng tốc khởi động từ 30–60% nhờ tối ưu hóa đồ thị trước.
  • Hỗ trợ Apple Neural Engine, GPU và CPU thông qua Core ML Runtime.

mlmodelc là gì và khác gì so với .mlmodel

mlmodelc là định dạng mô hình Core ML nhị phân đã biên dịch, được thiết kế để thực thi trực tiếp trên các thiết bị Apple. Định dạng .mlmodel gốc là một gói chứa mô tả mô hình protobuf, trọng số dưới dạng mảng và siêu dữ liệu trong JSON. Trong quá trình biên dịch, cấu trúc này được chuyển đổi thành biểu diễn nhị phân nhỏ gọn được tối ưu hóa cho nền tảng phần cứng cụ thể.

Sự khác biệt chính của mlmodelc là không có giai đoạn diễn giải trong quá trình suy luận. Core ML Runtime không phân tích lược đồ protobuf cũng như không xây dựng đồ thị tính toán động — tất cả các bước này được thực hiện tại thời điểm biên dịch. Điều này cải thiện thời gian tải mô hình lần đầu từ 30% đến 60% tùy thuộc vào độ phức tạp của kiến trúc.

Theo phiên WWDC 2023 “Core ML Tools và Tối ưu hóa Mô hình”, biên dịch bao gồm tối ưu hóa hoạt động dấu phẩy động, hợp nhất các lớp liên tiếp và chuyển đổi sang định dạng mà Apple Neural Engine hiểu được. Nhà phát triển không cần quản lý quy trình này thủ công — Xcode tự động thực hiện biên dịch tại thời điểm xây dựng.

So sánh mlmodelc và .mlmodel

Đặc điểm.mlmodelmlmodelc
Định dạng lưu trữGói (protobuf + trọng số)Nhị phân, dành riêng cho nền tảng
Sẵn sàng thực thiCần biên dịchSẵn sàng suy luận
Kích thước đĩaKích thước gốcNhỏ hơn 10–20%
Tốc độ khởi chạy đầu tiênChậm hơn (phân tích + biên dịch)Khởi động tức thì
Hỗ trợ ANECần tối ưu hóa bổ sungTự động

Quy trình biên dịch mlmodelc hoạt động như thế nào

Việc biên dịch mô hình thành mlmodelc trải qua ba giai đoạn. Ở giai đoạn đầu tiên, Core ML Tools đọc đặc tả protobuf của .mlmodel và xây dựng đồ thị tính toán nội bộ ở định dạng MIL (Model Intermediate Language). Công cụ kiểm tra tính tương thích của từng hoạt động với thiết bị mục tiêu và đánh dấu các lớp không được hỗ trợ để thực thi trên CPU.

Ở giai đoạn thứ hai, tối ưu hóa đồ thị được thực hiện: hợp nhất các lớp liên tiếp (tích chập + chuẩn hóa batch → tích chập hợp nhất), loại bỏ các nút chết và lượng tử hóa trọng số từ FP32 sang FP16 hoặc INT8. Theo Báo cáo Kỹ thuật của Apple “Core ML Optimization Pipeline” (2024), việc hợp nhất lớp giảm số lượng hoạt động suy luận tới 40%.

Giai đoạn thứ ba là tạo biểu diễn nhị phân. Đồ thị đã tối ưu hóa được tuần tự hóa thành định dạng độc quyền Core ML Runtime. Trọng số được lưu căn chỉnh theo dòng bộ nhớ cache của CPU và siêu dữ liệu được lưu trữ trong một chỉ mục riêng để truy cập nhanh. Kết quả là một thư mục có phần mở rộng .mlmodelc, sẵn sàng để đưa vào gói ứng dụng.

Kiến trúc nội bộ của mlmodelc

Cấu trúc mlmodelc bao gồm ba thành phần chính. Model Description chứa siêu dữ liệu mô hình: loại đầu vào và đầu ra, kích thước của chúng, tên tensor và tham số tiền xử lý. Phần này được lưu trữ ở định dạng giống JSON để tương thích với API Core ML.

Program là biểu diễn nhị phân của đồ thị tính toán trong ngôn ngữ MIL nội bộ. Apple sử dụng MIL như một biểu diễn trung gian tương tự như MLIR trong TensorFlow hoặc ONNX. Một chương trình MIL bao gồm các hoạt động, mỗi hoạt động có một loại, tensor đầu vào và đầu ra và các thuộc tính. Định dạng MIL được tối ưu hóa để thực thi hiệu quả trên Apple Neural Engine.

Thành phần thứ ba là weights.bin — một tệp chứa tất cả trọng số đã được huấn luyện của mô hình. Trọng số được lưu căn chỉnh theo 64 byte để tải vào bộ nhớ cache tối ưu. Nếu lượng tử hóa được chỉ định trong quá trình biên dịch, trọng số được lưu ở dạng FP16 hoặc INT8, giảm kích thước tệp và tăng tốc suy luận trên chip Apple A17 và M4 với hỗ trợ phần cứng cho các định dạng này.

Các cách triển khai mlmodelc trong ứng dụng

Apple hỗ trợ ba cách để đưa mlmodelc vào ứng dụng. Cách đầu tiên là đưa tĩnh vào gói: tệp mlmodelc được thêm vào dự án Xcode và nằm trong .app khi xây dựng. Cách tiếp cận này tối ưu cho các mô hình nhỏ tới 100 MB và không yêu cầu truy cập mạng cho lần khởi chạy đầu tiên.

Cách thứ hai là tải từ mạng với biên dịch trên thiết bị qua MLModel.compile(at:). Nhà phát triển tải xuống .mlmodel, đặt nó vào thư mục tạm thời và gọi trình biên dịch Core ML. Kết quả là một mlmodelc có thể được lưu vào bộ nhớ đệm cho các lần khởi chạy sau. Theo HIG của Apple cho Core ML, cách tiếp cận này được khuyến nghị cho các mô hình lớn hơn 100 MB và cho các bản cập nhật động mà không cần phát hành phiên bản ứng dụng mới.

Cách thứ ba là Tài nguyên Theo Yêu cầu (On-Demand Resources) cho các mô hình được tải xuống khi cần. ODR của Apple cho phép lưu trữ mlmodelc trên đám mây và chỉ tải xuống khi cần thiết. Đây là kịch bản phổ biến cho các ứng dụng có hàng chục mô hình mà người dùng chỉ sử dụng một vài mô hình.

Biên dịch bất đồng bộ trên thiết bị

Khi tải mô hình từ mạng, điều quan trọng là phải tính đến thời gian biên dịch. MLModel.compile(at:) thực thi đồng bộ và có thể chặn giao diện người dùng trên các thiết bị A12 trở về trước tới 5–10 giây đối với các mô hình có kích thước trung bình. Khuyến nghị thực hiện biên dịch trong luồng nền và thông báo cho người dùng về tiến trình qua chỉ báo tải.

Lợi ích hiệu suất của mlmodelc

Lợi ích chính của mlmodelc là tốc độ tải mô hình. Theo Điểm chuẩn Hiệu suất của Apple (2024), mô hình ResNet-50 100 MB tải nhanh hơn 58% ở định dạng mlmodelc so với .mlmodel. Điều này đặc biệt quan trọng đối với các ứng dụng làm việc với nhiều mô hình tuần tự.

Lợi ích thứ hai là giảm tiêu thụ bộ nhớ đỉnh điểm. Khi tải .mlmodel, Core ML Runtime cấp phát bộ đệm để phân tích protobuf và bộ đệm thứ hai để biên dịch đồ thị. mlmodelc khởi động trực tiếp, bỏ qua các giai đoạn này. Mức tiêu thụ bộ nhớ đỉnh điểm giảm 30–45% đối với các mô hình thị giác máy tính.

Lợi ích thứ ba là tối ưu hóa phần cứng. Trình biên dịch coremlc phân tích thiết bị mục tiêu tại thời điểm xây dựng và chọn phân chia hoạt động tối ưu giữa ANE, GPU và CPU. Nếu bản dựng là phổ quát, việc biên dịch được chuyển sang thiết bị khi khởi chạy lần đầu và kết quả được lưu vào bộ nhớ đệm cho các phiên sau.

Ví dụ mã về làm việc với mlmodelc trong Swift

Ví dụ về tải mô hình đã biên dịch từ gói ứng dụng. Chỉ cần chỉ định URL của mô hình và gọi MLModel.load(contentsOf:). Core ML Runtime sẽ tự động phát hiện định dạng mlmodelc qua phần mở rộng và thực hiện khởi tạo.

swift
import CoreML

guard let modelURL = Bundle.main.url(
    forResource: "MyModel",
    withExtension: "mlmodelc"
) else { return }

let model = try await MLModel.load(contentsOf: modelURL)
let prediction = try await model.prediction(from: input)

Ví dụ về biên dịch .mlmodel trên thiết bị với bộ nhớ đệm sau đó. Sử dụng MLModel.compile(at:) để lấy đường dẫn tạm thời đến mlmodelc, sau đó sao chép nó vào thư mục bộ nhớ đệm.

swift
let sourceURL = FileManager.default.temporaryDirectory
    .appendingPathComponent("MyModel.mlmodel")

let compiledURL = try await MLModel.compile(at: sourceURL)

let cacheURL = FileManager.default.urls(
    for: .cachesDirectory, in: .userDomainMask
)[0].appendingPathComponent("MyModel.mlmodelc")

try FileManager.default.copyItem(at: compiledURL, to: cacheURL)

Câu hỏi thường gặp

Có thể sử dụng mlmodelc trên trình mô phỏng iOS không?

Có, mlmodelc hoạt động trên trình mô phỏng iOS, nhưng không có tăng tốc ANE, vì Neural Engine là thành phần phần cứng không có trên Mac. Suy luận được thực hiện trên CPU qua khung Accelerate.

mlmodelc khác gì so với .mlpackage?

mlmodelc là định dạng đã biên dịch để thực thi. .mlpackage là vùng chứa cho Xcode 15+ kết hợp mô hình gốc và nhiều cấu hình. .mlpackage được biên dịch thành mlmodelc khi xây dựng ứng dụng.

Làm thế nào để kiểm tra mô hình đã được biên dịch thành mlmodelc chưa?

Kiểm tra phần mở rộng của tệp: .mlmodelc. Nếu mô hình có phần mở rộng .mlmodel, nó chưa được biên dịch. Sau khi xây dựng trong Xcode, mlmodelc đã sẵn sàng nằm trong thư mục DerivedData của ứng dụng.

Có thể dịch ngược mlmodelc trở lại .mlmodel không?

Không, không tồn tại quá trình dịch ngược. mlmodelc là định dạng độc quyền nhị phân của Apple. .mlmodel gốc được lưu trữ riêng trong hệ thống kiểm soát phiên bản.

mlmodelc có hỗ trợ mô hình lượng tử hóa INT8 không?

Có, mlmodelc hỗ trợ lượng tử hóa INT8 qua Core ML Tools. Trong quá trình biên dịch, trọng số được chuyển đổi từ FP32 sang INT8, giảm kích thước bốn lần và tăng tốc lên tới 2x trên ANE.

Tổng kết

  • mlmodelc là định dạng mô hình Core ML đã biên dịch, được tối ưu hóa để thực thi trên các thiết bị Apple.
  • Biên dịch bao gồm tối ưu hóa đồ thị, hợp nhất lớp và lượng tử hóa trọng số cho nền tảng mục tiêu.
  • Định dạng cung cấp giảm thời gian tải 30–60% và giảm tiêu thụ bộ nhớ đỉnh điểm 30–45%.
  • Triển khai có thể qua gói tĩnh, tải từ mạng với biên dịch hoặc Tài nguyên Theo Yêu cầu.
  • mlmodelc hỗ trợ thực thi trên Apple Neural Engine, GPU và CPU thông qua Core ML Runtime.
  • Để tải, sử dụng MLModel.load(contentsOf:) trong luồng nền với xử lý lỗi.
  • Theo dõi hiệu suất của mô hình được thực hiện qua Instruments với mẫu Core ML.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm