Protocole PRISME-Mesh — réseau edge décentralisé
Projet : PRISME — France 2030
Version : 0.1 (brouillon M12)
Statut : spécification technique + charte ESS — à valider CODIR (post-séminaire 29/07/2026) · COPIL + comité éthique IA (M1+)
Jalon : protocole signé M12 · registre opérationnel M18 · ≥ 3 nœuds M24
Complète : Axe entrepreneurial & edge §4 · IA fédérée Marty · Edge computing & Nœud IA Expérimental · Autonomie & outils souverains · F05 · 05 ia responsable
1. Objet et périmètre
1.1 Problème adressé
De nombreuses structures culturelles (compagnies émergentes, jeunes lieux, entrepreneurs de spectacles cat. 1–3) n'ont ni GPU ni administrateur système pour exécuter localement un petit modèle de langage spécialisé (SLM). À l'inverse, certaines structures (fabriques, scènes, hubs réseau) disposent de capacité de calcul inutilisée en dehors des créneaux de production.
PRISME-Mesh mutualise cette capacité sans centraliser les données métier — complément de l'inférence locale (Nœud IA POC / Serveur Outils Grainerie) et de l'apprentissage fédéré Marty (FedAvg).
1.2 Ce que PRISME-Mesh est — et n'est pas
| PRISME-Mesh est | PRISME-Mesh n'est pas |
|---|---|
| Orchestration de jobs d'inférence SLM en créneaux libres (y compris nocturnes) | Plateforme cloud propriétaire |
| Réseau ESS à adhésion volontaire | Marché spot commercial de GPU |
| Agents métier spécialisés en arrière-plan — latence réseau assumée | Agent conversationnel temps réel ni promesse d'accélération/facilitation GPAI |
Extension du registre instances_federees | Copie centralisée des bases Baserow |
| Accès IA souveraine pour structures sans nœud local | Envoi de données vers hyperscaler US |
1.3 Distinction avec l'apprentissage fédéré
| Mécanisme | Objet échangé | Données métier |
|---|---|---|
| Apprentissage fédéré (Marty FedAvg) | Agrégats de poids / gradients | Jamais — restent locales |
| PRISME-Mesh | Jobs d'inférence (prompt + contexte minimal) | Jamais centralisées — traitement sur nœud hub ou spoke avec données locales |
| Hub IA fixe (fabrique, CIRC-INO) | Inférence mutualisée continue | Quote-part réseau |
Les trois mécanismes sont complémentaires et partagent la même gouvernance (charte F05, consentement, comité éthique IA).
1.4 Enjeux du réseau mesh edge — synthèse
Dans un mesh, aucun nœud n'est maître : la valeur du réseau dépend de huit registres indissociables. PRISME-Mesh les traite explicitement — c'est la condition pour passer de POC (TRL 3–4) à pilote filière (TRL 5–6).
| # | Enjeu | Risque si négligé | Réponse PRISME-Mesh |
|---|---|---|---|
| 1 | Orchestration distribuée | Chaos — jobs perdus, modèles incohérents | Découpage en micro-jobs (inférence SLM, modes A/B/C) · mesh-orchestrator (files, scoring latence/charge/énergie) · heartbeat 30 s · gestion volatilité (file + retry · préemption jobs locaux) · profils marty-* versionnés |
| 2 | Sécurité & confiance | Réseau inutilisable — poisoning, fuite | OIDC fédéré (Authentik) · mTLS inter-hubs · charte F05 + révocation · pas de PII en logs · comité éthique IA · revue ANITI / B612 · interdiction centralisation données métier |
| 3 | Performance & latence | Promesse temps réel non tenue — déception vs GPAI | Latence inter-nœuds assumée — jobs asynchrones, files et créneaux libres (nuit) · routage proximité + GPU libre · vLLM / Hermes · batching · quantization SLM · pas d'objectif chat instantané · bench kWh/job vs GPAI (E5) |
| 4 | Gouvernance | Mesh ingérable à l'échelle | Adhésion volontaire ESS · créneaux share_windows · priorités publiques (spoke sans GPU · < 5 ETP · pépinière) · COPIL + comité éthique · pas de spot pricing |
| 5 | Interopérabilité | Silos matériels et logiciels | Stack ouverte : OpenAI /v1, profils Marty, Docker PRISME-edge-minimal · registre mesh_nodes (capacités hétérogènes : none → 48 Go VRAM) · extension instances_federees Calendrier |
| 6 | Économie du partage | Nœuds ne contribuent pas | Crédit contributeur (heures GPU) · quote-part ESS transparente · tableau de bord kWh/jobs · pas d'enchères — alignement intérêt général |
| 7 | Fiabilité du maillage | Effondrement si nœuds partent | Tolérance aux pannes : file d'attente · retry exponentiel · ≥ 3 hubs (M24) · Le Filament (SLA infogérance) · bascule orchestrateur Serveur Outils Grainerie → serveur dédié (M18) |
| 8 | Qualité des résultats IA | Réponses divergentes, biais locaux | Profils restreints (marty-grainerie, marty-baserow, marty-calendarinterdit programmation artistique · métriques job (tokens, duration_ms, kwh_estimated`) |
Fil conducteur : sans orchestration robuste (1) et confiance (2), le mesh devient chaotique ; sans gouvernance ESS (4) et incitations (6), il ne grandit pas ; sans fiabilité (7) et qualité (8), il n'est pas adoptable par des structures culturelles.
flowchart LR
subgraph enjeux["8 registres"]
O[1 Orchestration]
S[2 Sécurité]
P[3 Performance]
G[4 Gouvernance]
I[5 Interop]
E[6 Économie]
R[7 Fiabilité]
Q[8 Qualité IA]
end
subgraph prisme["PRISME-Mesh"]
ORC[Orchestrateur]
CHR[Charte ESS F05]
REG[Registre mesh_nodes]
end
O & P & R --> ORC
S & G & E --> CHR
I & Q --> REG2. Charte ESS — gouvernance du réseau
2.1 Adhésion
| Règle | Détail |
|---|---|
| Volontariat | Opt-in explicite par la direction de la structure |
| Révocabilité | Désinscription possible à tout moment — jobs en cours honorés puis arrêt |
| Types de nœuds | Hub (GPU contributif) · Spoke (consommateur) · Hybride (les deux) |
| Charte IA | Signature annexe F05 + présent protocole |
| Infogérance | Recommandée pour hubs — partenaire Le Filament (SLA documenté) |
| Expertise académique | Revue protocole · banc d'essai — ANITI · espace B612 (Toulouse) — voir Partenariat ANITI |
2.2 Créneaux de partage (hubs)
Le contributeur définit des fenêtres de disponibilité :
| Paramètre | Exemple | Contrainte |
|---|---|---|
share_windows | Lun–Ven 22h–07h ; Sam–Dim 00h–23h | Plages hors résidence / spectacle |
max_concurrent_jobs | 2 | Limite charge GPU |
priority_local | true | Jobs locaux toujours prioritaires |
preempt_mesh_jobs | true | Arrêt gracieux des jobs mesh si charge locale |
2.3 Priorisation des bénéficiaires
Ordre de priorité de l'orchestrateur (en cas de contention) :
- Structure sans nœud GPU local
- Structure < 5 ETP équivalent numérique
- Parcours entrepreneur émergent (pépinière CIRC-INO)
- Membres contributeurs (crédit mesh)
- Autres membres réseau
2.4 Données et confidentialité
| Interdit | Autorisé |
|---|---|
| Copie persistante des données métier sur le nœud distant | Inférence sur extrait minimal nécessaire au job |
| Entraînement sur données d'une autre structure | Agrégats anonymisés (fédération Marty — protocole séparé) |
| Logs contenant PII en clair | Métadonnées job : job_id, node_id, tokens, kWh, duration_ms |
Modes d'inférence mesh :
| Mode | Description | Usage |
|---|---|---|
| A — Prompt seul | Texte déjà anonymisé / générique | Classification tags, reformulation neutre |
| B — Contexte local | Données lues sur le spoke ; seul le prompt compilé transite chiffré | Assistant admin avec périmètre restreint |
| C — Modèle vers spoke | Hub pousse adaptateur LoRA ; inférence sur CPU/GPU spoke | Structures avec matériel léger |
2.5 Modèle économique ESS
| Élément | Principe |
|---|---|
| Quote-part réseau | Cotisation annuelle ESS — barème progressif selon taille structure |
| Crédit contributeur | Heures GPU offertes → crédit consommation mesh |
| Pas de spot pricing | Tarifs publiés · pas d'enchères |
| Transparence | Tableau de bord : kWh partagés, jobs, quote-part |
3. Architecture technique
3.1 Vue d'ensemble
flowchart TB
subgraph spokes["Spokes — structures sans GPU"]
S1["Compagnie émergente\nCalendrier + Baserow"]
S2["Jeune lieu\nspoke léger Docker"]
end
subgraph control["Couche contrôle PRISME-Mesh"]
REG["Registre nœuds\n(Baserow mesh_nodes)"]
ORC["Orchestrateur\nmesh-orchestrator"]
OIDC["Authentik / OIDC\nfédération identités"]
end
subgraph hubs["Hubs — capacité contributive"]
H1["La Grainerie\nmarty — GPU 48 Go"]
H2["Scène CIRC-INO\nhub secondaire"]
H3["Le Filament\ninfogérance CHATONS"]
end
subgraph stack["Stack edge par hub"]
VLLM["vLLM marty-llm\nOpenAI /v1"]
HER["Hermes Gateway\nprofils marty-*"]
MON["Monitoring\nkWh · GPU · SLA"]
end
S1 & S2 -->|HTTPS mTLS\nsoumission job| ORC
ORC --> REG
ORC --> OIDC
ORC -->|route job| H1 & H2
H1 --> VLLM & HER & MON
H2 --> VLLM & HER
H3 -.->|supervision| H1 & H2
REG <-->|heartbeat · capacités| H1 & H23.2 Topologie logique — trois couches
┌─────────────────────────────────────────────────────────────────────────────┐
│ COUCHE 1 — Métier (par structure) │
│ Calendrier · Baserow · n8n · PostgreSQL — données ICC locales │
├─────────────────────────────────────────────────────────────────────────────┤
│ COUCHE 2 — PRISME-Mesh (mutualisation capacité) │
│ mesh-agent (spoke) · mesh-orchestrator · registre mesh_nodes │
├─────────────────────────────────────────────────────────────────────────────┤
│ COUCHE 3 — Inférence edge (hubs) │
│ vLLM · Hermes · profils marty-grainerie / marty-baserow / marty-calendar │
└─────────────────────────────────────────────────────────────────────────────┘
Héritage technique : le registre PRISME-Mesh étend la table Baserow instances_federees et l'API register déjà spécifiées dans SPEC_ARCHITECTURE_FEDEREE (Calendrier Grainerie).
3.3 Composants
| Composant | Rôle | Déploiement | Jalon |
|---|---|---|---|
mesh_nodes (Baserow) | Registre : capacités, créneaux, statut, charte signée | Hub central PRISME | M12 |
mesh-orchestrator | Files d'attente, routage, priorité, facturation ESS | Phase 1 (M12–M18) : conteneur/service isolé sur Serveur Outils Grainerie (expérimentation) · Phase 2 (M18+) : serveur dédié type Nœud IA POC (stack mesh séparée du métier) | M12 (exp.) → M18+ (prod.) |
`mesh-agent (spoke) | Client léger — soumet jobs, reçoit résultats | Docker PRISME-edge-minimal | M18 | |||
mesh-hub-agent | Agent sur nœud GPU — accepte jobs mesh, heartbeat | Nœud IA POC / hubs partenaires | M12–M18 |
mesh-dashboard | Dispo, kWh, crédits, SLA | Intégré Calendrier admin | M24 |
| Authentik / OIDC` | Identités fédérées inter-instances | Existant federation L1 | M12 |
3.4 Schéma réseau — flux de confiance
sequenceDiagram participant Spoke as Spoke (structure A) participant Orch as Orchestrateur participant Reg as Registre mesh_nodes participant Hub as Hub GPU (structure B) participant VLLM as vLLM / Hermes Spoke->>Orch: POST /api/mesh/jobs (JWT OIDC) Orch->>Reg: GET nœuds disponibles + créneaux Reg-->>Orch: liste hubs (GPU libre, latence, crédit) Orch->>Hub: POST /api/mesh/hub/execute (job chiffré) Hub->>VLLM: inférence SLM (profil marty-*) VLLM-->>Hub: completion Hub-->>Orch: résultat + métriques (tokens, kWh) Orch-->>Spoke: réponse + job_id Orch->>Reg: log métadonnées (sans PII)
3.5 Routage — algorithme (v0.1)
ENTRÉE : job (type, tokens_estimés, profil_marty, priorité_structure)
SORTIE : hub_id ou FILE_ATTENTE
1. Filtrer hubs : status=online · charte_valide · dans share_window
2. Exclure hubs : GPU_util > seuil (80 %) · preempt_mesh_jobs déclenché
3. Scorer chaque hub :
score = w1·(1/latence) + w2·crédit_disponible + w3·priorité_bénéficiaire
- w4·empreinte_kWh_estimée
4. Sélectionner hub score max
5. Si aucun hub : mise en file · notification · retry exponentiel (max 3)
6. Timeout job : 120 s (inférence admin) · 600 s (batch)
Principe sobriété : favoriser le hub géographiquement le plus proche et le moins chargé — réemploi de capacité existante (référence E5 Shift Project).
3.6 Hébergement de l'orchestrateur (décision CODIR Q4)
L'orchestrateur mesh est séparé de la couche métier (Calendrier, Baserow, n8n) et de l'inférence GPU (Nœud IA POC). Deux phases :
| Phase | Période | Hébergement | Objectif |
|---|---|---|---|
| Expérimentation | M12–M18 | Service isolé sur Serveur Outils Grainerie (conteneur dédié, ressources CPU/RAM limitées) | Valider routage, file d'attente, API mesh — sans impacter la charge métier critique |
| Consolidation | M18+ | Serveur dédié type Nœud IA POC (rack, stack mesh autonome : orchestrateur + registre + dashboard) | Production réseau · ≥ 3 nœuds contributifs · SLA documenté |
Règles d'architecture :
- Serveur Outils Grainerie conserve les données métier Grainerie ; l'orchestrateur expérimental n'y accède qu'aux métadonnées
mesh_nodes(pas aux bases ICC). - Le serveur dédié mesh (classe Nœud IA POC : Xeon, 64–128 Go RAM, stockage NVMe — sans obligation GPU pour l'orchestrateur) héberge la couche contrôle ; l'inférence GPU reste sur Nœud IA POC et les hubs contributeurs.
- Bascule M18 : export état registre · bascule DNS
mesh.prisme.grainerie.net· tests de non-régression (10 jobs pilotes).
Patrimoine existant : Nœud IA POC (GPU inférence, 10 707 € HT acquis) · Serveur Outils Grainerie (HP DL580 G7, 600 € HT) — voir budget mesh infrastructure.
4. Modèle de données — registre mesh_nodes
Extension de instances_federees :
| Champ | Type | Description |
|---|---|---|
node_id | UUID | Identifiant unique |
structure_id | lien | Structure membre PRISME |
node_type | enum | hub · spoke · hybrid |
gpu_model | text | ex. RTX PRO 5000 48Go · none |
vram_gb | int | VRAM disponible pour mesh |
share_windows | JSON | Plages cron (UTC) |
max_concurrent_jobs | int | Par défaut 1 |
status | enum | online · offline · busy · maintenance |
last_heartbeat | datetime | < 60 s pour online |
charte_signed_at | date | Signature protocole |
mesh_credit_hours | float | Crédit contributeur (heures GPU) |
endpoint_mesh | URL | https://hub.example.net/api/mesh/hub |
oidc_client_id | text | Client fédéré Authentik |
Heartbeat hub (toutes les 30 s) :
{
"node_id": "uuid",
"status": "online",
"gpu_util_pct": 12,
"vram_free_gb": 40,
"mesh_jobs_active": 0,
"local_jobs_active": 1,
"accepting_mesh": true
}
5. API PRISME-Mesh (spécification v0.1)
Base URL orchestrateur : https://mesh.prisme.grainerie.net (indicatif — instance Serveur Outils Grainerie ou service dédié).
5.1 Enregistrement nœud
POST /api/mesh/nodes/register
Authorization: Bearer <JWT OIDC>
Content-Type: application/json
Corps (hub) :
{
"node_type": "hub",
"endpoint_mesh": "https://marty.grainerie.net/api/mesh/hub",
"gpu_model": "RTX PRO 5000",
"vram_gb": 48,
"share_windows": [
{ "cron": "0 22 * * 1-5", "duration_hours": 9 },
{ "cron": "0 0 * * 0,6", "duration_hours": 24 }
],
"max_concurrent_jobs": 2,
"charte_version": "0.1"
}
Réponse : 201 Created + node_id
5.2 Soumission job (spoke)
POST /api/mesh/jobs
Authorization: Bearer <JWT OIDC>
Corps :
{
"profile": "marty-grainerie",
"mode": "A",
"prompt": "Résume ce texte en 3 points…",
"max_tokens": 512,
"temperature": 0.2,
"priority": "emergent",
"callback_url": null
}
Réponse synchrone (hub disponible) :
{
"job_id": "uuid",
"status": "completed",
"hub_node_id": "uuid",
"completion": "…",
"metrics": {
"tokens_in": 120,
"tokens_out": 89,
"duration_ms": 2340,
"kwh_estimated": 0.002
}
}
5.3 Exécution côté hub
POST /api/mesh/hub/execute
Authorization: Bearer <mesh-internal-token>
X-Mesh-Job-Id: uuid
Le hub invoque marty-llm (completions) ou Hermes Gateway selon le profil — sans persister le prompt au-delà du TTL job (défaut 300 s).
5.4 Statut et métriques
GET /api/mesh/jobs/{job_id}
GET /api/mesh/nodes/{node_id}/metrics?period=30d
6. Sécurité
| Couche | Mesure |
|---|---|
| Transport | TLS 1.3 · mTLS inter-nœuds hubs |
| Authentification | OIDC fédéré (Authentik) — même socle que instances_federees |
| Autorisation | RBAC : mesh:submit · mesh:contribute · mesh:admin |
| Chiffrement job | Optionnel v0.2 — AES-GCM clé éphémère par job (mode B) |
| Journalisation | Métadonnées uniquement · rétention 90 jours |
| Audit | Revue trimestrielle comité éthique IA |
| Isolation | Jobs mesh dans cgroup / conteneur éphémère · pas d'accès filesystem hub |
Garde-fous IA (F05) :
- Profils
marty-*à périmètre restreint — pas d'outils destructifs cross-structure - Relecture humaine obligatoire pour sorties à impact (contrats, RH)
- Pas de jobs mesh pour programmation artistique ou génération de contenu scénique
7. Déploiement — package spoke
PRISME-edge-minimal (Docker Compose) — jalon M18 :
# Extrait indicatif — voir livrable Développer M18
services:
mesh-agent:
image: prisme/mesh-agent:0.1
environment:
MESH_ORCHESTRATOR_URL: https://mesh.prisme.grainerie.net
OIDC_ISSUER: https://auth.grainerie.net
volumes:
- ./config:/config:ro
# Optionnel — Calendrier spoke léger sans GPU
Le spoke n'expose pas de port GPU — il délègue l'inférence au mesh.
8. Scénario type — compagnie émergente
flowchart LR
subgraph emer["Compagnie émergente (spoke)"]
CAL["Calendrier simplifié"]
AG["mesh-agent"]
DATA["Données locales\nBaserow"]
end
subgraph mesh["PRISME-Mesh"]
O["Orchestrateur"]
end
subgraph hub["La Grainerie (hub)"]
M["Nœud IA POC GPU\n22h–7h libre"]
end
CAL -->|tâche métier différée| AG
DATA -->|contexte local| AG
AG -->|job mode B| O
O -->|routage| M
M -->|completion| O
O --> AGÉtapes :
- Compagnie issue de la pépinière CIRC-INO — spoke déployé (M18).
- Besoin : résumer un compte rendu de répétition (mode A — texte déjà anonymisé) — job déposé, pas d'échange conversationnel.
mesh-agentsoumet le job en arrière-plan — prioritéemergent; délai acceptable (file + routage mesh).- Orchestrateur route vers Nœud IA POC (créneau 22h–7h, GPU à 12 %) — latence réseau assumée.
- Inférence
marty-grainerie— notification à la fin du traitement ; relecture humaine si besoin. - Métriques observatoire : 0,002 kWh vs ~0,2 kWh GPAI cloud (ordre de grandeur E5).
9. Jalons et critères d'acceptation
| Jalon | Mois | Livrable | Critère d'acceptation |
|---|---|---|---|
| P0 — Protocole | M12 | Ce document + charte signée | Validation CODIR + comité éthique IA |
| P1 — Registre | M12 | Table mesh_nodes + API register | ≥ 1 hub (Grainerie) enregistré |
| P2 — Hub agent | M18 | mesh-hub-agent sur Nœud IA POC | Heartbeat + 10 jobs tests réussis |
| P2bis — Orchestrateur exp. | M12–M18 | mesh-orchestrator sur Serveur Outils Grainerie (service isolé) | API + routage test · 10 jobs internes |
| P3 — Orchestrateur prod. | M18+ | Bascule serveur dédié type Nœud IA POC | Routage + file d'attente opérationnels · SLA |
| P4 — Spoke | M18 | mesh-agent dans edge-minimal | 1 spoke pilote (compagnie émergente) |
| P5 — Réseau | M24 | ≥ 3 nœuds contributifs | Grainerie + 2 partenaires (CIRC-INO, Le Filament) |
| P5bis — Revue ANITI | M12–M18 | Avis expert + campagne tests B612 | Recommandations intégrées protocole · ≥ 10 scénarios synthétiques |
| P6 — Dashboard | M24 | Métriques kWh / crédits | Export observatoire PRISME |
10. Indicateurs (F08)
| Indicateur | Cible M36 |
|---|---|
| Nœuds PRISME-Mesh contributifs | ≥ 3 |
| Heures GPU mutualisées documentées | ≥ 500 h (ordre de grandeur) |
| Jobs mesh complétés avec succès | ≥ 1 000 |
| Structures spokes sans GPU local | ≥ 5 |
| Bench kWh/job mesh vs GPAI cloud | 1 fiche publiée (Observer) |
11. Annexes
Annexe A — Charte d'adhésion (modèle)
Annexe B — Profils Marty autorisés sur le mesh (v0.1)
| Profil | Cas d'usage mesh | Interdit |
|---|---|---|
marty-grainerie | Reformulation, résumé admin | Décisions RH définitives |
marty-baserow | Suggestions champs, tags | Export masse cross-structure |
marty-calendar | Intentions calendrier | Programmation artistique |
Annexe C — Références techniques
| Téléchargement |
|---|
| Architecture fédérée L1 |
| Marty FedAvg L3 |
| Stack edge |
| Nœud IA Expérimental deploy |
| F05 IA responsable |