Section 5/161 menit
5. Konfigurasi Model (MLModelConfiguration)
5. Konfigurasi Model (MLModelConfiguration)
MLModelConfiguration mengontrol bagaimana model dimuat dan dieksekusi.
Konfigurasi Dasar
swift
import CoreML
// Konfigurasi default — Core ML pilih hardware terbaik secara otomatis
let config = MLModelConfiguration()
// Load model dengan konfigurasi
let model = try MyClassifier(configuration: config)
Compute Units: Mengontrol Hardware Target
swift
// Semua compute unit — Core ML pilih optimal (default, direkomendasikan)
config.computeUnits = .all
// CPU only — cocok untuk debugging atau model dengan custom ops yang tidak support ANE
config.computeUnits = .cpuOnly
// CPU + GPU — hindari Neural Engine (misal: model precision-sensitive)
config.computeUnits = .cpuAndGPU
// CPU + Neural Engine — hindari GPU
config.computeUnits = .cpuAndNeuralEngine
Model Encryption (iOS 14+)
swift
// Enkripsi model agar tidak bisa diekstrak dari .ipa
// Pertama, enkripsi model menggunakan coremltools:
// $ python -c "import coremltools; ct.models.MLModel('model.mlpackage').get_spec()"
// Di Xcode, set encryption key di model editor
// Kemudian load dengan:
config.modelDisplayName = "MyEncryptedModel"
// Key disimpan di Secure Enclave, tidak perlu dipass secara eksplisit
Function Name untuk Multi-Function Models (iOS 18+)
swift
// Model dengan multiple functions (misal: encode + decode)
config.functionName = "encode"
let encoderModel = try MyModel(configuration: config)
config.functionName = "decode"
let decoderModel = try MyModel(configuration: config)
Konfigurasi untuk Background Execution
swift
// Allow model execution saat app di background
config.allowLowPrecisionAccumulationOnGPU = true
// Untuk model besar yang perlu diload sekali dan di-cache
class ModelCache {
static let shared = ModelCache()
private var _model: MyClassifier?
private let lock = NSLock()
func getModel() throws -> MyClassifier {
lock.lock()
defer { lock.unlock() }
if let existing = _model { return existing }
let config = MLModelConfiguration()
config.computeUnits = .all
let model = try MyClassifier(configuration: config)
_model = model
return model
}
}