MobileLLM : optimisation de modèles de langage de moins d’un milliard de paramètres pour des cas d’usage sur appareil
(github.com/facebookresearch)- Le dépôt MobileLLM fournit le code d’entraînement de l’article ICML 2024 « MobileLLM: Optimizing Sub-billion Parameter Language Models for On-Device Use Cases » et traite de conceptions visant à améliorer la qualité de modèles de langage de moins d’un milliard de paramètres
- La conception du modèle intègre SwiGLU, une structure profonde et fine, le partage des embeddings et la grouped-query attention pour constituer MobileLLM
- MobileLLM-125M/350M a obtenu une hausse de précision de 2,7 %/4,3 % par rapport aux modèles SoTA 125M/350M existants sur des tâches de raisonnement de bon sens en zero-shot, et la version mise à jour montre aussi des résultats SoTA en 600M/1B/1.5B
- Le code d’entraînement requiert Python 3.9 et PyTorch 2.0 ou supérieur, et
pretrain.shdémarre avectorchrunsur un nœud 1x8 GPU ; si l’on augmente le nombre de nœuds ou la taille de batch, il faut augmenter le taux d’apprentissage de façon linéaire - Pour un entraînement sur 1T de tokens, le coût est d’environ 3 jours pour 125M, 6 jours pour 350M, 8 jours pour 600M, 12 jours pour 1B et 18 jours pour 1.5B sur 32 GPU NVIDIA A100 80G
Objectif de MobileLLM et périmètre de publication
- MobileLLM est un dépôt contenant le code d’entraînement pour optimiser des modèles de langage de moins d’un milliard de paramètres pour des cas d’usage sur appareil
- L’article de référence est MobileLLM: Optimizing Sub-billion Parameter Language Models for On-Device Use Cases, publié à l’ICML 2024
- L’objectif principal est de prendre en compte de manière globale plusieurs éléments de conception afin de créer des LLM de haute qualité avec moins d’un milliard de paramètres
Éléments de conception du modèle
- MobileLLM intègre les éléments de conception suivants
- Fonction d’activation SwiGLU
- Architecture profonde et fine
-
Partage des embeddings
- grouped-query attention
- La version mise à jour indique que cette philosophie de conception s’étend aussi à des modèles plus grands, avec des résultats SoTA sur MobileLLM-600M/1B/1.5B
Publication et annonces sur les modèles suivants
- Le 30 octobre 2024, les modèles MobileLLM ont été publiés sur HuggingFace
- En septembre 2025, le travail de suivi MobileLLM-R1 a été publié
- Avec environ 2T de tokens de préentraînement et moins de 5T de tokens au total, il égale ou dépasse les résultats de Qwen3-0.6B entraîné sur 36T de tokens sur MATH, GSM8K, MMLU et LiveCodeBench
- Le code, les modèles, les données et la recette d’entraînement sont publiés
- Une collection HuggingFace est proposée
- En novembre 2025, MobileLLM-R1.5 a été publié
- MobileLLM-R1.5-950M surpasse DeepSeek-R1-Distill-Qwen-1.5B sur tous les benchmarks de mathématiques et de code évalués
- Le nombre de paramètres est plus faible, avec 0.95B contre 1.5B
- En janvier 2026, MobileLLM-R1 a été accepté à l’ICLR 2026
Exécution et configuration de l’entraînement
- Les prérequis sont Python 3.9, PyTorch 2.0 ou supérieur et
pip install -r requirement.txt - Le prétraitement des données consiste à répartir un jeu de données tokenisé, ou à tokeniser son propre jeu de données puis à le distribuer selon le nombre total de nœuds d’entraînement
- Chaque nœud est composé de 1x8 GPU
- La structure des données place les fichiers
xxx.jsonlsousbasepath/1,basepath/2, ...,basepath/#nodes - Chaque ligne
jsonlest une paire clé-valeur de données tokenisées sous la forme{"token_ids": [1,2,3,4,...]} - Le code d’entraînement est compatible avec la méthode de prétraitement de données de LLM360/amber-data-prep
pretrain.shest un script qui lance l’entraînement avectorchrundans une configuration 1x8 nœud- Il est possible d’adapter
--nnodeset d’autres paramètres pour des configurations multi-nœuds comme Slurm ou TorchX - Le taux d’apprentissage du script est calibré pour 1x8 nœud et une taille de batch de 32
- Si l’on augmente le nombre de nœuds ou la taille de batch, il faut augmenter linéairement le taux d’apprentissage
- Il est possible d’adapter
- La procédure d’exécution consiste à définir
--train_data_local_pathdanspretrain.shvers les données prétraitées, à définir--input_model_filenamevers./configs/{model_size}/, puis à exécuterbash pretrain.sh - L’évaluation Wiki s’exécute en téléchargeant le modèle, en mettant à jour le chemin du checkpoint dans
eval.sh, puis en lançantbash eval.sh
Coût d’entraînement
- Pour entraîner MobileLLM sur 1T de tokens, le temps nécessaire sur 32 GPU NVIDIA A100 80G est le suivant
- 125M : environ 3 jours
- 350M : environ 6 jours
- 600M : environ 8 jours
- 1B : environ 12 jours
- 1.5B : environ 18 jours
Résultats en raisonnement de bon sens zero-shot
- MobileLLM-125M obtient 46.3 en moyenne sur arc_easy, arc_challenge, boolq, piqa, siqa, hellaswag, obqa et winogrande
- OPT-125M obtient 42.6, GPT-neo-125M 42.9 et Pythia-160M 42.5
- MobileLLM-LS-125M obtient 47.0 en moyenne
- MobileLLM-350M obtient 51.3 en moyenne
- OPT-350M obtient 43.9 et Pythia-410M 46.6
- MobileLLM-LS-350M obtient 52.1 en moyenne
- MobileLLM-600M obtient 54.3 en moyenne
- Qwen1.5-500M obtient 48.8, BLOOM-560M 44.2 et MobiLlama-800M 50.7
- MobileLLM-1B obtient 57.3 en moyenne
- Pythia-1B obtient 48.7, MobiLlama-1B 55.2, Falcon-1B 56.3, BLOOM-1.1B 46.9 et TinyLlama-1.1B 54.2
- MobileLLM-1.5B obtient 59.4 en moyenne
- GPT-neo-1.3B obtient 50.6, OPT-1.3B 52.3, BLOOM-1.7B 49.6 et Qwen1.5-1.8B 56.5
- GPT-neo-2.7B obtient 52.8, OPT-2.7B 55.1, Pythia-2.8B 55.8 et BLOOM-3B 52.3
Projets liés et licence
- Le code repose en partie sur le dépôt HuggingFace Transformers, qui utilise la licence Apache
- Les projets liés suivants sont mentionnés
- Comme étape suivante, MobileLLM-R1 et les modèles MobileLLM-R1.5 sont présentés
- MobileLLM utilise actuellement la licence FAIR NC
1 commentaires
Avis sur Hacker News
Les petits modèles se sont un peu améliorés, mais ils semblent encore insuffisants pour les mêmes usages que les modèles en ligne. Cela dit, le progrès incrémental en soi est appréciable.
Le modèle à 1,5 milliard de paramètres ressemble à un saut assez important, et il bat aussi les modèles plus grands avec une large marge. Je ne sais pas pourquoi ils ne l’ont pas fait plus grand. Un modèle plus efficace qui tienne sur du matériel du niveau d’un Raspberry Pi pourrait changer la donne. De mémoire, TinyLlama 7B tourne tout juste
Pour cet usage, comparer un petit modèle à un modèle cloud n’est pas vraiment équitable. Même une légère hausse de précision d’un petit modèle peut être significative et se traduire directement en revenus
Même si un modèle 7B “tourne bien” sur Raspberry Pi, personnellement je le trouve un peu gros à télécharger et exécuter dans une interface web. En revanche, un bon modèle 125M peut tourner dans une page web, et le temps de téléchargement comme le coût en bande passante vers un navigateur local restent raisonnables
Faut-il vraiment que ce soit uniquement sur des appareils mobiles ? C’est un cas d’usage de niche, mais si cela ne consomme pas trop de ressources, ça pourrait servir dans les jeux pour rendre les dialogues des PNJ plus intéressants.
Mieux encore, ce serait bien de pouvoir les ajuster d’une manière ou d’une autre afin que les dialogues influencent le comportement ou les actions des PNJ
On peut imaginer entraîner un LLM sur les données du jeu pour que les PNJ décrivent le monde réel du jeu. Mais je ne sais pas à partir de quelle échelle cela deviendrait moins cher que de simplement faire écrire les répliques par des humains. À l’échelle d’Ubisoft, c’est peut-être possible. À ma connaissance, Ubisoft a aussi exploré l’écriture par IA, mais surtout pour des usages très répétitifs et quasiment assimilables à du bruit, comme les cris pendant les combats
Quelles apps permettent aujourd’hui de faire tourner ce genre de modèle sur iPhone ? Je ne connais que MLC, mais il n’y a que trois vieux modèles dedans
https://llm.mlc.ai/docs/deploy/android.html
Je me demande jusqu’où on peut pousser l’approche consistant à faire des modèles plus profonds et plus étroits. À un moment donné, si tout le FFN tient dans le cache L2, j’imagine qu’il pourrait y avoir une zone où les performances bondissent nettement
Dans ce cas, il devrait exister une limite, pour les petits réseaux, au-delà de laquelle cette approche fonctionne. Sinon, les résultats se contredisent. Ou bien cela pourrait vouloir dire que ces nouveaux modèles peuvent encore être largement améliorés
Je rate peut-être quelque chose, mais est-ce que quelque chose comme la distillation de connaissances n’aiderait pas ici ?
Lien profond HTML vers la section pertinente : https://ar5iv.labs.arxiv.org/html/2402.14905#S3.SS5
“Jusqu’à présent, nous avons entraîné les petits modèles depuis zéro en utilisant le token suivant comme étiquette dure. Nous avons aussi exploré la distillation de connaissances (KD)... Malheureusement, la KD augmente le temps d’entraînement (2,6 à 3,2 fois plus lent) et a montré une précision similaire ou inférieure à l’entraînement basé sur les étiquettes (voir l’annexe pour plus de détails).”
En ce moment, j’ai réellement besoin d’une reconnaissance vocale de type wake-word sur appareil. Quel est le modèle au WER le plus faible qui puisse tourner sur un Raspberry Pi 4B ? Je regarde openWakeWord pour un système d’inventaire DIY
Il semble que, pour les petits modèles, la plus forte réduction de taille vienne du partage des embeddings / tying des poids entre la tête linéaire et les embeddings de tokens. Je me demande s’il y a des recherches en cours pour réduire encore davantage à ce niveau-là.
Malheureusement, tout ce que j’ai trouvé à ce sujet se résume à dire que les grands modèles tirent bénéfice d’une couche séparée. Cela dit, c’est quelque chose que j’ai vu quelque part sur Discord, donc je n’ai pas d’article à lire, et mon intuition personnelle est que cela devrait aussi fonctionner pour les grands modèles. Après tout, GPT-3 n’était qu’un GPT-2 agrandi.
Dans mes expériences personnelles, quand je donnais au modèle une tâche plus difficile, il apprenait mieux. Les poids liés pourraient faire partie de ces contraintes, tout comme la prédiction multi-token, et on peut aussi voir bitnet de cette manière. Le dropout aussi.
Et si, sur desktop, ce n’était pas de l’IA générative, mais simplement de l’IA desktop ? J’aimerais qu’elle organise tous mes fichiers, e-mails et notes, et me permette de rechercher des informations dans mes données.
Intéressant. Peut-on aussi utiliser ça pour entraîner un modèle pour PC Windows ? Je n’ai pas beaucoup de RAM.
Cela dit, l’objectif final sera très probablement de télécharger ce genre de modèle, ou de payer pour en obtenir un fine-tuné, puis de l’utiliser via une puce neuronale optimisée.
À ce stade, la question est plutôt de savoir quand cela arrivera. Les dernières certifications Windows exigent déjà un certain type de puce neuronale, et mon Google Pixel 8 Pro peut aussi héberger un petit modèle. Le Pixel n’est pas un téléphone bon marché, mais un coprocesseur coûtera bien moins cher qu’un gros GPU.
C’est intéressant, mais en dehors d’une meilleure autocomplétion, je me demande à quoi ça pourrait servir.
J’aime bien l’approche qu’Apple semble adopter. Les tâches du quotidien sont traitées par de petits modèles fine-tunés, et ce qu’ils ne peuvent pas gérer avec confiance est transmis à un grand modèle hors de l’appareil. On pourrait constituer un jeu d’entraînement incluant des exemples où il faut produire une réponse de faible confiance, puis ajouter une sortie correspondant en pratique à une « demande d’aide », afin que le modèle apprenne à choisir cette option. Avec de petits modèles, on pourrait en exécuter plusieurs en parallèle, et un autre modèle pourrait router la requête vers l’expert approprié.
En gros, toutes les tâches qui demandent une action plutôt que de la connaissance. Si je dis « préviens ma femme que je serai en retard », il interagirait avec un service d’une façon magique déjà configurée pour s’en occuper.
Siri gère assez bien la domotique même sans Internet, mais l’ancien Google Assistant et Alexa ne le faisaient pas du tout, et je ne crois pas qu’ils aient jamais pu le faire hors ligne. Cela permettrait d’avoir un assistant local-first qui fonctionne bien.
Il peut transmettre les demandes utilisateur en langage naturel aux applications concernées et coordonner ces applications. Les demandes qui dépassent les capacités de l’appareil peuvent être envoyées à un modèle cloud. C’est puissant, car cela peut changer la manière dont on interagit avec son appareil.
L’assistant IA que je veux devrait 1) comprendre l’anglais et ma langue maternelle, 2) savoir qu’il s’exécute sur Android ou KDE/Linux et comprendre des commandes comme « ouvre la section Applications des paramètres Android », « lis la page ouverte dans le navigateur », « lis le texte de la popup actuellement ouverte », tout en étant intégré au système d’exploitation via des API publiques. Les grandes entreprises d’IA pourraient se faire concurrence en vendant de meilleurs assistants, en particulier aux utilisateurs multilingues.
3) Le modèle doit être petit et n’a pas besoin de connaître la géographie, l’histoire ou des groupes de musique. Il suffit qu’il ait la possibilité de transmettre les tâches sur lesquelles l’utilisateur l’interroge à un moteur de recherche ou à un LLM en ligne.