Mirage Persistent Kernel : compiler l'inférence LLM en un seul mégakernel
Mirage Persistent Kernel : compilation de LLM dans un MegaKernel. Quickstart Mirage vous permet de compiler des LLM du zoo modèle Hugging Face dans un méga-noyau en utilisant seulement quelques dizaines de lignes de Python, principalement pour définir les entrées et sorties du noyau.
En bref
- De quoi s’agit-il ?
- MPK est un compilateur et un runtime qui fusionne l'inférence LLM multi-GPU en un seul kernel. Installation depuis les sources, API PersistentKernel et articles associés.
- À qui s’adresse-t-il ?
- MPK est un projet de recherche actif. Il compile l'inférence LLM en un mégakernel et rapporte d'importantes réductions de latence, mais ces affirmations ne sont pas vérifiées indépendamment ici.
- Puis-je l’utiliser commercialement ?
- Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 4 jours.
- En quel langage est-il écrit ?
- Principalement Cuda, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 14 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
Ce qu'est MPK
MPK est la branche par défaut du dépôt mirage-project/mirage. C'est un compilateur et un système d'exécution qui transforme automatiquement l'inférence LLM multi-GPU en un seul mégakernel : un kernel GPU fusionné qui effectue tous les calculs et communications en un seul lancement de kernel. Le README rapporte des réductions de latence de 1,2x à 6,7x pour l'inférence LLM, avec un effort de développement minimal. Ce chiffre est l'affirmation du projet ; cet article ne le vérifie pas indépendamment. Le dépôt est écrit en Cuda et compte actuellement 2407 étoiles et 227 problèmes ouverts.
Installation depuis les sources
Le README ne décrit que l'installation depuis les sources. Les étapes sont : git clone --recursive --branch mpk https://www.github.com/mirage-project/mirage, puis cd mirage, pip install -e . -v, et export MIRAGE_HOME=$(pwd). Au 19 juin 2025, les wheels binaires précompilés ne sont pas encore disponibles ; le projet indique qu'il y travaille et mettra à jour les instructions quand ils seront prêts. Aucune autre méthode d'installation n'est documentée.
Démarrage rapide avec une démo Qwen3
Un script de démonstration compile le modèle Qwen3-8B du zoo de modèles Hugging Face en un mégakernel. La commande de base est python demo/qwen3/demo.py, qui s'exécute avec les kernels natifs Triton et FlashInfer. Pour compiler et exécuter le mégakernel avec MPK, ajoutez --use-mirage. L'ajout de --profiling visualise la chronologie d'exécution de chaque tâche. Le README pointe vers demo/qwen3/demo.py dans la branche mpk, mais nous ne l'avons pas exécuté indépendamment.
API PersistentKernel et gestion des tenseurs
L'API principale est mi.PersistentKernel. Elle prend world_size et mpi_rank pour le nombre de GPU et le rang actuel, plus num_workers, num_local_schedulers et num_remote_schedulers. Ceux-ci doivent satisfaire la condition que num_workers plus (num_local_schedulers + num_remote_schedulers) divisé par 4 est égal au nombre de SM physiques. Deux méta-tenseurs sont requis : step, un tableau d'entiers suivant l'étape de décodage et incrémenté après chaque itération, et tokens, de forme [num_requests, seq_length]. Attachez un tenseur PyTorch existant avec mpk.attach_input(torch_tensor=..., name=...). Allouez un nouveau tenseur avec mpk.new_tensor(dims=..., dtype=..., name=..., io_category=...), où io_category est soit 'cuda_tensor' soit 'nvshmem_tensor' pour l'accès GPU distant.
Définir le graphe de calcul et compiler
Les opérations fusionnées sont enchaînées pour construire le graphe. L'exemple donné est mpk.rmsnorm_linear_layer, qui fusionne une couche RMSNorm et une couche linéaire. Il prend input, weight_norm, weight_linear, output, grid_dim et block_dim. grid_dim et block_dim spécifient le nombre de blocs de threads et le nombre de threads par bloc. Le README suggère que le nombre total de blocs de threads devrait être un multiple du nombre de workers pour minimiser la latence. Une fois le graphe défini, mpk.compile() construit le mégakernel, et l'appel mpk() l'exécute.
Documentation, communauté et contexte académique
La page d'accueil du projet est mirage-project.readthedocs.io. Le README contient des liens vers un canal Slack, une feuille de route dans le problème 325 et un article de blog. Deux articles OSDI sont listés : 'Mirage: A Multi-Level Superoptimizer for Tensor Programs' à OSDI 2025, et 'MPK: A Compiler and Runtime for Mega-Kernelizing Tensor Programs' à OSDI 2026, avec un lien arXiv. Un troisième article sur les tests d'identité pour les circuits avec portes d'exponentiation est également cité. Le dépôt est sous licence Apache 2.0, qui accorde des licences de droit d'auteur et de brevet pour l'utilisation et la redistribution, mais ne fournit aucune garantie ni support.
Ce que le README ne couvre pas
Le README ne spécifie pas les architectures GPU prises en charge, la capacité de calcul minimale ou les performances sur du matériel spécifique. Il ne dit pas non plus si les chiffres de réduction de latence ont été mesurés sur un modèle ou un cluster particulier. Le projet compte 227 problèmes ouverts au moment de la rédaction, mais aucun statut de maintenance n'est donné au-delà. Le texte de licence accorde des droits d'utilisation, de reproduction et de distribution de l'œuvre, mais ne contient aucune clause de garantie ou de responsabilité ; les utilisateurs doivent lire la licence Apache 2.0 complète pour plus de détails.
Conclusion éditoriale
MPK est un projet de recherche actif. Il compile l'inférence LLM en un mégakernel et rapporte d'importantes réductions de latence, mais ces affirmations ne sont pas vérifiées indépendamment ici. L'installation se fait toujours depuis les sources, et l'API est démontrée avec un exemple Qwen3.
Notes de la communauté