1. Décomposition douloureuse : ONNX portable n'est pas une garantie de performances
(1) La sélection du fournisseur est opaque : la même roue peut enregistrer à la fois le CPU et CoreML. Si vous comptez sur des valeurs par défaut implicites, l'ordinateur portable et le CI peuvent diverger silencieusement. (2) Axes dynamiques vs caches de compilation : CoreML EP paie souvent une taxe au premier coup lorsqu'une nouvelle forme apparaît. Sans séparer la compilation de l'inférence dans les métriques, l'astreinte poursuivra le DNS et les conteneurs froids au lieu du compilateur graphique. (3) Repli silencieux du processeur : les sous-graphes non pris en charge peuvent tomber sur le processeur alors que le temps du GPU semble inactif. Sans journalisation ORT et harnais groupé, vous ne voyez que « CPU rattaché ». (4) Taxe double pile : la formation sur PyTorch et le service dans ORT nécessitent une exportation disciplinée : l'opset, les axes dynamiques et la quantification doivent être versionnés comme le code.
2. Matrice : CPU EP vs CoreML EP vs MLX vs Apple Silicon à distance
| Axis | CPU EP | CoreML EP | Pile MLX | Piscine distant |
|---|---|---|---|---|
| Force | Compatibilité maximale ; ligne de base de régression | Souvent idéal pour les petits graphiques CV fixes ; Chemin ANE possible | Documents Apple Silicon solides pour les charges de travail génératives | Isolement ; Concurrence signable SLO |
| Risque | Plafond de débit | Formes dynamiques, pics de compilation, couverture des opérations | Réécriture ou double maintenance | Surcharge du saut de réseau et des opérations |
| Idéal pour | Portes et sorties privilégiées | Production groupée inférence | services de style mlx-lm | Files d'attente partagées et tâches 24h/24 et 7j/7 |
3. Runbook en cinq étapes : du modèle chargeable à la latence explicable
- Épinglez le triple : ONNX opset, onnxruntime build, macOS mineur. Traitez les mises à niveau comme les mises à niveau du compilateur.
- Fournisseurs explicites : passez
providers=["CoreMLExecutionProvider", "CPUExecutionProvider"]et enregistrezget_providers()au démarrage. - Formes de seau : Énumérez les résolutions et les longueurs de séquence que vous expédiez réellement. Froid et chaud chaque seau.
- Politique dynamique: Si vous avez besoin de longueurs arbitraires, de budget de compilation, envisagez des compartiments de remplissage, des variantes d'exportation multiples ou MLX.
- Déclencheurs de fractionnement : lorsque le taux de repli ou la latence de queue dépasse les seuils, capturez les points chauds du sous-graphe et déplacez les pics vers les nœuds distants.
4. Seuils citables (remplacez par vos mesures)
Chiffres de qualité discussion que vous devez re-mesurer :
- Si le débit en régime permanent avec CoreML EP n'est pas d'au moins 18 % au-dessus du processeur EP pour un compartiment fixe et que le temps GPU/ANE reste inférieur à 15 %, suspect le repli ou le cache échoue avant la mise à l'échelle.
- Si la première inférence froide p95 dépasse la valeur chaude p95 de plus de 6,5 × et que le produit ne peut pas tolérer un échauffement groupé, il est peu probable que CoreML EP soit votre chemin principal.
- Si la pression de la mémoire unifiée augmente de plus de 24 % par rapport à la ligne de base lors d'un test de charge de 30 minutes avec une concurrence limitée, déplacez la file d'attente vers un hôte Apple Silicon distant dédié.
5. Formes dynamiques : compilation séparée de l'inférence
Publiez deux histogrammes : premier accès par compartiment et état stable par compartiment. Sans cette scission, les discussions du SLO se transforment en anecdotes. Lorsque vous lisez ceci parallèlement à l'article de production Core ML vs MLX, traduisez le débat de « quelle marque » à « quel contrat d'entrée » : une fois que les résolutions, le lot, la quantification ou la longueur du contexte changent, la pile gagnante peut se déplacer.
| Symptôme | Hypothèse | Action |
|---|---|---|
| Seuls certains lots échouent | Forme non prise en charge ou op | Reproduction ONNX minimale ; buckets multi-export |
| Premier appel très lent | Cache de compilation CoreML | Tâche de préchauffage ; accepter les compartiments |
| CPU rattaché, GPU inactif | Repli silencieux | Journaux détaillés ORT ; profilage de sous-graphe |
6. Quand passer à MLX ou à un pool Mac distant
| Déclencheur | Recommandation |
|---|---|
| La charge de travail principale est LLM servie dans mlx-lm ou Ollama | Lisez la comparaison des moteurs et les articles d'acceptation d'Ollama+MLX ; évitez de double-régler ORT et MLX pour le même graphique. |
| L'ordinateur portable partage la mémoire unifiée avec l'IDE, le navigateur et les appels | Déplacez les files d'attente par lots vers un nœud distant ; utilisez le guide SSH vs VNC pour la topologie. |
| La couverture des opérateurs ne peut pas être fermée dans les deux semaines | Acceptez uniquement le prétraitement côté Mac ; transférez les calculs lourds vers le pool ou modifiez l'exportation. |
7. FAQ
CoreML EP est-il toujours plus rapide ? Non. Les petits graphiques corrigés gagnent souvent ; Les gros GEMM ou les dynamiques désordonnées peuvent ne pas l'être.
Devrions-nous suivre ORT la nuit ? Uniquement pour prouver un correctif ; versions de broches pour le SLO orienté client.
Quel est le rapport avec PyTorch MPS ? Continuez la formation et les itérations sur Torch si cela vous convient ; utilisez ORT pour un binaire de service plus petit après le passage des portes d'exportation ; voir la liste de contrôle MPS.
8. Étude de cas : ONNX comme contrat de livraison, pas comme badge rapide
En 2026, les Mac Apple Silicon se comportent comme des plates-formes hétérogènes à mémoire unifiée : MLX et moteurs multimédias d'un côté, les actifs ONNX multiplateformes de l'autre. La valeur d'ORT est un contrat binaire versionné que vous pouvez charger sur toutes les versions du système d'exploitation. Le coût est que chaque EP doit être observé avec des journaux et des harnais groupés, ce qui n'est pas supposé dans une boîte de dialogue d'exportation réussie.
Une ingénierie saine traite ORT+CoreML comme inférence de bord groupée, MLX commeService génératif de chemin Apple et pools distants en tant que capacité durable partagée. Documentez les limites dans README et CI, et non dans les connaissances tribales.
Les organisations louent des Mac distants pour obtenir des environnements Apple Silicon signables sans transformer chaque ordinateur portable en une ferme de lots nocturne. La victoire opérationnelle réside dans les compartiments reproductibles, les versions ORT épinglées et les histogrammes de latence attachables.
Le débit métallique et la résidence ANE sont importants, mais seulement après avoir prouvé quel EP réellement exécuté et quelles formes compilées. D'ici là, discuter du pic TFLOPS est une optimisation prématurée.
Enfin, ONNX Runtime est un moteur d'exécution, pas une baguette magique. Une fois que vous avez envoyé les journaux du fournisseur, les métadonnées opset, le p95 compartimenté et les divisions compilation/infer, vous obtenez le droit de discuter de MLX ou de l'expansion à distance.
9. Observabilité : cartes d'expérimentation à sept tuples
Enregistrez la version d'exécution nnx, l'opset ONNX, l'ordre du fournisseur, le compartiment d'entrée, le p95 froid et chaud, la mémoire unifiée maximale et si un repli du processeur a été détecté. Les rapports externes doivent inclure une dispersion de latence de compartiment, et non une moyenne unique.
| Signal | Vérifiez d'abord | Atténuation |
|---|---|---|
| Accélération proche de 1× | EP actif ; secours | Journaux ; remplacements opérationnels ; seaux |
| Pointes de queue | Nouvelle compilation de forme ; GC | Échauffement ; seaux fixes; pools de sessions |
| Régressions de thread | Thèmes intra/inter ORT | Options de réglage ; sérialiser le chemin chaud |
10. Les options de session et les valeurs par défaut de l'optimisation graphique
SessionOptions le niveau d'optimisation graphique et le nombre de threads modifient considérablement la latence de queue. Les valeurs par défaut privilégient le « premier succès » plutôt que la « queue de production ». Analysez le niveau d'optimisation du graphique et les combinaisons de threads intra-opérationnels sous votre harnais, intégrez le gagnant dans l'image et évitez les indicateurs ponctuels par service. Pour les hôtes multi-instances, vérifiez si les instances partagent un répertoire de cache de compilation ; les conflits de verrouillage peuvent se faire passer pour des pods lents et instables.
11. torch.onnx.export n'est pas un bouton en un clic
CI doit exécuter l'exportation, le chargement ORT et une inférence dorée minimale. Les modèles avec flux de contrôle ou opérations personnalisées peuvent nécessiter des divisions de sous-graphes : sous-graphes stables dans ORT, noyaux instables sur les microservices CPU ou RPC distant. Gardez les chiffres de formation et les registres de quantification post-formation séparés ; n'expliquez pas la dérive de quantification avec les courbes de perte d'entraînement.
12. Clôture : les ordinateurs portables valident les contrats, les pools portent des promesses
(1) Limites de l'approche actuelle : ORT+CoreML multisession de longue durée sur un ordinateur portable combat la mémoire unifiée avec l'IDE, le navigateur et les appels ; les chemins de compilation dynamiques rendent difficiles les SLO de limite supérieure strictes.
(2) Pourquoi Apple Silicon à distance aide : les nœuds dédiés isolent les thermiques et la mémoire tout en conservant les avantages de Metal et de la mémoire unifiée ; déplacez le même harnais de seau inchangé.
(3) Ajustement MACGPU : si vous souhaitez un essai à faible friction de la capacité d'un Mac distant pour l'inférence par lots au lieu d'emprunter les ordinateurs portables de vos coéquipiers, MACGPU propose des nœuds louables et des points d'entrée d'aide publique ; le CTA ci-dessous indique des plans sans connexion.
(4) Porte finale : ne promettez pas de débit en externe tant que les journaux du fournisseur, le p95 groupé et les fractionnements de compilation ne sont pas attachés.
13. Discipline de profilage : compteurs de métaux versus journaux ORT
Activity Monitor et Instruments sont utiles, mais ils ne remplacent pas les journaux détaillés ORT qui indiquent quels nœuds ont été exécutés sur quel EP. Un mode de défaillance courant est la poursuite de l'occupation de Metal lorsque le graphique a exécuté silencieusement des régions lourdes en GEMM sur le processeur, car une seule opération non prise en charge a bloqué la fusion. Associez la journalisation onnxruntime à un court lot synthétique qui balaie les rangs tensoriels qui vous intéressent. Lorsque les nombres diffèrent entre les hôtes, comparez le hachage de la roue, la version mineure de macOS et si Rosetta était impliquée dans l'interpréteur Python. Les performances d'Apple Silicon sont sensibles aux chaînes Python x86 accidentelles ; traiter la vérification arm64 dans le cadre du SLO d'inférence, et pas seulement de l'histoire de formation.
14. Quantification et valeurs numériques : INT8 n'est pas gratuit sur CoreML EP
La quantification post-formation peut réduire les poids, mais la précision et la couverture EP interagissent. Certains modèles INT8 se compilent proprement sur CoreML EP ; d'autres forcent les stubs déquantants ou élargissent les sous-graphes qui reviennent au processeur. Documentez les budgets d'erreur par couche par rapport aux tenseurs d'or FP32 pour chaque compartiment, et pas seulement avec une précision de premier ordre sur une seule division de validation. Si votre service mélange les activations FP16 avec des pondérations INT8, capturez-les explicitement dans les métadonnées d'exportation afin que CI puisse rejeter les modifications silencieuses du graphique. Lorsqu'une dérive numérique apparaît après une mise à jour de sécurité macOS, réexécutez le harnais d'or avant de blâmer le modèle : les révisions du compilateur et du BNNS déplacent le comportement dans les marges.
15. Équité multisession et mise en file d'attente sur la mémoire unifiée
Lorsque deux sessions ORT partagent un ordinateur portable, l'équité n'est pas garantie par le système d'exploitation seul. Établissez des plafonds de mémoire par session et des files d'attente de travail limitées au niveau de la couche application. Mesurez p99 pour des sessions simultanées plutôt que pour le meilleur débit en une seule session ; les conflits de mémoire unifiée se manifestent par une croissance de la queue avant que les moyennes ne bougent. Si vous avez besoin d'une latence prévisible pendant qu'un coéquipier passe des appels vidéo, considérez l'Apple Silicon distant comme une partie de l'architecture et non comme un débordement d'urgence. Documentez les classes de concurrence (interactive, batch, CI) et mappez-les aux hôtes afin que les personnes de garde puissent raisonner sur le rayon d'explosion.
16. Liens vers les guides de sites existants
Pour les comparaisons de la chaîne d'outils Core ML, utilisez l'article de production Core ML vs MLX. Pour connaître les frais généraux d’inférence locale conteneurisée, lisez le guide Docker Colima LLM. Pour déplacer la charge du bureau, suivez le guide de sélection Mac distant SSH vs VNC. Conservez une seule annexe de démarque dans votre dépôt qui répertorie les résumés de roues, les commandes des fournisseurs et les tableaux de compartiments afin que les nouvelles recrues ne redécouvrent pas les mêmes armes à pied ORT chaque trimestre. Lorsque la législation ou les marchés publics bloquent les GPU cloud, les pools Mac distants restent un moyen pragmatique d'ajouter de la capacité Apple Silicon sans achats de capitaux ; l’économie dépend toujours de 95 p par dollar mesurables une fois les chemins de compilation maîtrisés. Traitez chaque mise à niveau mineure de macOS comme une amélioration de votre pile d'inférence et réexécutez la matrice de compartiment complète avant le déploiement.