L'inférence distribuée multi-nœuds d'EAS vous permet de déployer de grands modèles MoE, tels que DeepSeek 671B, qui dépassent la capacité d'un seul appareil.
Prérequis
Les images officielles SGLang et vLLM d'EAS ou de Model Gallery prennent en charge nativement l'inférence distribuée. Pour utiliser une image personnalisée, assurez-vous qu'elle respecte les exigences réseau de votre framework d'inférence distribuée et suit les modèles standard de traitement distribué. Pour plus de détails, consultez la section Fonctionnement.
Fonctionnement
Concepts clés et principes de mise en œuvre de l'inférence distribuée :
Unité d'instance
L'inférence distribuée introduit des unités d'instance (appelées Unit dans cette rubrique). Les instances au sein d'une unité utilisent des stratégies de communication réseau haute performance et de parallélisme, telles que le parallélisme tensoriel (TP) et le parallélisme de pipeline (PP), pour traiter chaque requête. Les instances d'une unité conservent un état (stateful). Les unités sont entièrement symétriques et sans état (stateless) les unes par rapport aux autres.
ID d'instance
Chaque instance d'une unité reçoit un ID d'instance séquentiel via une variable d'environnement. Pour la liste des variables d'environnement, consultez la section Annexe. Utilisez ces ID pour attribuer différentes tâches aux instances.
Gestion du trafic
Par défaut, chaque unité gère le trafic uniquement via l'instance 0 (RANK_ID = 0). Le système achemine le trafic utilisateur vers l'instance 0 de chaque unité à l'aide de la découverte de service. Chaque unité traite les requêtes de manière distribuée et gère le trafic de façon indépendante.
Mises à jour progressives
Lors d'une mise à jour progressive, une unité est reconstruite dans son ensemble. Toutes les instances de la nouvelle unité démarrent en parallèle. Une fois toutes les nouvelles instances prêtes, le système retire le trafic de l'ancienne unité et supprime ses instances.
Cycle de vie
Reconstruction d'unité
Lorsqu'une unité est recréée, toutes les instances de l'ancienne unité sont supprimées en parallèle et toutes les instances de la nouvelle unité sont créées en parallèle. Aucun traitement spécial n'est appliqué en fonction de l'ID d'instance.
Recréation d'instance
Par défaut, chaque instance d'une unité partage le cycle de vie de l'instance 0. Lorsque l'instance 0 est recréée, toutes les autres instances de l'unité sont également recréées. Lorsqu'une instance autre que l'instance 0 est recréée, les autres instances restent inchangées.
Tolérance aux pannes distribuée
-
Gestion des défaillances d'instance
Lorsque le système détecte une défaillance sur n'importe quelle instance d'un service distribué, il redémarre automatiquement toutes les instances de l'unité.
Cela empêche l'incohérence de l'état du cluster causée par des pannes ponctuelles et garantit que toutes les instances démarrent avec un environnement propre et cohérent.
-
Récupération coordonnée
Après le redémarrage des instances, le système attend que toutes les instances de l'unité atteignent un état prêt cohérent à l'aide d'une barrière de synchronisation. Les processus métier ne démarrent qu'une fois toutes les instances prêtes.
-
Cette approche répond aux objectifs suivants :
Elle prévient les échecs des groupes de communication NCCL causés par des états d'instance incohérents.
Elle garantit une synchronisation stricte au démarrage sur tous les nœuds d'une tâche d'inférence distribuée.
La tolérance aux pannes distribuée est désactivée par défaut. Pour l'activer, définissez le paramètre unit.guard comme indiqué dans l'exemple suivant :
{
"unit": {
"size": 2,
"guard": true
}
}
Procédure
Déploiement à l'aide de Model Gallery
Model Gallery est recommandé pour le déploiement distribué multi-nœuds.
L'inférence distribuée est prise en charge uniquement lorsque le moteur d'inférence est SGLang ou vLLM.
Sélectionnez des ressources de déploiement correspondant au modèle choisi.
Sur la fiche du modèle, cliquez sur Deploy. Ensuite, cliquez sur l'icône de modification à côté du modèle de déploiement. Dans la boîte de dialogue qui s'ouvre, sélectionnez Distributed.
Déploiement à l'aide d'une image personnalisée
-
Connectez-vous à la PAI console. Sélectionnez une région en haut de la page. Ensuite, sélectionnez l'espace de travail souhaité et cliquez sur Enter Elastic Algorithm Service (EAS).
Créer un service : Dans l'onglet Inference Service, cliquez sur Deploy Service. Sélectionnez Custom Model Deployment> Custom Deployment.
Mettre à jour un service : Dans l'onglet Inference Service, recherchez votre service cible dans la liste des services. Dans la colonne Actions, cliquez sur Update.
-
Dans le formulaire de configuration des paramètres, définissez les paramètres suivants. Pour plus de détails, consultez la section Déploiement personnalisé.
-
Dans la section Environment Information, configurez l'image d'exécution et la commande de démarrage :
Image Configuration : Dans la liste Alibaba Cloud Image, sélectionnez une image vllm ou sglang.
Command : Après avoir sélectionné une image, le système définit automatiquement la commande de démarrage. Ne la modifiez pas.
-
Dans la zone Features, activez l'interrupteur Distributed Inference et configurez les paramètres clés suivants :
Paramètre
Description
Number of Machines for Single-Replica Deployment
Nombre de machines pour une seule instance d'inférence de modèle. La valeur minimale est 2.
RDMA Network
Activez RDMA pour garantir des connexions réseau à haut débit entre les machines.
RemarqueRDMA est disponible uniquement pour les services déployés sur des ressources Lingjun.
-
Une fois les paramètres configurés, cliquez sur Deploy ou Update.
Annexe
Lors du déploiement d'un service d'inférence distribuée, configurez la mise en réseau pour des frameworks tels que Torch Distributed ou Ray. Si vous activez VPC ou RDMA, chaque instance dispose de plusieurs cartes réseau (NIC). Spécifiez quelle carte réseau utiliser pour la communication inter-instances.
RDMA activé : Utilise la carte réseau RDMA (net0) par défaut.
RDMA désactivé : Utilise la carte réseau VPC (eth1) configurée par l'utilisateur.
Transmettez ces paramètres en tant que variables d'environnement dans votre commande de démarrage :
|
Nom de la variable d'environnement |
Description |
Valeur d'exemple |
|
RANK_ID |
ID d'instance, commençant par 0 et incrémenté de 1. |
0 |
|
COMM_IFNAME |
Carte réseau pour la communication inter-instances :
|
net0 |
|
RANK_IP |
Adresse IP pour la communication inter-instances, correspondant à la carte réseau spécifiée par COMM_IFNAME. |
11...* |
|
MASTER_ADDRESS |
Adresse IP de l'instance 0 (RANK_ID = 0), correspondant à la carte réseau spécifiée par COMM_IFNAME pour l'instance 0. |
11...* |