Chuyển đổi mô hình Core ML: nó là gì, các bước và phương pháp chuyển đổi

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

Core ML Model Conversion là quá trình chuyển đổi các mô hình học máy đã huấn luyện từ các framework phổ biến sang định dạng Core ML (.mlmodel), được tối ưu hóa để chạy trên các thiết bị Apple. Việc chuyển đổi là cần thiết vì PyTorch, TensorFlow và các framework khác sử dụng định dạng riêng không tương thích với Core ML Runtime. Theo tài liệu coremltools, 2025, thư viện hỗ trợ chuyển đổi từ PyTorch, TensorFlow 1.x và 2.x, Keras, ONNX, scikit-learn và libsvm. coremltools tự động thay thế các thao tác không được hỗ trợ bằng các thao tác tương đương, giữ nguyên độ chính xác số của mô hình.

Những điểm chính

  • Core ML Model Conversion — chuyển đổi mô hình ML sang định dạng .mlmodel để chạy trên thiết bị Apple.
  • Công cụ chính là coremltools, một thư viện Python mã nguồn mở của Apple.
  • Hỗ trợ PyTorch, TensorFlow, Keras, ONNX và scikit-learn.
  • Quy trình bao gồm theo dõi đồ thị, thay thế thao tác và xác minh độ chính xác.
  • Sau khi chuyển đổi, mô hình có thể được lượng tử hóa thành FP16 hoặc INT8 để tăng tốc.

Core ML Model Conversion là gì

Core ML Model Conversion là quá trình chuyển đổi một mô hình học máy đã huấn luyện từ định dạng framework nguồn sang định dạng .mlmodel mà Core ML Runtime trên các thiết bị Apple có thể hiểu được. Nếu không chuyển đổi, một mô hình được huấn luyện trong PyTorch hoặc TensorFlow không thể được tải và chạy trực tiếp trên iOS hoặc macOS.

Quá trình chuyển đổi bao gồm dịch đồ thị tính toán: mỗi toán tử từ framework nguồn (Conv2D, BatchNorm, ReLU) được ánh xạ tới toán tử Core ML tương ứng. Nếu không có sự thay thế trực tiếp, coremltools sử dụng các thao tác tổng hợp hoặc các lớp tùy chỉnh. Theo Apple ML Research, thư viện bao phủ hơn 200 toán tử từ nhiều framework khác nhau.

Sau khi chuyển đổi, mô hình được lưu ở định dạng gói .mlmodel, bao gồm mô tả đồ thị protobuf, trọng số ở dạng nhị phân và siêu dữ liệu. Tập tin này sau đó được biên dịch thành mlmodelc để chạy trên thiết bị đích.

Các framework và định dạng được hỗ trợ

coremltools phiên bản 7.x hỗ trợ chuyển đổi từ sáu nguồn. PyTorch — qua torch.jit.trace hoặc torch.export, TensorFlow 2.x — qua SavedModel và Keras H5, TensorFlow 1.x — qua đồ thị đóng băng .pb. Đối với ONNX, một biểu diễn trung gian được sử dụng, sau đó được dịch sang Core ML.

Ma trận tương thích framework

FrameworkĐịnh dạng đầu vàoAPI coremltools
PyTorchTorchScript, torch.exportCTConverter / convert()
TensorFlow 2.xSavedModel, Keras H5convert()
TensorFlow 1.xFrozen .pbconvert()
ONNX.onnxonnx_to_coreml()
scikit-learn.pkl / Pipelineconverters.sklearn.convert()
Keras.h5 / .kerasconvert()

Công cụ chuyển đổi: coremltools

coremltools là thư viện Python mã nguồn mở chính thức của Apple, có sẵn qua pip install coremltools. Thư viện cung cấp một API thống nhất để chuyển đổi từ tất cả các framework được hỗ trợ, cũng như các công cụ xử lý hậu kỳ: lượng tử hóa, kiểm tra độ chính xác và trực quan hóa đồ thị.

Cài đặt và chuyển đổi mô hình cơ bản từ PyTorch:

python
import coremltools as ct
import torch
import torchvision

model = torchvision.models.resnet18(pretrained=True)
model.eval()

example_input = torch.rand(1, 3, 224, 224)
traced_model = torch.jit.trace(model, example_input)

mlmodel = ct.convert(
    traced_model,
    source="pytorch",
    inputs=[ct.ImageType(shape=example_input.shape)]
)
mlmodel.save("ResNet18.mlmodel")

Để chuyển đổi từ TensorFlow, hãy sử dụng SavedModel làm nguồn. coremltools tự động xác định các tensor đầu vào và đầu ra dựa trên signature_def:

python
import coremltools as ct

mlmodel = ct.convert(
    "saved_model_dir",
    source="tensorflow",
    @minimum_deployment_target=ct.target.iOS16
)
mlmodel.save("MyTFModel.mlmodel")

Các bước chuyển đổi mô hình

Quy trình chuyển đổi bao gồm bốn bước. Ở bước đầu tiên, coremltools tải mô hình nguồn và thực hiện theo dõi (tracing) hoặc quét đồ thị. Đối với PyTorch, torch.jit.trace được sử dụng, nó chạy một đầu vào mẫu qua mô hình và ghi lại trình tự các thao tác.

Ở bước thứ hai, ánh xạ toán tử được thực hiện. Mỗi toán tử từ đồ thị nguồn được ánh xạ tới một toán tử Core ML. Nếu không có sự thay thế trực tiếp, coremltools chia toán tử thành một chuỗi các toán tử được hỗ trợ. Theo tài liệu coremltools, độ bao phủ toán tử PyTorch vượt quá 95% đối với các kiến trúc điển hình.

Bước thứ ba là tối ưu hóa đồ thị. coremltools thực hiện hợp nhất các thao tác (ví dụ, conv + batch norm), loại bỏ các chuyển đổi không cần thiết và sắp xếp lại các toán tử để cải thiện hiệu quả. Bước thứ tư là tuần tự hóa sang định dạng .mlmodel với việc bảo toàn trọng số và siêu dữ liệu.

Các vấn đề thường gặp và giải pháp

Vấn đề phổ biến nhất khi chuyển đổi là các thao tác không được hỗ trợ. Nếu mô hình chứa một toán tử không có trong Core ML, coremltools báo lỗi kèm tên thao tác. Giải pháp là thay thế toán tử bằng một tổ hợp tương đương của các toán tử được hỗ trợ hoặc triển khai một lớp tùy chỉnh thông qua API lớp tùy chỉnh.

Vấn đề thứ hai là sự không khớp về kích thước. PyTorch sử dụng định dạng NCHW, trong khi Core ML sử dụng NHWC theo mặc định. coremltools tự động chèn phép chuyển vị, nhưng đôi khi thứ tự trục được xác định không chính xác. Hãy kiểm tra kích thước đầu vào và đầu ra trong nhật ký chuyển đổi và nếu cần, hãy chỉ định input_features với tên chính xác.

Vấn đề thứ ba là mất độ chính xác sau khi lượng tử hóa. Khi chuyển đổi với bảng màu FP16 hoặc INT8, độ chính xác của mô hình có thể giảm. coremltools cung cấp tiện ích ct.models.CompiledModel để so sánh đầu ra của mô hình nguồn và mô hình đã chuyển đổi trên cùng dữ liệu đầu vào. Nếu độ chênh lệch vượt quá 1%, hãy sử dụng lượng tử hóa với bảng màu FP16 mà không cần hiệu chuẩn hoặc bỏ qua hoàn toàn việc lượng tử hóa.

Ví dụ chuyển đổi từ PyTorch và TensorFlow

Ví dụ về chuyển đổi mô hình MobileNetV3 từ PyTorch với chỉ định loại đầu vào và phiên bản iOS tối thiểu. Sử dụng ct.ImageType để tự động chuẩn hóa hình ảnh:

python
import coremltools as ct
import torchvision

model = torchvision.models.mobilenet_v3_small(
    pretrained=True
)
model.eval()
example = torch.rand(1, 3, 224, 224)
traced = torch.jit.trace(model, example)

mlmodel = ct.convert(
    traced,
    source="pytorch",
    inputs=[ct.ImageType(
        shape=example.shape,
        scale=1.0/255.0,
        bias=[0, 0, 0]
    )],
    @minimum_deployment_target=ct.target.iOS16
)

# Lưu vào .mlmodel để biên dịch sau trong Xcode
mlmodel.save("MobileNetV3.mlmodel")

Ví dụ về chuyển đổi từ TensorFlow Keras với lượng tử hóa FP16. Chỉ định minimum_deployment_target để bật hỗ trợ FP16 trên các thiết bị có Apple A13 trở lên:

python
import coremltools as ct
from tensorflow import keras

keras_model = keras.applications.EfficientNetB0(
    weights="imagenet"
)

mlmodel = ct.convert(
    keras_model,
    source="tensorflow",
    @minimum_deployment_target=ct.target.iOS17
)

# Lượng tử hóa trọng số thành FP16 để giảm kích thước 2 lần
mlmodel_fp16 = ct.models.neural_network.quantization_utils.quantize_weights(
    mlmodel, 16
)
mlmodel_fp16.save("EfficientNetB0_fp16.mlmodel")

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

Tôi có thể chuyển đổi mô hình mà không cần truy cập mã nguồn không?

Có, nếu mô hình được lưu ở định dạng TorchScript, SavedModel hoặc ONNX. coremltools tải các định dạng này mà không cần mã nguồn và thực hiện chuyển đổi dựa trên đồ thị tính toán.

Làm thế nào để biết thao tác nào không được hỗ trợ trong Core ML?

coremltools xuất danh sách các thao tác không được hỗ trợ trong nhật ký khi chuyển đổi. Sử dụng ct.utils.get_coreml_operations() để lấy danh sách đầy đủ các toán tử Core ML khả dụng.

Bảng màu lượng tử hóa trong coremltools là gì?

Bảng màu lượng tử hóa là một tập hợp các tham số để nén trọng số của mô hình: fp16, int8 hoặc palettization. coremltools hỗ trợ bảng màu 8-bit, 16-bit và lượng tử hóa LUT với các độ sâu bit khác nhau.

Có cần biên dịch sau khi chuyển đổi không?

Có, tập tin .mlmodel phải được biên dịch thành mlmodelc trước khi chạy trên thiết bị. Việc biên dịch được thực hiện tự động trong Xcode khi xây dựng hoặc trên thiết bị thông qua MLModel.compile(at:).

Làm thế nào để xác minh độ chính xác của mô hình đã chuyển đổi?

Sử dụng ct.models.CompiledModel để so sánh đầu ra của mô hình nguồn và mô hình đã chuyển đổi. Cung cấp cùng dữ liệu đầu vào và so sánh kết quả bằng các chỉ số MSE hoặc cosine similarity.

Tổng kết

  • Core ML Model Conversion là quá trình chuyển đổi các mô hình ML sang định dạng .mlmodel để chạy trên các thiết bị Apple.
  • Công cụ chính là coremltools, hỗ trợ PyTorch, TensorFlow, Keras, ONNX và scikit-learn.
  • Chuyển đổi bao gồm theo dõi đồ thị, ánh xạ toán tử, tối ưu hóa và tuần tự hóa.
  • Các thao tác không được hỗ trợ được thay thế bằng các tổ hợp tương đương hoặc triển khai qua API lớp tùy chỉnh.
  • Sau khi chuyển đổi, lượng tử hóa FP16 và INT8 có sẵn để giảm kích thước và tăng tốc suy luận.
  • Trước khi triển khai, hãy xác minh độ chính xác của mô hình thông qua ct.models.CompiledModel.
  • Lên kế hoạch đường ống chuyển đổi như một phần của CI/CD để cập nhật mô hình tự động trong ứng dụng.

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