mlmodelc adalah versi terkompilasi dari model Core ML, dioptimalkan untuk eksekusi pada perangkat Apple yang menjalankan iOS, macOS, dan iPadOS. Berbeda dengan format asli .mlmodel, file mlmodelc melalui tahap kompilasi di mana model diubah menjadi representasi internal yang dapat dipahami oleh Core ML Runtime. Menurut Apple Developer Documentation, 2025, kompilasi dilakukan secara otomatis saat membangun aplikasi di Xcode, serta pada perangkat setelah mengunduh model dari jaringan. mlmodelc memberikan startup yang lebih cepat dan konsumsi memori yang lebih rendah dibandingkan dengan format yang diinterpretasikan.
Poin Penting
mlmodelc adalah format biner terkompilasi dari model Core ML, yang dirancang untuk eksekusi langsung pada perangkat Apple. Format asli .mlmodel adalah paket yang berisi deskripsi model dalam protobuf, bobot dalam bentuk array, dan metadata dalam JSON. Saat kompilasi, struktur ini diubah menjadi representasi biner yang ringkas, dioptimalkan untuk platform perangkat keras tertentu.
Perbedaan utama mlmodelc adalah tidak adanya tahap interpretasi selama inferensi. Core ML Runtime tidak mengurai skema protobuf dan tidak membangun grafik komputasi secara dinamis — semua langkah ini telah dilakukan pada tahap kompilasi. Ini memberikan penghematan waktu startup pertama model sebesar 30% hingga 60% tergantung pada kompleksitas arsitektur.
Menurut sesi WWDC 2023 „Core ML Tools dan Optimasi Model”, kompilasi mencakup optimasi operasi floating-point, penggabungan lapisan berurutan, dan konversi ke format yang dapat dipahami oleh Apple Neural Engine. Pengembang tidak perlu mengelola proses ini secara manual — Xcode melakukan kompilasi secara otomatis pada tahap pembangunan.
| Karakteristik | .mlmodel | mlmodelc |
|---|---|---|
| Format penyimpanan | Paket (protobuf + bobot) | Biner, spesifik platform |
| Kesiapan eksekusi | Memerlukan kompilasi | Siap untuk inferensi |
| Ukuran pada disk | Ukuran asli | 10–20% lebih kecil |
| Kecepatan startup pertama | Lebih lambat (penguraian + kompilasi) | Startup instan |
| Dukungan ANE | Memerlukan optimasi tambahan | Otomatis |
Kompilasi model ke mlmodelc melalui tiga tahap. Pada tahap pertama, Core ML Tools membaca spesifikasi protobuf .mlmodel dan membangun grafik komputasi internal dalam format MIL (Model Intermediate Language). Alat ini memeriksa kompatibilitas setiap operasi dengan perangkat target dan menandai lapisan yang tidak didukung untuk eksekusi pada CPU.
Pada tahap kedua, dilakukan optimasi grafik: penggabungan lapisan berurutan (convolution + batch norm → fused convolution), penghapusan node mati, kuantisasi bobot dari FP32 ke FP16 atau INT8. Menurut Apple Engineering Report „Core ML Optimization Pipeline” (2024), penggabungan lapisan mengurangi jumlah operasi inferensi hingga 40%.
Tahap ketiga — generasi representasi biner. Grafik yang dioptimalkan diserialisasi ke format proprietary Core ML Runtime. Bobot disimpan dengan perataan pada jalur cache prosesor, dan metadata dalam indeks terpisah untuk akses cepat. Hasilnya — sebuah folder dengan ekstensi .mlmodelc, siap untuk dimasukkan ke dalam paket aplikasi.
Struktur mlmodelc mencakup tiga komponen utama. Model Description — metadata model: tipe input dan output, dimensinya, nama tensor, parameter pra-pemrosesan. Bagian ini disimpan dalam format mirip JSON untuk kompatibilitas dengan API Core ML.
Program — representasi biner dari grafik komputasi dalam bahasa internal MIL. Apple menggunakan MIL sebagai representasi perantara, mirip dengan MLIR di TensorFlow atau ONNX. Program MIL terdiri dari operasi, masing-masing memiliki tipe, tensor input dan output, serta atribut. Format MIL dioptimalkan untuk eksekusi yang efisien pada Apple Neural Engine.
Komponen ketiga — weights.bin — file yang berisi semua bobot terlatih dari model. Bobot disimpan dengan perataan 64 byte untuk pemuatan optimal ke dalam cache. Jika kuantisasi ditentukan saat kompilasi, bobot disimpan dalam FP16 atau INT8, yang mengurangi ukuran file dan mempercepat inferensi pada chip Apple A17 dan M4 dengan dukungan perangkat keras untuk format ini.
Apple mendukung tiga metode untuk menyertakan mlmodelc ke dalam aplikasi. Pertama — penyertaan statis dalam paket: file mlmodelc ditambahkan ke proyek Xcode dan masuk ke .app saat pembangunan. Metode ini optimal untuk model kecil hingga 100 MB dan tidak memerlukan akses jaringan untuk startup pertama.
Kedua — unduhan dari jaringan dengan kompilasi pada perangkat melalui MLModel.compile(at:). Pengembang mengunduh .mlmodel, menempatkannya di direktori sementara, dan memanggil compiler Core ML. Hasilnya — mlmodelc, yang dapat di-cache untuk penggunaan berikutnya. Menurut Apple HIG untuk Core ML, pendekatan ini direkomendasikan untuk model yang lebih besar dari 100 MB dan untuk pembaruan dinamis tanpa menerbitkan versi aplikasi baru.
Ketiga — On-Demand Resources untuk model yang dimuat sesuai permintaan. Apple ODR memungkinkan penyimpanan mlmodelc di cloud dan memuat hanya saat diperlukan. Ini adalah skenario populer untuk aplikasi dengan puluhan model, di mana pengguna hanya menggunakan beberapa.
Saat mengunduh model dari jaringan, penting untuk mempertimbangkan waktu kompilasi. MLModel.compile(at:) dijalankan secara sinkron dan dapat memblokir antarmuka pada perangkat dengan A12 dan yang lebih lama hingga 5–10 detik untuk model berukuran sedang. Disarankan untuk melakukan kompilasi di latar belakang dan memberi tahu pengguna tentang proses melalui indikator pemuatan.
Keuntungan utama mlmodelc adalah kecepatan pemuatan model. Menurut Apple Performance Benchmarks (2024), model ResNet-50 berukuran 100 MB dimuat 58% lebih cepat dalam format mlmodelc dibandingkan dengan .mlmodel. Ini sangat penting untuk aplikasi yang bekerja dengan beberapa model secara berurutan.
Keuntungan kedua — pengurangan konsumsi memori puncak. Saat memuat .mlmodel, Core ML Runtime mengalokasikan buffer untuk mengurai protobuf dan buffer kedua untuk kompilasi grafik. mlmodelc langsung dijalankan, melewati tahap-tahap ini. Konsumsi memori puncak turun 30–45% untuk model visi komputer.
Ketiga — optimasi perangkat keras. Kompiler coremlc menganalisis perangkat target pada tahap pembangunan dan memilih pembagian operasi yang optimal antara ANE, GPU, dan CPU. Jika build bersifat universal, kompilasi dialihkan ke perangkat pada startup pertama, dan hasilnya di-cache untuk sesi berikutnya.
Contoh memuat model yang dikompilasi dari paket aplikasi. Cukup tentukan URL model dan panggil MLModel.load(contentsOf:). Core ML Runtime akan secara otomatis menentukan format mlmodelc dari ekstensi dan melakukan inisialisasi.
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)
Contoh kompilasi .mlmodel pada perangkat dengan caching berikutnya. Gunakan MLModel.compile(at:) untuk mendapatkan jalur sementara ke mlmodelc, lalu salin ke direktori cache.
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)
Pertanyaan yang Sering Diajukan
Ya, mlmodelc berfungsi pada simulator iOS, tetapi tanpa percepatan ANE, karena Neural Engine adalah komponen perangkat keras yang tidak ada di Mac. Inferensi dilakukan pada CPU melalui Accelerate framework.
mlmodelc — format terkompilasi untuk eksekusi. .mlpackage — wadah untuk Xcode 15+ yang menggabungkan model asli dan beberapa konfigurasi. .mlpackage dikompilasi ke mlmodelc saat membangun aplikasi.
Periksa ekstensi file: .mlmodelc. Jika model memiliki ekstensi .mlmodel, maka belum dikompilasi. Setelah pembangunan di Xcode, mlmodelc yang sudah jadi berada di folder DerivedData aplikasi.
Tidak, dekompilasi balik tidak ada. mlmodelc adalah format biner proprietary Apple. .mlmodel asli disimpan secara terpisah di sistem kontrol versi.
Ya, mlmodelc mendukung kuantisasi INT8 melalui Core ML Tools. Saat kompilasi, bobot diubah dari FP32 ke INT8, yang memberikan pengurangan ukuran empat kali lipat dan hingga 2x percepatan pada ANE.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga