mlmodelc: รูปแบบโมเดลที่คอมไพล์แล้วและการคอมไพล์คืออะไร

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-17 เวลาอ่าน: 7 นาที

mlmodelc คือเวอร์ชันที่คอมไพล์แล้วของโมเดล Core ML ซึ่งปรับให้เหมาะสมสำหรับการทำงานบนอุปกรณ์ Apple ที่ใช้ iOS, macOS และ iPadOS แตกต่างจากรูปแบบ .mlmodel ดั้งเดิม ไฟล์ mlmodelc ผ่านขั้นตอนการคอมไพล์ซึ่งในระหว่างนั้นโมเดลจะถูกแปลงเป็นรูปแบบภายในที่ Core ML Runtime เข้าใจ ตาม เอกสารสำหรับนักพัฒนา Apple, 2025 การคอมไพล์จะเกิดขึ้นโดยอัตโนมัติเมื่อสร้างแอปพลิเคชันใน Xcode รวมถึงบนอุปกรณ์หลังจากดาวน์โหลดโมเดลจากเครือข่าย mlmodelc ช่วยให้เริ่มทำงานได้เร็วขึ้นและใช้หน่วยความจำน้อยลงเมื่อเทียบกับรูปแบบที่ต้องแปลความ

ประเด็นสำคัญ

  • mlmodelc คือรูปแบบโมเดล Core ML ที่คอมไพล์แล้วสำหรับการทำงานบนอุปกรณ์ Apple
  • การคอมไพล์ .mlmodel เป็น mlmodelc ดำเนินการโดย Xcode ระหว่างการสร้างแอปหรือบนอุปกรณ์ผ่าน MLModel.compile()
  • รูปแบบประกอบด้วย Model Description, กราฟการคำนวณแบบไบนารีใน MIL และไฟล์ weights.bin
  • mlmodelc ให้ ความเร็วในการเริ่มต้นที่เพิ่มขึ้น 30–60% จากการปรับกราฟให้เหมาะสมล่วงหน้า
  • รองรับ Apple Neural Engine, GPU และ CPU ผ่าน Core ML Runtime

mlmodelc คืออะไรและแตกต่างจาก .mlmodel อย่างไร

mlmodelc คือรูปแบบโมเดล Core ML แบบไบนารีที่คอมไพล์แล้ว ออกแบบมาเพื่อทำงานโดยตรงบนอุปกรณ์ Apple รูปแบบ .mlmodel ดั้งเดิมคือแพ็คเกจที่ประกอบด้วยคำอธิบายโมเดลแบบ protobuf น้ำหนักในรูปแบบอาร์เรย์ และข้อมูลเมตาใน JSON ในระหว่างการคอมไพล์ โครงสร้างนี้จะถูกแปลงเป็นรูปแบบไบนารีขนาดกะทัดรัดที่ปรับให้เหมาะสมสำหรับแพลตฟอร์มฮาร์ดแวร์เฉพาะ

ความแตกต่างหลักของ mlmodelc คือ การไม่มีขั้นตอนการแปลความ ระหว่างการอนุมาน Core ML Runtime จะไม่แยกวิเคราะห์สคีมา protobuf หรือสร้างกราฟการคำนวณแบบไดนามิก — ขั้นตอนทั้งหมดนี้ดำเนินการในเวลาคอมไพล์ ซึ่งช่วยปรับปรุงเวลาในการโหลดโมเดลครั้งแรกได้ 30% ถึง 60% ขึ้นอยู่กับความซับซ้อนของสถาปัตยกรรม

ตามเซสชัน WWDC 2023 เรื่อง “Core ML Tools และการเพิ่มประสิทธิภาพโมเดล” การคอมไพล์รวมถึงการปรับการดำเนินการจุดลอยตัวให้เหมาะสม การรวมเลเยอร์ที่ต่อเนื่องกัน และการแปลงเป็นรูปแบบที่ Apple Neural Engine เข้าใจ นักพัฒนาไม่จำเป็นต้องจัดการกระบวนการนี้ด้วยตนเอง — Xcode ดำเนินการคอมไพล์โดยอัตโนมัติในเวลาสร้าง

การเปรียบเทียบ mlmodelc และ .mlmodel

คุณลักษณะ.mlmodelmlmodelc
รูปแบบการจัดเก็บแพ็คเกจ (protobuf + น้ำหนัก)ไบนารี เฉพาะแพลตฟอร์ม
ความพร้อมทำงานต้องการการคอมไพล์พร้อมสำหรับการอนุมาน
ขนาดบนดิสก์ขนาดดั้งเดิมเล็กกว่า 10–20%
ความเร็วในการเริ่มครั้งแรกช้ากว่า (แยกวิเคราะห์ + คอมไพล์)เริ่มต้นทันที
การรองรับ ANEต้องการการปรับเพิ่มเติมอัตโนมัติ

กระบวนการคอมไพล์ mlmodelc ทำงานอย่างไร

การคอมไพล์โมเดลเป็น mlmodelc ผ่าน สามขั้นตอน ในขั้นตอนแรก Core ML Tools จะอ่านสเปก protobuf ของ .mlmodel และสร้างกราฟการคำนวณภายในในรูปแบบ MIL (Model Intermediate Language) เครื่องมือจะตรวจสอบความเข้ากันได้ของการดำเนินการแต่ละรายการกับอุปกรณ์เป้าหมายและทำเครื่องหมายเลเยอร์ที่ไม่รองรับสำหรับการทำงานบน CPU

ในขั้นตอนที่สอง การปรับกราฟให้เหมาะสม จะดำเนินการ: การรวมเลเยอร์ที่ต่อเนื่องกัน (convolution + batch norm → fused convolution) การลบโหนดที่ตายแล้ว และการควอนไทซ์น้ำหนักจาก FP32 เป็น FP16 หรือ INT8 ตามรายงานวิศวกรรมของ Apple เรื่อง “Core ML Optimization Pipeline” (2024) การรวมเลเยอร์ช่วยลดจำนวนการดำเนินการอนุมานได้ถึง 40%

ขั้นตอนที่สามคือ การสร้างรูปแบบไบนารี กราฟที่ปรับให้เหมาะสมแล้วจะถูกทำให้เป็นอนุกรมในรูปแบบกรรมสิทธิ์ของ Core ML Runtime น้ำหนักจะถูกจัดเก็บโดยจัดแนวกับบรรทัดแคชของ CPU และข้อมูลเมตาจะถูกเก็บไว้ในดัชนีแยกต่างหากเพื่อการเข้าถึงที่รวดเร็ว ผลลัพธ์คือโฟลเดอร์ที่มีนามสกุล .mlmodelc พร้อมที่จะรวมในบันเดิลแอปพลิเคชัน

สถาปัตยกรรมภายในของ mlmodelc

โครงสร้าง mlmodelc ประกอบด้วยสามองค์ประกอบหลัก Model Description มีข้อมูลเมตาของโมเดล: ชนิดอินพุตและเอาต์พุต มิติของมัน ชื่อเทนเซอร์ และพารามิเตอร์การประมวลผลล่วงหน้า ส่วนนี้ถูกจัดเก็บในรูปแบบคล้าย JSON เพื่อความเข้ากันได้กับ API ของ Core ML

Program คือรูปแบบไบนารีของกราฟการคำนวณในภาษา MIL ภายใน Apple ใช้ MIL เป็นรูปแบบตัวกลางที่คล้ายกับ MLIR ใน TensorFlow หรือ ONNX โปรแกรม MIL ประกอบด้วยการดำเนินการ แต่ละรายการมีชนิด เทนเซอร์อินพุตและเอาต์พุต และแอตทริบิวต์ รูปแบบ MIL ได้รับการปรับให้เหมาะสมสำหรับการทำงานที่มีประสิทธิภาพบน Apple Neural Engine

องค์ประกอบที่สามคือ weights.bin — ไฟล์ที่มีน้ำหนักที่ฝึกแล้วทั้งหมดของโมเดล น้ำหนักจะถูกจัดเก็บโดยจัดแนว 64 ไบต์เพื่อการโหลดแคชที่เหมาะสมที่สุด หากระบุการควอนไทซ์ระหว่างการคอมไพล์ น้ำหนักจะถูกบันทึกใน FP16 หรือ INT8 ซึ่งช่วยลดขนาดไฟล์และเร่งการอนุมานบนชิป Apple A17 และ M4 ที่รองรับฮาร์ดแวร์สำหรับรูปแบบเหล่านี้

วิธีการปรับใช้ mlmodelc ในแอปพลิเคชัน

Apple รองรับสามวิธีในการรวม mlmodelc ในแอปพลิเคชัน วิธีแรกคือ การรวมแบบคงที่ในบันเดิล: ไฟล์ mlmodelc ถูกเพิ่มในโปรเจกต์ Xcode และจะอยู่ใน .app เมื่อสร้าง วิธีนี้เหมาะสมที่สุดสำหรับโมเดลขนาดเล็กถึง 100 MB และไม่ต้องการการเข้าถึงเครือข่ายสำหรับการเริ่มครั้งแรก

วิธีที่สองคือ การดาวน์โหลดจากเครือข่ายพร้อมคอมไพล์บนอุปกรณ์ ผ่าน MLModel.compile(at:) นักพัฒนาดาวน์โหลด .mlmodel วางไว้ในไดเรกทอรีชั่วคราวและเรียกคอมไพเลอร์ Core ML ผลลัพธ์คือ mlmodelc ที่สามารถแคชไว้สำหรับการเริ่มครั้งต่อไป ตาม Apple HIG สำหรับ Core ML วิธีนี้แนะนำสำหรับโมเดลที่มีขนาดใหญ่กว่า 100 MB และสำหรับการอัปเดตแบบไดนามิกโดยไม่ต้องเผยแพร่เวอร์ชันแอปใหม่

วิธีที่สามคือ ทรัพยากรตามความต้องการ (On-Demand Resources) สำหรับโมเดลที่ดาวน์โหลดเมื่อจำเป็น Apple ODR อนุญาตให้จัดเก็บ mlmodelc ในคลาวด์และดาวน์โหลดเมื่อจำเป็นเท่านั้น นี่เป็นสถานการณ์ทั่วไปสำหรับแอปพลิเคชันที่มีโมเดลหลายสิบโมเดลซึ่งผู้ใช้ใช้เพียงไม่กี่โมเดล

การคอมไพล์แบบอะซิงโครนัสบนอุปกรณ์

เมื่อดาวน์โหลดโมเดลจากเครือข่าย สิ่งสำคัญคือต้องคำนึงถึงเวลาคอมไพล์ MLModel.compile(at:) ทำงานแบบซิงโครนัสและอาจบล็อก UI บนอุปกรณ์ A12 และเก่ากว่านานถึง 5–10 วินาทีสำหรับโมเดลขนาดกลาง แนะนำให้ทำการคอมไพล์ในเธรดพื้นหลังและแจ้งให้ผู้ใช้ทราบเกี่ยวกับความคืบหน้าผ่านตัวบ่งชี้การโหลด

ข้อดีด้านประสิทธิภาพของ mlmodelc

ข้อดีหลักของ mlmodelc คือ ความเร็วในการโหลดโมเดล ตามเกณฑ์ประสิทธิภาพของ Apple (2024) โมเดล ResNet-50 ขนาด 100 MB โหลดเร็วกว่า 58% ในรูปแบบ mlmodelc เมื่อเทียบกับ .mlmodel ซึ่งสำคัญโดยเฉพาะสำหรับแอปพลิเคชันที่ทำงานกับหลายโมเดลตามลำดับ

ข้อดีที่สองคือ การลดการใช้หน่วยความจำสูงสุด เมื่อโหลด .mlmodel Core ML Runtime จะจัดสรรบัฟเฟอร์สำหรับแยกวิเคราะห์ protobuf และบัฟเฟอร์ที่สองสำหรับการคอมไพล์กราฟ mlmodelc เริ่มทำงานโดยตรง โดยข้ามขั้นตอนเหล่านี้ การใช้หน่วยความจำสูงสุดลดลง 30–45% สำหรับโมเดลคอมพิวเตอร์วิทัศน์

ข้อดีที่สามคือ การเพิ่มประสิทธิภาพฮาร์ดแวร์ คอมไพเลอร์ coremlc วิเคราะห์อุปกรณ์เป้าหมายในเวลาสร้างและเลือกการแบ่งการดำเนินการที่เหมาะสมที่สุดระหว่าง ANE, GPU และ CPU หากการสร้างเป็นแบบสากล การคอมไพล์จะถูกเลื่อนไปยังอุปกรณ์ในการเริ่มครั้งแรกและผลลัพธ์จะถูกแคชไว้สำหรับเซสชันถัดไป

ตัวอย่างโค้ดการทำงานกับ mlmodelc ใน Swift

ตัวอย่างการโหลดโมเดลที่คอมไพล์แล้วจากบันเดิลแอปพลิเคชัน เพียงระบุ URL ของโมเดลและเรียก MLModel.load(contentsOf:) Core ML Runtime จะตรวจจับรูปแบบ mlmodelc โดยอัตโนมัติจากนามสกุลและดำเนินการเริ่มต้น

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)

ตัวอย่างการคอมไพล์ .mlmodel บนอุปกรณ์ด้วยการแคชในภายหลัง ใช้ MLModel.compile(at:) เพื่อรับพาธชั่วคราวไปยัง mlmodelc จากนั้นคัดลอกไปยังไดเรกทอรีแคช

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)

คำถามที่พบบ่อย

สามารถใช้ mlmodelc บนโปรแกรมจำลอง iOS ได้หรือไม่?

ได้ mlmodelc ทำงานบนโปรแกรมจำลอง iOS แต่ ไม่มีการเร่ง ANE เนื่องจาก Neural Engine เป็นส่วนประกอบฮาร์ดแวร์ที่ไม่มีใน Mac การอนุมานจะดำเนินการบน CPU ผ่านเฟรมเวิร์ก Accelerate

mlmodelc แตกต่างจาก .mlpackage อย่างไร?

mlmodelc เป็นรูปแบบที่คอมไพล์แล้วสำหรับการทำงาน .mlpackage เป็นคอนเทนเนอร์สำหรับ Xcode 15+ ที่รวมโมเดลต้นฉบับและการกำหนดค่าหลายรายการ .mlpackage จะถูกคอมไพล์เป็น mlmodelc เมื่อสร้างแอปพลิเคชัน

จะตรวจสอบว่าโมเดลถูกคอมไพล์เป็น mlmodelc แล้วหรือไม่?

ตรวจสอบนามสกุลไฟล์: .mlmodelc หากโมเดลมีนามสกุล .mlmodel แสดงว่ายังไม่ได้คอมไพล์ หลังจากสร้างใน Xcode แล้ว mlmodelc ที่พร้อมใช้งานจะอยู่ในโฟลเดอร์ DerivedData ของแอปพลิเคชัน

สามารถดีคอมไพล์ mlmodelc กลับเป็น .mlmodel ได้หรือไม่?

ไม่ได้ ไม่มีการดีคอมไพล์ย้อนกลับ mlmodelc เป็นรูปแบบกรรมสิทธิ์แบบไบนารีของ Apple .mlmodel ดั้งเดิมจะถูกเก็บแยกต่างหากในระบบควบคุมเวอร์ชัน

mlmodelc รองรับโมเดลที่ควอนไทซ์ใน INT8 หรือไม่?

ได้ mlmodelc รองรับ การควอนไทซ์ INT8 ผ่าน Core ML Tools ระหว่างการคอมไพล์ น้ำหนักจะถูกแปลงจาก FP32 เป็น INT8 ซึ่งลดขนาดลงสี่เท่าและเพิ่มความเร็วสูงสุด 2 เท่าบน ANE

สรุป

  • mlmodelc คือรูปแบบโมเดล Core ML ที่คอมไพล์แล้ว ปรับให้เหมาะสมสำหรับการทำงานบนอุปกรณ์ Apple
  • การคอมไพล์รวมถึง การปรับกราฟให้เหมาะสม การรวมเลเยอร์และการควอนไทซ์น้ำหนักสำหรับแพลตฟอร์มเป้าหมาย
  • รูปแบบนี้ช่วย ลดเวลาในการโหลด 30–60% และลดการใช้หน่วยความจำสูงสุด 30–45%
  • การปรับใช้สามารถทำได้ผ่าน บันเดิลแบบคงที่ การดาวน์โหลดจากเครือข่ายพร้อมคอมไพล์ หรือทรัพยากรตามความต้องการ
  • mlmodelc รองรับการทำงานบน Apple Neural Engine, GPU และ CPU ผ่าน Core ML Runtime
  • สำหรับการโหลด ให้ใช้ MLModel.load(contentsOf:) ในเธรดพื้นหลังพร้อมการจัดการข้อผิดพลาด
  • การตรวจสอบประสิทธิภาพ ของโมเดลทำผ่าน Instruments ด้วยเทมเพลต Core ML

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม