perf-moe-dispatcher-selection

Par nvidia · skills

Choisissez le bon dispatcher de tokens MoE (`alltoall`, DeepEP ou HybridEP) en fonction du matériel, du degré d'EP et de la phase d'optimisation. Récapitule les patterns issus des travaux de mise en route DSV3, Qwen3, Qwen3-Next et VLM.

npx skills add https://github.com/nvidia/skills --skill perf-moe-dispatcher-selection

Guide de sélection du Dispatcher MoE

Docs stables : @docs/training/moe-optimization.md Card : @skills/perf-moe-dispatcher-selection/card.yaml

Décision rapide

Par matériel

Matériel Premier choix Raison
H100 DeepEP Option par défaut solide pour l'EP cross-node sur Hopper
B200 DeepEP Bon premier choix sauf si un chemin HybridEP spécifique à la plateforme est disponible
GB200 / GB300 NVL72 HybridEP Meilleur ajustement pour le dispatch aware du domaine NVLink et une pression mémoire réduite
Inconnu ou premier démarrage alltoall Chemin le plus simple pour la correction et le débogage

Par degré EP

Taille EP Recommandation
Petit EP Le choix du dispatcher est généralement un facteur secondaire ; commencez par alltoall ou DeepEP
EP moyen DeepEP devient souvent pertinent
Grand EP HybridEP est généralement la meilleure cible sur les systèmes NVL72

Modèles de famille de modèles

Charge de travail Chemin optimal courant Notes
DSV3 à grande échelle HybridEP sur GB200 ou GB300, DeepEP sur H100 Le choix du dispatcher compte davantage quand EP et PP se développent
Qwen3 235B DeepEP sur H100, HybridEP sur GB200 HybridEP gagne généralement sur GB200 et utilise souvent moins de mémoire
Qwen3 30B DeepEP Les modèles plus petits en bénéficient aussi, mais l'écart absolu est moindre
Qwen3-Next Course serrée en BF16, HybridEP plus fort en FP8 ou lors de runs limités en mémoire Bonne raison de tester plutôt que d'assumer
VLM MoE Commencez simple, puis testez HybridEP sur les systèmes de classe GB200 Les charges de travail vision sont sensibles à la fois à la mémoire et aux frais de host

Résumé des preuves arrondies

DSV3 sur GB200 ou GB300

La tendance générale est plus importante que n'importe quelle ligne du tracker :

  • le simple alltoall est généralement la baseline conservatrice
  • DeepEP améliore cette baseline une fois que la communication EP devient visible
  • HybridEP ajoute une autre étape sur les systèmes NVL72, notamment après les graphes CUDA, les améliorations de routage et le nettoyage côté CPU

En pratique, la stack passe souvent de très approximativement « bas des teens MFU » avec une baseline non optimisée vers « haut des teens à bas des 20s MFU » après le full tuning du dispatcher et de la stack kernel.

Qwen3 235B sur GB200

Pour Qwen3 235B, l'ordre pratique est généralement :

  1. alltoall pour le premier démarrage
  2. DeepEP si vous voulez un chemin tuné familier
  3. HybridEP pour le meilleur résultat en régime permanent sur GB200

HybridEP est généralement modestement plus rapide que alltoall sur cette charge de travail et a souvent notablement plus de marge mémoire.

Qwen3-Next sur GB200

Cette famille est un bon rappel que les gains du dispatcher dépendent de la charge de travail :

  • en BF16, alltoall et HybridEP peuvent être proches
  • en FP8 ou dans les configurations limitées en mémoire, HybridEP tend à sembler mieux
  • la disposition du pipeline et les changements grouped-GEMM peuvent compter presque autant que le dispatcher lui-même

Paramètres de tuning

DeepEP

DeepEP est sélectionné en définissant moe_token_dispatcher_type="flex" et moe_flex_dispatcher_backend="deepep".

--moe-deepep-num-sms 20

Ajustez le nombre de SM alloué aux kernels de communication DeepEP (défaut 20). La valeur optimale dépend de la charge de travail et du degré EP.

HybridEP

HybridEP est sélectionné en définissant moe_token_dispatcher_type="flex" et moe_flex_dispatcher_backend="hybridep".

--moe-hybridep-num-sms 16

Ajustez le nombre de SM alloué à la communication HybridEP (défaut 16). Le harness de performance utilise 32 pour les charges de travail HybridEP. Explorez les valeurs entre 16 et 32 pour le matériel cible. Définissez NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN pour correspondre à la taille du domaine NVLink de le déploiement. S'il ne correspond pas à la topologie réelle, les performances et parfois la correction en souffriront.

Mode de routage

--moe-router-force-load-balancing

Pour le benchmarking de performance, le force-balance routing est la default plus sûre. Il surperforme généralement le dropless routing dans les benchmarks à grande échelle et rend les résultats plus comparables entre les backends du dispatcher.

Interactions clés

Fonctionnalité Interaction
Graphes CUDA Mieux couplés avec attn moe_router moe_preprocess sur MoE dropless
Chevauchement EP Aide quand le temps du dispatcher est encore visible après le tuning du backend
FP8 Augmente souvent l'importance relative de la communication et des frais de host
Affinité CPU Peut compter autant que le choix du dispatcher sur GB200 ou GB300
Disposition du pipeline Une mauvaise disposition PP ou VPP peut effacer les gains du dispatcher

Quand utiliser chacun

alltoall

  • premier démarrage de correction
  • configurations petit EP
  • débogage des régressions de communication

DeepEP

  • déploiements Hopper ou B200
  • l'EP cross-node est clairement visible dans les profiles
  • vous voulez une étape intermédiaire mature avant de tester HybridEP

HybridEP

  • systèmes GB200 ou GB300 NVL72
  • grands degrés EP
  • la marge mémoire compte en plus du throughput

Pièges

  1. Ne comparez pas les dispatchers sur des stacks différentes : conteneur, mode de routage, disposition PP et portée des graphes CUDA peuvent bouger le résultat autant que le dispatcher.

  2. HybridEP est sensible à la topologie : ce n'est pas une victoire universelle en dehors du matériel pour lequel il a été conçu.

  3. Les deux dispatchers ont besoin d'un tuning SM : les défauts moe_deepep_num_sms (20) et moe_hybridep_num_sms (16) sont des points de départ raisonnables mais rarement optimaux.

  4. Force-balance et dropless ne sont pas des baselines interchangeables : gardez le mode de routage fixe quand vous comparez les backends du dispatcher.

  5. La mémoire et le throughput peuvent se compenser différemment selon le modèle : les runs de style Qwen3 peuvent montrer un delta de vitesse plus petit que DSV3, mais justifier quand même HybridEP pour la marge mémoire.

Skills similaires