Sur un Mac mini M4 loué (Singapour, Tokyo, Séoul, Hong Kong, US Ouest), ONNX Runtime + CoreML EP sert souvent au scoring par lots. Matrice : sessions chaudes, threads, lot B, NVMe, Wq/Wc, exports Bash et liste prudente — sans gain fixe promis. Voir aussi MPS / MLX, Core ML mlmodelc ; Tarifs / Achat sans compte.
Frictions sur un M4 distant
- Sessions. Chaque
InferenceSessionretient graphes, poids et caches EP en mémoire unifiée — la prolifération pousse ANE et NVMe en compétition. - Threads. Intra-op ORT + OpenMP + Accelerate peuvent sursouscrire les cœurs P et gonfler le p95.
- Timeout unique. Mélanger attente file et calcul CoreML favorise relances destructrices et diagnostics flous.
Matrice de décision (paramètres)
Garde-fous puis balayage de B et sessions selon mémoire et disque. Repères jour/mois qualitatifs — croiser avec latence & TCO.
| Profil | Sessions chaudes | Threads intra / inter | Lot B | I/O NVMe intégrée | Timeouts Wq / Wc | Indication jour / mois |
|---|---|---|---|---|---|---|
| API stable, poids déjà chauds | 16 Go : 1 principale ; 24 Go : 1–2 avec plafond dur | Intra 2–4, inter 1 au départ ; baissez si OpenMP sursouscrit | Augmentez B jusqu’à inflexion du p95, puis reculez d’un cran | Précharge unique ; évitez copies modèle complètes en parallèle | Wq court ; Wc au p95 batch + marge mesurée | Mensuel si débit régulier |
| Jobs en rafale (CI, scoring nocturne) | Réutiliser une session par empreinte de modèle ; reconstruire si hash change | Garder inter à 1 sauf parallélisme de graphe évident | B modéré ; privilégier la stabilité de latence | Stager ONNX et données sur NVMe locale avant les boucles | Wq serré ; Wc plus large seulement en phase de profilage | À la journée pour pics courts |
| Hôte multi-locataire | Sémaphore global par famille de modèles | Moins de threads par locataire ; équité avant saturation | Petit B par locataire + contrôle d’admission | Préfixes scratch isolés ; surveillez les pics d’écriture partagés | Exposer les deux timeouts aux métriques ; dégrader avant kill dur | Mensuel intermédiaire si l’isolement impose un SKU plus large |
Pas de garantie de performance. Le routage ANE/GPU et la couverture d’opset dépendent du graphe, de la précision et de la version ORT — reprofilez sur l’image louée.
Variables d’environnement exécutables et liste de concurrence
systemd, CI ou entrée conteneur — ajuster après mesure. Défauts prudents.
# shell worker macOS — ajuster après profilage
export OMP_NUM_THREADS="${OMP_NUM_THREADS:-2}"
export OMP_WAIT_POLICY="${OMP_WAIT_POLICY:-PASSIVE}"
export VECLIB_MAXIMUM_THREADS="${VECLIB_MAXIMUM_THREADS:-2}"
export ORT_LOG_SEVERITY_LEVEL="${ORT_LOG_SEVERITY_LEVEL:-3}" # 0 verbeux .. 4 fatal
Les SessionOptions Python gardent les threads explicites :
import onnxruntime as ort
so = ort.SessionOptions()
so.intra_op_num_threads = 2
so.inter_op_num_threads = 1
# providers=[('CoreMLExecutionProvider', {...}), 'CPUExecutionProvider']
Logguez les fournisseurs résolus à chaque changement d’options EP : une mineure ORT peut tout décaler.
- Plafonner les sessions chaudes avant d’augmenter B.
- Une équipe OpenMP dominante par processus ; répartir les cœurs entre processus sciemment.
- Tracer identifiant de session, hash modèle, fournisseurs et durée murale par lot.
- Sous charge : réduire B, puis Wc, puis ajouter des nœuds — pas des relances aveugles.
- Publier les échecs via DLQ signée ou webhooks de synthèse plutôt que des pertes silencieuses.
Cinq étapes avant d’augmenter la concurrence
- Épingler wheel ORT + digest image ;
pip freeze. - Préchauffe unique ; p50/p95 ; cold start hors SLA si besoin.
- Dichotomie B jusqu’à inflexion latence ou RAM.
- Métriques séparées Wq vs Wc.
- Re-benchmark après changement de région.
Signaux utiles en métriques
- Octets résidents par session versus pics de compilation.
- Temps mural par élément (durée du lot divisée par B).
- Part des lots proches de Wc sur une fenêtre de dix minutes.
Choisir région et forfait sur pages publiques
FAQ
Garder CPUExecutionProvider ? Souvent oui en repli ; mesurez les deux chemins.
Augmenter intra-op ? Pas automatiquement linéaire — profilez plutôt que d’extrapoler.
Manifeste image ? Voir Aide pour la liste d’outils supportée.
Synthèse
ORT CoreML EP : sessions réutilisées, threads alignés, B mesuré, Wq/Wc séparés, OMP/vecLib + SessionOptions, reprofilage après région ou mineure ORT. Slug : 2026-remote-mac-m4-onnxruntime-coreml-batch-inference-matrix.html.