Sur un Mac mini M4 loué (Singapour, Tokyo, Séoul, Hong Kong, US Ouest), le Core ML assemble mlmodelc, sessions d’inférence batch, mémoire unifiée et I/O NVMe : ce n’est pas qu’une question de Neural Engine. Ce guide livre une matrice décisionnelle — concurrence de compilation, B, disques interne et externe, timeouts de file (attente vs calcul), repères qualitatifs jour / mois — et des lignes de commande à paramétrer. Pour cadrer capacité et transferts, ouvrez l’accueil, la matrice choix de puissance (ProRes / calcul) comme repère transposable, puis Achat par région.
Trois frictions fréquentes sur Mac loué
- Trop de compilations parallèles : mémoire unifiée et disque partagés ; débit global en baisse.
- Un seul timeout mélange attente et calcul — les retries cachent I/O ou cold start.
- Région ≠ données : staging lointain pénalise le premier batch ; voir latence et TCO.
Compilation batch vers mlmodelc
Après staging des .mlpackage en CI, xcrun coremlcompiler matérialise les répertoires mlmodelc. La phase sollicite CPU, working set en mémoire unifiée et écritures séquentielles ou aléatoires. Sans plafond de parallélisme par nœud, le débit global chute : cache et bande passante disque se disputent. Verrou global ou sémaphore, entrées et sorties sur des chemins distincts, et relances reliées à une DLQ et webhooks de synthèse gardent une file lisible.
Sessions d’inférence batch et mémoire unifiée
Un MLModel résident et des passes avant répétées forment le schéma courant. CPU, GPU et ANE partagent le même pool : B pilote les pics. Sur 16 Go, une session dominante ; sur 24 Go, une seconde charge seulement après profilage. Importez le découplage Wq (attente en file) et Wc (calcul) du guide MPS vs MLX vers vos files Core ML. Les transferts d’artefacts lourds se calent avec la matrice datasets pour éviter un premier batch bridé par la distance.
Matrice : concurrence compile, batch, I/O, externe, file, coût
Les cellules sont des points de départ pour vos sweeps ; modèle, résolution d’entrée et build macOS les déplacent.
| Profil | Compilations simultanées | Batch (B) | I/O (NVMe interne) | Disque externe | Timeout file (attente / calcul) | Indication jour / mois (qualitatif) |
|---|---|---|---|---|---|---|
| Farm CI nocturne mlmodelc | 16 Go : 1 (+ file fine) ; 24 Go : 1–2 (sémaphore) | Moins sensible que la profondeur de file de compilation | Écritures ordonnées ; au-delà de deux jobs, contention aléatoire | Sorties et journaux déportés pour ménager les quotas | Wq court si réaffectation possible ; Wc ≈ 2× p95 compile + marge | Location à la journée adaptée aux pics de build |
| Inférence batch en ligne (modèle chaud) | 0–1 (juste après déploiement) | Moyen à grand ; ANE/GPU selon le graphe | Lecture et préfetch ; réchauffage entre batches | Optionnel ; gros caches en lecture sur volume dédié | Wq modéré ; Wc inclut le premier batch | Mensuel avec nœud fixe pour simplifier l’exploitation |
| Nœud multi-locataire | ≤1 (verrou global recommandé) | B réduit par locataire + plafond d’exécution | Contention I/O : ordonnancement équitable | Scratch séparé par locataire | Wq long + échelle de dégradation ; Wc = SLA | Plusieurs petits nœuds peuvent coûter moins cher qu’un seul saturé |
La colonne coût reste qualitative : comparez Tarifs et la matrice location vs achat pour votre région.
Feuille de route en cinq étapes
- Chemins staging / mlmodelc + quotas.
- Plafond compile par nœud avant de monter B.
- p95 compile et inférence ; Wq ≠ Wc.
- Nœud et données : choix de puissance.
- Dégradation documentée → DLQ.
Trois repères réutilisables dans vos runbooks
- Mémoire : marge sous plafond après pire B (OS inclus).
- Disque : latence aléatoire ↑ avec deux compiles ⇒ concurrence trop haute.
- Timeouts : Wq court si bascule possible ; Wc long pour warm-up.
Commandes exécutables et espaces réservés
Remplacez les chemins et versions par ceux de votre image louée.
Exemple de compilation (cible macOS, sortie mlmodelc)
xcrun coremlcompiler compile \
"<CHEMIN_ENTREE.mlpackage|CHEMIN_ENTREE.mlmodel>" \
"<REPERTOIRE_SORTIE>" \
--platform macos \
--deployment-target "<VERSION_MACOS_MIN>"
Épingler coremltools (Python)
python3 -m pip install "coremltools==VERSION_ESPACE_RESERVE"
À l’exécution, MLModelConfiguration règle les unités de calcul ; comparez environnements de préproduction et de production selon la documentation Apple du SDK utilisé.
Files, timeouts et dégradation
Sans séparation, les compilations longues consomment le budget perçu comme « latence service » et les petits batches échouent injustement. Mesurez longueur de file, p95 par batch et mémoire libre : elles signalent le goulet avant l’occupation ANE. Données volumineuses : gardez le volume au plus près du nœud loué pendant la fenêtre batch ; le plan de contrôle peut rester distant si le RTT n’alimente pas chaque requête de données.
FAQ
Versionner les mlmodelc dans Git ? Plutôt dépôt d’artefacts ou cache sur le nœud ; le dépôt source porte spécification et empreinte.
Xcode complet requis ? Des Command Line Tools cohérents avec le compilateur Core ML suffisent souvent — vérifiez l’image décrite sur Aide.