← The Forge
Architecture 6 juin 2026 · 7 min · par L'équipe WORKFLOW v6

Architecture multi‑tenant pour la gestion et l’inférence de modèles IA avec Workflow v6

Découvrez comment structurer une plateforme multi‑tenant robuste avec Workflow v6, en séparant isolation, gouvernance et optimisation des ressources pour chaque client.

Principes de l’isolation multi‑tenant

Dans un contexte où plusieurs équipes ou clients partagent la même infrastructure de modèles IA, l’isolation doit être assurée à trois niveaux :

  • Isolation des données : chaque locataire possède son propre espace de stockage (datasets, logs, artefacts). Utilisez des préfixes de bucket ou des schémas de base de données distincts.
  • Isolation des environnements d’exécution : les workers Workflow v6 sont déployés dans des namespaces Kubernetes dédiés ou via des PodSecurityPolicy afin d’éviter les fuites de mémoire ou de GPU entre locataires.
  • Isolation des droits d’accès : les rôles RBAC sont définis par locataire, limitant l’accès aux secrets, aux API‑keys et aux modèles chargés.

Ces séparations permettent de garantir la confidentialité des données tout en conservant la flexibilité d’une plateforme partagée.

Modélisation des métadonnées et du versionnage

Workflow v6 s’appuie sur un catalogue de métadonnées qui doit être enrichi pour chaque tenant. Le modèle de métadonnées typique comprend :

{
  "tenant_id": "string",
  "model_name": "string",
  "version": "semantic",
  "artifact_uri": "s3://bucket/tenant_id/model_name/vX/",
  "training_hash": "sha256:...",
  "created_at": "ISO8601"
}
  • tenant_id identifie de façon unique le client.
  • version suit le même principe que le versionnage sémantique, facilitant le rollback.
  • artifact_uri pointe vers un chemin isolé, garantissant que les poids du modèle ne sont accessibles qu’au sein du tenant.

Le catalogue est généralement stocké dans un service de métadonnées (ex. : Atlas, MLflow) configuré avec un schéma multi‑tenant. Chaque requête inclut le tenant_id en en‑tête HTTP, ce qui permet aux middlewares de filtrer les résultats.

Orchestration des pipelines avec Workflow v6

Le moteur Workflow v6 orchestre les étapes d’entraînement, de validation et d’inférence via des DAG (Directed Acyclic Graph). Pour supporter plusieurs locataires, le DAG est paramétré dynamiquement :

# workflow_v6_multi_tenant.yaml
name: inference-{{ tenant_id }}
namespace: {{ tenant_id }}
steps:
  - name: load_model
    image: myrepo/model-loader:{{ model_version }}
    env:
      TENANT_ID: {{ tenant_id }}
      MODEL_URI: {{ artifact_uri }}
  - name: preprocess
    image: myrepo/preprocess:latest
    depends_on: [load_model]
  - name: infer
    image: myrepo/infer:latest
    depends_on: [preprocess]
    resources:
      gpu: 1

Le template utilise les variables tenant_id, model_version et artifact_uri injectées par le service d’orchestration. Chaque exécution crée un pod dans le namespace dédié, assurant ainsi l’isolation au niveau du réseau et des ressources.

Sécurité et gouvernance

Une architecture multi‑tenant ne peut être fiable que si la sécurité et la gouvernance sont intégrées dès la conception :

  • Chiffrement au repos : les artefacts sont stockés avec SSE‑KMS ou des clés dédiées par locataire.
  • Audit logging : chaque action (chargement de modèle, mise à jour de dataset) génère un log structuré contenant tenant_id et user_id. Ces logs sont agrégés dans un SIEM pour garantir la traçabilité.
  • Politiques de rétention : définissez des TTL (time‑to‑live) spécifiques à chaque tenant afin de respecter les exigences légales (ex. : RGPD).
  • Contrôle des dépendances : les conteneurs utilisés sont signés et scannés avec des outils comme Trivy, limitant les risques de vulnérabilités partagées.

Mise en œuvre concrète – Exemple de code Python

Le fragment suivant montre comment un service d’inférence charge le modèle associé au locataire courant :

import os
from workflow_v6 import WorkflowClient

TENANT_ID = os.getenv("TENANT_ID")
client = WorkflowClient()

# Récupérer les métadonnées du modèle du tenant
model_meta = client.get_model_metadata(
    tenant_id=TENANT_ID,
    model_name="recommendation",
    version="latest"
)

model_path = model_meta["artifact_uri"]

# Chargement du modèle (exemple PyTorch)
import torch
model = torch.load(os.path.join(model_path, "model.pt"))
model.eval()

def predict(batch):
    with torch.no_grad():
        return model(batch)

Ce code repose sur les variables d’environnement injectées par le pod Workflow v6, garantissant que chaque requête utilise les artefacts et les permissions du locataire concerné.


En suivant ces principes, vous pouvez déployer une plateforme capable de servir simultanément plusieurs clients tout en maintenant la confidentialité, la conformité et l’efficacité opérationnelle. Workflow v6 fournit les primitives nécessaires : isolation par namespace, gestion du versionnage et orchestration déclarative, ce qui rend l’architecture multi‑tenant à la fois simple à déployer et évolutive.

Envie d’aller plus loin avec WORKFLOW v6 ?

Découvrir WORKFLOW v6