Phase 3 — Offload des experts du backbone en RAM (M0)

Diffusez les FFN d'experts MoE depuis la RAM CPU plutôt que la VRAM, et un seul coordinateur de 64 GB tient un 122B — sans chirurgie de graphe.

Les FFN d'experts n'ont pas à vivre en VRAM. Les diffuser depuis la RAM CPU permet à un coordinateur de tenir un modèle dont les experts dépassent sa VRAM — la fondation qui permet aux nœuds faibles de rejoindre un grand MoE.

Planner vérifié · vrai GGUF 122B

Un 122B tient sur un seul coordinateur de 64 GB

Auparavant, l'anneau plaçait les poids en VRAM seulement, le 122B (77.6 GB) était donc infeasible sur un GCD de 64 GB. Avec les règles d'offload d'experts, le dry-run revient feasible :

feasible
plan d'anneau 122B
62.6
VRAM GiB (≤ 64)
14.2
RAM GiB (experts)
10
couches déchargées
A coordinator siphoning expert tiles from VRAM into a RAM reservoir, stamped feasible

Sortie du planner — format de règles -ot de moteur d'inférence.

node 0  layers [0,48]  vram=62.6  ram=14.2  ot_rules=10
sample: blk\.38\.ffn_(up|down|gate)_(ch|)exps=CPU   # inference engine -ot format
Ce qui a été câblé · Python pur, sans recompiler le C++

Porter les règles d'offload du planner jusqu'au vrai chargement

  • planner — émet déjà ot (règles -ot jointes par virgules) dans chaque placement.
  • protocol.py — champ StageStartRequest.ot ajouté.
  • runtime.py — transmet l'ot du placement à la requête de stage.
  • stage_service.py — le coordinateur se lance avec --override-tensor.
  • linkcpp-server transmet les arguments inconnus au llama-server d'origine, -ot s'applique donc tel quel.
# stage_service.py — coordinator branch
if request.ot:
    command += ["--override-tensor", request.ot]

Vérifié par un test aller-retour du protocole ot et la confirmation que la commande du coordinateur émet --override-tensor ; le hub s'est redéployé proprement, sans régression. Restait alors : le chargement complet de 77 GB sur 2 nœuds (coordinateur avec offload + un téléphone tenant une fenêtre d'une couche de ~1.5 GB), en attente de serveur. Le cœur de M0 — l'offload du backbone qui permet aux nœuds faibles de participer à un grand MoE — était achevé au niveau du code et du planner.