L'orchestre élastique des cœurs : comment l'inférence LLM partage le processeur avec le système d'exploitation sans fausser les résultats ✛

Original: "Elastic Gang: Per-Token Membership Change for a Hard-Barriered LLM Inference Gang Co-Scheduled with OS Processes"
· Daeyeon Son
arXiv:2607.04668 · 2026-07-06 · CC BY-SA 4.0 · 5 min
Le protocole ACK-latch permet à un groupe de cœurs exécutant une inférence LLM d'emprunter et de rendre des cœurs entre les tokens sans blocages ni distorsion des résultats.

Contexte

Sept cœurs sont figés devant une barrière invisible. Le huitième s'attarde sur un processus étranger — et toute l'inférence LLM des grands modèles de langage se bloque. C'est exactement le principal problème de la cohabitation entre les tâches d'apprentissage automatique et les processus ordinaires sur un même processeur. Le gang d'inférence exige que tous les cœurs frappent en même temps — sinon silence. Mais le système d'exploitation ne peut pas simplement geler un cœur au milieu d'un token : la barrière n'attendra jamais le retardataire, et l'ajout spontané d'un nouveau participant fausserait imperceptiblement le résultat. L'allocation statique de cœurs « d'inférence » ne résout le problème qu'à moitié : pendant les pauses entre générations, ces cœurs restent inactifs, et les processus généraux s'étouffent sur les cœurs restants. Le problème est particulièrement aigu sur les appareils edge sans GPU, où le processeur est le seul calculateur et où chaque watt compte. Il faut un mécanisme permettant aux cœurs de passer d'une population à l'autre sans violer la correction — comme des musiciens qui entrent et sortent de l'orchestre entre les mesures sans casser le rythme.

Méthodes

Le protocole ACK-latch est implémenté dans le noyau d'Anima OS — un système d'exploitation en Rust, exécuté sur un AMD Ryzen 9 9800X3D (architecture Zen 5). Le moteur d'inférence charge les modèles quantifiés SmolLM2-135M et Qwen2.5-7B et effectue l'inférence en découpant chaque token en vagues d'opérations matrice-vecteur séparées par des barrières (environ 226 par token). Avant le début de la génération, un drapeau d'activité est levé et le numéro d'époque est incrémenté ; chaque cœur capable de se prêter confirme (ack) l'époque courante, après avoir sauvegardé l'état de son processus — comme un musicien qui met son instrument en pause et hoche la tête au chef. La composition des participants pour le token suivant est fixée dans un seul mot atomique : un masque binaire est formé par l'intersection des cœurs demandés par le gang et des cœurs dont l'ack correspond à l'époque au moment de la fixation. Ce mot est publié avant le début du token, et tous les points d'attente de barrière le lisent. Un cœur qui n'a pas eu le temps de se confirmer n'est simplement pas inclus dans le token courant — personne ne l'attend, et ses voisins du gang font son travail. Avec le départ de l'époque (à la fin de la génération ou au début d'une nouvelle), toutes les anciennes confirmations sont annulées, de sorte que les cœurs en retard ou ayant quitté le groupe ne peuvent plus influencer les tokens suivants. La migration des processus expulsés est effectuée par l'ordonnanceur : le locataire migre du cœur emprunté et continue son travail sur un autre, et au retour du cœur, ses files d'attente sont immédiatement reprises.

Résultats

Le gang élastique a été testé sur deux modèles : le léger SmolLM2-135M (0,75 ms par token, qui teste agressivement le protocole) et le lourd Qwen2.5-7B (79 ms par token, limité par la bande passante mémoire). Avec une charge d'inférence de 25 % (un quart du temps des cœurs occupé à générer), le débit global pour les processus ordinaires était de 574 quanta de service par seconde — 1,75 fois plus élevé qu'avec le partitionnement statique (327). À 50 % de charge, le gang élastique a donné un gain de 1,52×, à 75 % — 1,28×, sans jamais sacrifier la vitesse de l'inférence elle-même. À 100 % de charge, les performances se sont égalisées, comme le prédisait la théorie. Plus important encore : la sortie des modèles est restée bit à bit identique à celle d'un lancement fixe. Le hachage des logits finaux 0x9a2917eca1a62bd1 n'a pas changé dans aucun des scénarios, y compris un test de stress avec un prêt réel de cœurs sans changer la largeur cible du gang — le prêt a prouvé sa sécurité. Le délai de retour d'un cœur après la fin de la génération était de 0,22 μs (médiane) — pratiquement instantané. La capture d'un cœur occupé, selon une politique volontairement conservatrice, dure un quantum de l'ordonnanceur (environ 16 ms) : le processus locataire n'est pas interrompu au milieu de son quantum, et le cœur ne rejoint le gang qu'à son expiration.

Implications

Ce travail brise l'idée reçue selon laquelle les calculs à barrières strictes sont incompatibles avec une redistribution dynamique des cœurs. Le protocole ACK-latch transforme le groupe d'inférence en un objet d'ordonnancement à part entière, capable de partager les ressources avec le reste du système sans perte de correction. Cela ouvre la voie à des systèmes d'exploitation où l'inférence n'est pas une tâche isolée, mais un service de noyau ordinaire, qui s'adapte élastiquement à la charge courante.

Développements futurs

Le mécanisme pourrait être porté dans l'espace utilisateur pour les systèmes Linux avec l'ordonnanceur SCHED_DEADLINE, et adapté aux architectures hétérogènes (big.LITTLE) et aux topologies avec multithreading simultané (SMT). Une intégration avec les politiques d'économie d'énergie est possible pour doser précisément les cœurs empruntés.

Impact

Cela influencera la conception des systèmes d'exploitation pour les appareils embarqués et edge, où l'inférence CPU devient la charge principale, ainsi que l'infrastructure pour les agents LLM, en améliorant l'utilisation des processeurs sans nuire à la réactivité.

Prochaines étapes

Étudier le comportement du protocole sur des processeurs avec différents nombres de cœurs physiques, et explorer une variante avec interruption du cœur occupé pour accélérer la capture (actuellement interdite par la politique).

Problèmes ouverts clés

Ainsi, le gang élastique, tel un orchestre sans chef, se synchronise sur un seul mot-partition, ne permettant un changement de composition qu'entre les tokens-mesures. C'est un pas vers la résolution du problème fondamental de la coexistence pacifique des calculs synchrones et asynchrones dans un même système, et vers la compréhension des invariants minimaux pour la migration sûre des membres d'un groupe à barrières.

Le regard de la machine du savoir

Cette section s'adresse à l'auteur du travail et à ses collègues. Les travaux voisins ont été trouvés par une recherche sémantique dans notre archive, et non par correspondance de mots. Nous n'évaluons pas : nous montrons le champ autour.

Ce que fait ce travail

Dans ce travail, nous proposons le protocole ACK-latch pour la répartition élastique des cœurs entre l'inférence de LLM et les processus classiques dans Anima OS. Ce protocole permet aux cœurs d'entrer et de sortir dynamiquement de la bande d'inférence entre les tokens, sans rompre la synchronisation par barrière, comme le confirment les expériences sur les modèles SmolLM2-135M et Qwen2.5-7B. Nous montrons une augmentation du débit pour les processus en arrière-plan allant jusqu'à 1.75× par rapport à une répartition statique des cœurs.

Où est sa force

Le point fort réside dans la fixation atomique de la composition de la bande via un masque binaire et des époques, ce qui garantit la correction lors de la redistribution dynamique des cœurs sans attendre les retardataires. Cela permet d'utiliser efficacement les cœurs inactifs pendant les pauses de l'inférence et de préserver la réactivité du système.

Vers où avancer

À essayer

  • Tester ACK-latch avec plusieurs bandes d'inférence simultanées de priorités différentes, afin d'examiner comment le chevauchement des masques affecte les performances.
  • Envisager une gestion adaptative de la taille de la bande basée sur la prédiction de charge, en utilisant l'historique des accusés de réception pour anticiper la disponibilité des cœurs.
  • Étudier l'impact de la migration des processus sur la localité du cache et proposer des stratégies de sélection des cœurs donneurs qui minimisent les pertes dues aux déplacements.

Pourquoi cela peut compter

La répartition élastique des ressources pour l'inférence de LLM sur des appareils edge sans GPU pourrait considérablement améliorer la réactivité globale et l'efficacité énergétique, ce qui est crucial pour l'adoption généralisée des assistants neuronaux locaux. Le protocole proposé ouvre la voie à des systèmes d'exploitation plus flexibles, capables de trouver un équilibre dynamique entre l'inférence et les tâches en arrière-plan sans compromettre la correction.

Résumé original

tel que rédigé par les auteurs, en anglais arXiv:2607.04668

On-device LLM decoding is a hard-barriered CPU-SIMD computation that wants every core for milliseconds per token, while the rest of the OS wants those same cores continuously. A barriered gang cannot simply be dropped into a preemptive scheduler: an unannounced departure deadlocks a barrier, and an unannounced arrival silently corrupts logits. I present the elastic gang of Anima OS, a bare-metal x86-64 Rust kernel in which the inference gang is a first-class schedulable entity whose core membership may change between any two tokens. The core mechanism is an ACK-latched epoch protocol that never waits on a named core: a seqlock-style generation-tagged latch composed with RCU/epoch-style membership consent, so each token's participant set is the intersection of the cores the gang requested and the cores that acked the current epoch. An un-acked core is outside this token and joins at most one token later. Displaced general processes migrate and keep running; cores return to them the moment a generation ends. On a real AMD Zen 5 machine (8C/16T), inference output is bit-exact under verified per-token membership change on both a 135M and a 7B model, the property that makes elasticity safe in a kernel whose safety gate reads logits. Against fair static core partitions, elastic membership Pareto-dominates: at intermediate inference duty cycles it delivers 1.75x (25%), 1.52x (50%), and 1.28x (75%) the general throughput of a static 8-core split at equal or better inference throughput, recovers all eight stranded cores when inference is idle, and converges to the split at saturation. Returning a lent core costs 0.22 us (p50); acquiring a busy, tenant-occupied core costs one scheduling quantum (~16 ms): a running tenant is never preempted mid-slice. Decode throughput saturates at gang width 8, so ceding cores past the knee is nearly free: elasticity auto-sizes the gang online.

Même avec 301 migrations de processus en une fenêtre de 10 secondes, l'inférence restait bit à bit exacte, et la dispersion des mesures de débit ne dépassait pas 0,9 %.

Chiffres clés

  • gain de débit global (25 % d'inférence): 1,75×
  • délai de retour de cœur (p50): 0,22 μs
  • nombre maximal de cœurs pour l'accélération: 8
  • vitesse d'inférence du modèle 7B: 12,7 tokens/s
Notions
machine de Turing grands modèles de langage