Core ML — คือเฟรมเวิร์กแมชชีนเลิร์นนิงจาก Apple ที่ช่วยให้สามารถรวมโมเดล ML ที่ผ่านการฝึกอบรมล่วงหน้าเข้ากับแอปพลิเคชัน iOS, iPadOS, macOS, watchOS และ tvOS ได้โดยตรง เฟรมเวิร์กรองรับโครงข่ายประสาทเทียม ต้นไม้ตัดสินใจ การถดถอยเชิงเส้น และวิธีการแบบ Ensemble รวมถึงการแปลงโมเดลจาก 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) เพิ่มการรองรับ การทำนายแบบแบตช์ และการอัปเดตโมเดลแบบทันที Core ML 3 (2019) นำการเรียนรู้บนอุปกรณ์และการรองรับเลเยอร์โครงข่ายประสาทเทียมใหม่หลายสิบประเภท Core ML 4 (2021) เพิ่มการรองรับโมเดลที่มีหลายเอาต์พุตและการประมวลผลภาพที่ดีขึ้น Core ML 5 (2024) เพิ่มการรองรับโครงข่ายประสาทแบบไดนามิกและการเรียนรู้แบบควบคุมบนอุปกรณ์โดยใช้เลเยอร์ ML ใหม่
การดำเนินการแมชชีนเลิร์นนิงบนอุปกรณ์ให้ข้อดีสำคัญสามประการ: ความเป็นส่วนตัว — ข้อมูลไม่ออกจากอุปกรณ์ (สอดคล้องกับข้อกำหนด GDPR และ HIPAA), ความเร็ว — การอนุมานดำเนินการในระดับมิลลิวินาทีโดยไม่มีความหน่วงจากการส่งข้อมูลผ่านเครือข่าย, การทำงานแบบออฟไลน์ — โมเดลทำงานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต ตามรายงาน Apple Privacy Report (2025) การอนุมาน ML มากกว่า 90% บนแพลตฟอร์มของ 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 แต่ละรุ่น (GPU A17 แบบ 7 คอร์ หรือ GPU M4 Ultra แบบ 40 คอร์) การปรับแต่งอัตโนมัติของ MPSGraph รวมถึงการรวมเลเยอร์ การกำจัดการดำเนินการที่ซ้ำซ้อน และการเลือกรูปแบบข้อมูลที่เหมาะสมที่สุด
Core ML รองรับโมเดลแมชชีนเลิร์นนิงทุกประเภทหลัก แบ่งออกเป็นสามหมวดหมู่: โครงข่ายประสาทเทียม (CNN แบบคอนโวลูชัน, RNN/LSTM แบบเวียนกลับ, ทรานส์ฟอร์เมอร์), โมเดลแบบ Ensemble (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: การควอนไทซ์ (ลดความแม่นยำของน้ำหนัก), การตัดแต่ง (ลบนิวรอนที่มีนัยสำคัญน้อย), การกำจัดเลเยอร์ที่ซ้ำซ้อน และการรวมเลเยอร์เพื่อลดกราฟการคำนวณ
การควอนไทซ์ ช่วยลดขนาดโมเดลประมาณ 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 การล่มของแอปพลิเคชัน ML มากกว่า 5% เกิดจากการโหลดโมเดลที่ไม่ถูกต้อง
Core ML และ Create ML — เป็นเครื่องมือสองอย่างที่เสริมกันในระบบนิเวศ ML ของ Apple Core ML ทำหน้าที่เรียกใช้โมเดลบนอุปกรณ์ (การอนุมาน) ในขณะที่ Create ML ทำหน้าที่ฝึกอบรมโมเดล (การเทรน) โมเดลที่สร้างใน Create ML จะถูกส่งออกในรูปแบบ Core ML (.mlpackage) เพื่อนำไปรวมในแอปพลิเคชัน หากเปรียบเทียบกับการพัฒนาเว็บ Core ML คือเบราว์เซอร์ (การทำงาน) และ Create ML คือ IDE สำหรับเขียนโค้ด (การฝึกอบรม)
| พารามิเตอร์ | 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 สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม