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
    }
}