Core ML — چارچوبی یادگیری ماشین از Apple است که امکان یکپارچگی مدلهای از پیش آموزشدیده ML را مستقیماً در برنامههای iOS، iPadOS، macOS، watchOS و tvOS فراهم میکند. این چارچوب از شبکههای عصبی، درختهای تصمیم، رگرسیونهای خطی و روشهای انسامبلی و نیز تبدیل مدلها از TensorFlow، PyTorch، Keras و ONNX به فرمت خود Apple را پشتیبانی میکند. به گزارش Apple Machine Learning Research (2025)، Core ML استنباط را کاملاً روی دستگاه انجام میدهد و محرمانه بودن دادهها و تاخیر کمتر از 10 میلیثانیه را برای اکثر مدلها تضمین میکند.
نکات کلیدی
Core ML — یک جزء کلیدی اکوسیستم یادگیری ماشین Apple است که در WWDC 2017 معرفی شد. پیش از Core ML، توسعهدهندگان iOS از کتابخانههای شخص ثالث (TensorFlow Mobile، Caffe2) یا راهحلهای دستساز برای اجرای مدلهای ML روی دستگاه استفاده میکردند. Core ML یک رابط واحد و یکپارچه برای همه انواع مدلها — از رگرسیونهای کلاسیک تا شبکههای عصبی عمیق — فراهم کرد و بهینهسازی سطح پائین را برای دستگاه مورد نظر بر عهده گرفت.
نسخه اول Core ML (2017) تنها از مدلهای ساکن با اندازه ثابت ورودی پشتیبانی میکرد. Core ML 2 (2018) پشتیبانی از batch prediction و بهروزرسانی مدلها در حال اجرا را اضافه کرد. Core ML 3 (2019) یادگیری روی دستگاه و پشتیبانی از دهها لایه جدید شبکه عصبی را ارائه داد. Core ML 4 (2021) پشتیبانی از مدلهای چند خروجی و پردازش تصویر بهبودیافته را معرفی کرد. Core ML 5 (2024) پشتیبانی از شبکههای عصبی پویا و یادگیری نظارتشده روی دستگاه با استفاده از لایههای جدید ML را اضافه کرد.
اجرای یادگیری ماشین روی دستگاه سه مزیت کلیدی ارائه میدهد: محرمانه بودن — دادهها دستگاه را ترک نمیکنند (مطابق با نیازهای GDPR و HIPAA)، سرعت — استنباط طی میلیثانیه بدون تاخیر انتقال داده انجام میشود، دسترسی آفلاین — مدل بدون اتصال اینترنت کار میکند. به گزارش Apple Privacy Report (2025)، بیش از 90% استنباطهای ML در پلتفرمهای Apple به دلیل Core ML روی دستگاه انجام میشود.
معماری Core ML بر پایه چند لایه ساخته شده است: در لایه بالا — API برای توسعهدهنده (MLModel، MLFeatureProvider، MLPredictionOptions)، در لایه میانی — مدل به فرمت .mlpackage، در لایه پایین — محاسبهگرهای محاسباتی: Apple Neural Engine (ANE)، GPU (Metal Shaders) و CPU (BNNS، Accelerate framework). Core ML به طور خودکار بهترین محاسبهگر را بر اساس مدل و سختافزار دستگاه انتخاب میکند.
| محاسبهگر | دستگاهها | عملکرد |
|---|---|---|
| Neural Engine | iPhone Xs+، iPad A12+، Mac M1+ | حداکثر (TOPS) |
| GPU (Metal) | همه دستگاههای Apple | بالا (محاسبات موازی) |
| CPU (BNNS) | همه دستگاههای Apple | پایه (سازگاری) |
Neural Engine (ANE) — یک نروپروسسور تخصصی است که در چیپهای Apple A12+ و M1+ تعمیر شده است. ANE برای انجام عملیات شبکههای عصبی التفافی (CNN) و ضرب ماتریس با عملکرد تا 15.8 TOPS در A17 Pro و 38 TOPS در M4 بهینهسازی شده است. Core ML به طور خودکار تشخیص میدهد که آیا مدل را میتوان روی ANE اجرا کرد، و اگر بله، آن را آنجا بارگیری میکند. اگر مدل حاوی عملیاتی است که توسط ANE پشتیبانی نمیشود، Core ML محاسبات را بین GPU و CPU تقسیم میکند.
برای محاسبات روی GPU، Core ML از Metal Performance Shaders Graph (MPSGraph) — چارچوبی برای ساخت و اجرای گرافهای محاسباتی روی GPU استفاده میکند. MPSGraph گراف شبکه عصبی را از Core ML گرفته و آن را به Metal Shaders بهینهسازی شده برای معماری خاص GPU (A17 GPU 7 هستهای یا M4 Ultra GPU 40 هستهای) تبدیل میکند. بهینهسازیهای خودکار MPSGraph شامل ادغام لایهها، حذف عملیات اضافی و انتخاب فرمت داده بهینه است.
Core ML از همه انواع اصلی مدلهای یادگیری ماشین پشتیبانی میکند، که به سه دسته تقسیم میشوند: شبکههای عصبی (CNN التفافی، RNN/LSTM بازگشتی، ترانسفورمرها)، مدلهای انسامبل (Random Forest، Gradient Boosting، XGBoost، Decision Trees) و مدلهای رگرسیونی (رگرسیون خطی، SVM، CRF). هر نوع مدل پروتکل فرعی MLModelType مخصوص خود را دارد و Core ML به طور خودکار محاسبهگر و فرمت اجرای مناسب را انتخاب میکند.
Core ML از بیش از 150 نوع لایه شبکه عصبی پشتیبانی میکند: Convolution (1D/2D/3D)، BatchNormalization، Pooling (Max/Average)، Activation (ReLU، Sigmoid، Tanh، LeakyReLU، PReLU)، Recurrent (LSTM/GRU/SimpleRNN)، Transformers (MultiHeadAttention، LayerNorm)، لایههای مخصوص Metal. برای لایههای پشتیبانی نشده، Core ML مکانیسم custom layer را فراهم میکند — امکان نوشتن پیادهسازی لایه در Metal Shading Language یا Swift.
let model = try MLModel(contentsOf: modelURL)
let input = try MLMultiArray(shape: [1, 224, 224, 3], dataType: .float32)
let prediction = try model.prediction(from: input)
تا سال 2021، Core ML از فرمت .mlmodel — یک فایل دودویی حاوی تمامی وزنها و ابعاد مدل استفاده میکرد. از Xcode 13 و Core ML 4 به بعد، Apple فرمت جدیدی به نام .mlpackage معرفی کرد — یاک ساختار پاکت مبتنی بر پوشه که شامل مدل، ابعاد، توصیف ورودی/خروجی و فایلهای پیش و پس پردازش در فرمت JSON است. mlpackage از ورژنگیری git پشتیبانی میکند که کار تیمی را سادهتر میکند. تبدیل .mlmodel به .mlpackage توسط Xcode Model Compiler یا اسکریپت coremltools در Python انجام میشود.
تبدیل مدلها از چارچوبهای شخص ثالث به Core ML با استفاده از کتابخانه coremltools در Python انجام میشود. coremltools از ورود مدلها از TensorFlow 1.x/2.x (SavedModel، PB، HDF5)، PyTorch (TorchScript، مدلهای traced/scripted)، Keras (H5)، ONNX و ایجاد شده توسط Create ML پشتیبانی میکند. خط لوله تبدیل سام شامل سه مرحله است: بارگیری مدل در فرمت اصلی، تبدیل به MIL (Model Intermediate Language) — نمایش داخلی Core ML، و خروجی به .mlpackage.
import coremltools as ct
model = ct.converters.pytorch.convert(
source = "model.pt",
inputs = [ct.TensorType(shape=(1, 3, 224, 224))]
)
model.author = "IT Sectr"
model.short_description = "Image classifier"
model.save("MyModel.mlpackage")
پس از تبدیل باید دقت مدل را با مقایسه پیشبینیهای مدل اصلی و مدل Core ML تبدیلشده روی دادههای یکسان بررسی کرد. تفاوت مجاز — حداکثر 1e-3 (0.1%) برای Float32 و 1e-2 (1%) برای Float16/Int8. coremltools ابزار ct.utils.compare_models() را برای مقایسه خودکار فراهم میکند. اگر تفاوت از حد مجاز بیشتر باشد، مشکل میتواند در عملیات پشتیبانی نشده باشد — آنها باید با custom layers جایگزین شوند یا مدل سادهسازی شود.
بهینهسازی مدل Core ML فرآیندی است برای کاهش اندازه مدل و افزایش سرعت استنباط بدون از دست دادن دقت قابل توجه. Apple چندین ابزار بهینهسازی را که در coremltools و Xcode ساخته شدهاند ارائه میدهد: کوانتیزاسیون (کاهش دقت وزنها)، هرسکردن (حذف نرونهای کم اهمیت)، حذف لایههای اضافی و ادغام لایهها (fusion) برای کاهش گراف محاسباتی.
کوانتیزاسیون اندازه مدل را تقریباً 2 برابر (Float16) یا 4 برابر (Int8) در مقایسه با Float32 کاهش میدهد. Core ML از سه حالت کوانتیزاسیون پشتیبانی میکند: کوانتیزاسیون پس از آموزش (PTQ) با دادههای کالیبراسیونی، در حین تبدیل از طریق coremltools و آموزش با توجه به کوانتیزاسیون (QAT). برای اکثر مدلهای بینایی کامپیوتری، PTQ به Float16 کمتر از 0.5% از دست دادن دقت را در حالی که سرعت استنباط را دو برابر میکند، ایجاد میکند.
Xcode ابزار Core ML Model Profiler را فراهم میکند که به شما امکان میدهد عملکرد مدل را روی دستگاههای مختلف در شبیهساز یا دستگاه واقعی اندازهگیری کنید. پروفایلر زمان اجرای هر لایه، بار محاسبهگر (ANE/GPU/CPU)، مصرف حداکثر حافظه و گرفتگاههای مدل را نشان میدهد. به گزارش Apple Performance Optimization Guide، بیش از 80% مدلها حاوی دستکم یک لایه هستند که به طور قابل توجهی کندتر از سایرین کار میکنند (انومالی لایه) که میتوان آن را با جایگزینی یا ادغام بهینهسازی کرد.
یکپارچگی مدل Core ML آموزشدیده را در یک برنامه iOS به زبان Swift بررسی میکنیم. پس از افزودن فایل .mlpackage به پروژه Xcode (با کشیدن یا از طریق Swift Package Manager)، Xcode به طور خودکار کلاس مدل را در Swift تولید میکند که شامل ورودی و خروجی پرتیپ شده است. توسعهدهنده نیازی به تجزیه و تحلیل دستی دادههای ورودی ندارد — کلاس تولید شده بر اساس ابعاد مدل ، UIImage، MLMultiArray، String یا سایر انواع را میپذیرد.
import CoreML
import Vision
guard let model = try? VNCoreMLModel(
for: MyImageClassifier().model
) else { return }
let request = VNCoreMLRequest(model: model) { request, error in
guard let results = request.results
as? [VNClassificationObservation]
else { return }
if let topResult = results.first {
print("Class: \(topResult.identifier)")
print("Confidence: \(topResult.confidence)")
}
}
let handler = VNImageRequestHandler(
cgImage: image.cgImage!,
options: [:]
)
try handler.perform([request])
در یکپارچگی Core ML باید پیشبینی خطا را در نظر بگیرید: مدل ممکن است به دلیل ناسازگاری با دستگاه (نسخه خیلی کهنه iOS)، کمبود حافظه یا آسیب دیدگی فایل مدل بارگیری نشود. پیشنهاد میشود منطق fallback پیادهسازی شود: اگر مدل در فرمت Int8 کوانتیزه شده بارگیری نشد، نسخه Float16 را بارگیری کنید، و اگر آن هم بارگیری نشد — Float32. به گزارش Apple Crash Analytics، بیش از 5% از خطاهای برنامههای ML در اثر بارگیری نادرست مدل است.
Core ML و Create ML دو ابزار مکمل اکوسیستم Apple ML هستند. Core ML مسئول اجرای مدلها روی دستگاه (استنباط) است، در حالی که Create ML مسئول آموزش مدلها (ترینینگ) است. مدلهای ایجاد شده در Create ML به فرمت Core ML (.mlpackage) برای یکپارچگی بعدی در برنامهها صادر میشوند. اگر قیاس با توسعه وب انجام دهیم، Core ML مرورگر است (اجرا)، و Create ML ایدی برای نوشتن کد (آموزش) است.
| پارامتر | Core ML | Create ML |
|---|---|---|
| کاربرد | اجرای مدلها (استنباط) | آموزش مدلها (ترینینگ) |
| پلتفرم | iOS، iPadOS، macOS، watchOS، tvOS | macOS (تنها) |
| فرمت | .mlpackage (مصرف میکند) | .mlpackage (ایجاد میکند) |
| کد | Swift / Objective-C API | UI (Xcode) یا Swift API |
| کاربر | توسعهدهنده برنامه | توسعهدهنده / دانشمند داده |
سوالات متداول
Core ML — چارچوب یادگیری ماشین Apple است برای اجرای مدلهای از پیش آموزشدیده ML روی دستگاههای iOS، iPadOS، macOS، watchOS و tvOS. از شبکههای عصبی، درختهای تصمیم و رگرسیونها پشتیبانی میکند و به طور خودکار بهترین محاسبهگر (Neural Engine، GPU یا CPU) را انتخاب میکند.
TensorFlow — یک چارچوب جهانی برای آموزش و اجرای مدلها روی سرورها و دستگاههای موبایل است. Core ML — یک موتور تخصصی برای اجرا (نه آموزش) مدلها تنها روی دستگاههای Apple با حداکثر عملکرد است که به لطف بهینهسازی برای سختافزار مشخص (ANE، GPU، Metal) است. TensorFlow Mobile دیگر در iOS پشتیبانی نمیشود — Apple Core ML را برای همه وظایف ML در پلتفرمهای خود توصیه میکند.
تبدیل با استفاده از کتابخانه coremltools در Python انجام میشود: مدل PyTorch را به TorchScript (torch.jit.trace) صادر کنید، سپس از ct.converters.pytorch.convert() برای ایجاد .mlpackage استفاده کنید. coremltools به طور خودکار لایههای PyTorch را به لایههای پشتیبانیشده Core ML نقشه میکند و گراف را برای ANE بهینهسازی میکند.
Core ML روی همه iPhone های با iOS 11 و بالاتر کار میکند. اما عملکرد به سختافزار بستگی دارد: iPhone 5s/6 — تنها CPU (استنباط کند)، iPhone 8/X — GPU (Metal)، iPhone Xs و بالاتر — Neural Engine (حداکثر عملکرد تا 15.8 TOPS در A17 Pro). برای دستیابی به بهترین عملکرد، توصیه میشود حداقل نسخه iOS 12+ را مشخص کنید.
فرمت جدید — .mlpackage (پوشهای شامل مدل، ابعاد و توصیف ورودی/خروجی). فرمت کهنه — .mlmodel (یک فایل دودویی تکی). Xcode به طور خودکار .mlmodel را در زمان کامپیل به .mlpackage تبدیل میکند، اما برای پروژههای جدید توصیه میشود مستقیماً از .mlpackage استفاده کنید.
نتیجهگیری
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید