Les loueurs de puissance qui industrialisent du Stable Diffusion en img2img via Core ML sur un Mac mini M4 distant — métropoles Hong Kong, Singapour, Japon, Corée du Sud, Ouest des États-Unis — heurtent un plafond structurel : la mémoire unifiée porte à la fois poids, graphe d’exécution, file d’orchestration et répertoires chauds de compilation. Ce guide condense une matrice de décision, des paramètres exécutables et des renvois vers Core ML par lots, ORT Core ML, le découpage Wq/Wc et le TCO inter-régions. Les tarifs et l’achat restent lisibles sans compte jusqu’au paiement.
Trois frictions typiques sur M4 loué
- Compile vs débit. Premiers passages Core ML et mlmodelc partagent la mémoire unifiée avec les tenseurs ; une seconde session avant préchauffe fait souvent sauter le p95 alors que la moyenne reste rassurante.
- Timeout unique. Attente en file plus diffusion sur un seul chrono masque goulet WAN ou disque et martèle le cache disque de retries.
- Objet comme scratch. TLS par tuile sature la crypto ; l’inférence par lots semble inactive — imposez un préfixe NVMe local avant d’ajouter des hôtes.
Matrice de décision
Chaque ligne correspond à un profil d’exploitation : ajustez batch, sessions, politique de cache disque et timeouts séparés « file » versus « calcul » en vous appuyant sur les H2 suivantes. Reprofilez après toute montée macOS, Xcode ou changement de checkpoint Stable Diffusion.
| Profil | Forme d’inférence par lots | Sessions concurrentes | Posture cache disque | Timeouts Wq / Wc |
|---|---|---|---|---|
| Masse nuit | Batch jusqu’à inflexion résidents ; résolutions fixes | 16 Go une voie ; 24 Go deux si swap plate | mlmodelc local + tuiles ; froid hors hôte | Wq large ; Wc compile + p95 diffusion |
| API basse latence | Batch 1–2 ; steps bornés | 2e voie sémaphore ; 24 Go si compile+serve | Cache chaud ; froid sur disque secondaire | Wq serré ; Wc modeste ; compile isolée |
| Slice mutualisé | Caps batch/résolution par tenant | Quota concurrence ; profondeur file exportée | TMPDIR APFS par tenant |
Shrink batch avant Wc |
Pas d’IPS universel. Le routage ANE et GPU dépend des opérateurs, de la précision et du build : traitez la matrice comme de simples « garde-fous internes », jamais comme engagement fournisseur.
Conversion du modèle et taille de batch
Portez UNet et VAE vers mlprogram ou mlpackage supporté et figez la version du convertisseur au checkpoint. Faites croître l’inférence par lots jusqu’à l’inflexion des octets résidents dans la mémoire unifiée ; si les files divergent, réduisez d’abord le nombre d’étapes avant de comprimer le batch.
Runtimes mixtes : croisez compile Core ML et ORT Core ML pour éviter les doubles compilations silencieuses qui encombrent la file.
Limite de sessions simultanées
Chaque worker de file retient graphe d’exécution et décodage dans le même espace adressable. N’ouvrez une seconde voie que si vm.swapusage reste plat sur deux passes de charge représentatives.
Séparez Wq et Wc comme dans WhisperKit : alertes distinctes pour l’attente orchestrateur et pour le calcul diffusion.
Choix du nœud (Hong Kong, Singapour, Japon, Corée du Sud, Ouest des États-Unis)
Alignez nœud et compartiment de poids : Tokyo / Séoul pour le nord-est asiatique ; Singapour / Hong Kong pour l’ASEAN et la Grande Baie ; Ouest américain si vos artefacts et votre plan de contrôle sont déjà côté Pacifique. Mesurez au moins un tirage TLS réel avant de figer les timeouts par défaut de la file.
Parcours conversion : Hong Kong, Singapour, Japon, Corée du Sud, États-Unis, achat ; comparez d’abord les tarifs M4 16 et 24 Go.
Coût
Le coût total cumule loyer horaire, sortie réseau, temps perdu en compile à froid et relances dues à des timeouts effondrés. Colocation des poids avant d’augmenter l’inférence par lots sans règles explicites de cache disque sur APFS.
Après chaque migration, relisez le guide TCO : une latence plus courte n’ajoute ni mémoire unifiée ni bande passante NVMe.
Paramètres exécutables
Exemples à intégrer dans un script d’amorçage ; bandes indicatives de triage, non contrat de performance.
sysctl -n hw.memsize
sysctl -n hw.perflevel0.physicalcpu
sysctl vm.swapusage
export TMPDIR="/Users/shared/scratch/coreml-sd/$JOB_ID"
mkdir -p "$TMPDIR"
export SD_MAX_BATCH=2
export SD_MAX_CONCURRENT_SESSIONS=1
export SD_WQ_SEC=120
export SD_WC_SEC=900
Cinq étapes avant d’ajouter des hôtes
- Figez checkpoint, convertisseur et digest macOS sur la fiche machine.
- Préchauffez la compile une fois ; étiquetez le cold start dans les dashboards.
- Dichotomie batch à résolution fixe jusqu’au palier p95 ou à la swap.
- Séparez métriques file et diffusion ; deux familles d’alertes.
- Reprofilez après migration de nœud — le RTT ne remplace pas la RAM unifiée.
Trois repères exploitables dans un ticket
- Octets résidents par voie comparés à
hw.memsizepour distinguer 16 et 24 Go. - Jobs proches de Wc sur fenêtres glissantes : dérive quantification ou E/S.
- Lecture NVMe versus utilisation GPU : absence de cache disque avant hausse de concurrence.
FAQ
SSD externe pour le chaud ? Réservez-le aux archives ; conservez les artefacts Core ML chauds sur le NVMe interne.
RTT bas supprime-t-il les OOM ? Non — le placement améliore surtout le staging réseau, pas le plafond de mémoire unifiée.
Synthèse
Le Stable Diffusion img2img sur M4 loué demande discipline de batch, plafonds de sessions, métro alignée aux poids, et un coût qui compte cache disque et WAN — pas seulement la concurrence affichée. Slug stable 2026-rent-remote-mac-m4-stable-diffusion-coreml-batch-unified-memory.html.
Appliquez la matrice, branchez sysctl et Wq/Wc, puis ouvrez tarifs et achat régionaux : lecture libre sans compte jusqu’au passage en caisse.