Optimiser les grandes modèles de langage pour réduire les blocages causés par de longs prompts et améliorer la réactivité des systèmes.
Chez TNG, l’hébergement de plusieurs grands modèles de langage (LLM) sur un cluster de 24 GPU H100 est un défi quotidien. Avec plus de 100 millions de tokens consommés et 10 millions générés chaque jour, l’optimisation du traitement des requêtes est cruciale. Une stratégie mal ajustée peut ralentir considérablement le fonctionnement des modèles, surtout avec des prompts longs qui bloquent d’autres requêtes.
Les limites des prompts longs sur la performance des LLM
Un problème majeur dans l’exécution des LLM est la gestion des étapes prefill et decode. Lorsqu’une requête avec un prompt long est programmée dans la phase de pré-remplissage, le modèle doit traiter l’intégralité du prompt, saturant ainsi l’utilisation du GPU. Cette saturation empêche le traitement des requêtes suivantes, créant des goulots d’étranglement sévères.
Solutions possibles : Préremplissages en parallèle
Une solution pour contourner ce problème est le préremplissage parallèle. Toutefois, même si cela réduit les temps d’attente pour les requêtes courtes, en cas de requêtes longues successives, le système reste encombré. Cette approche a été améliorée dans les dernières versions de vLLM : un préremplissage parallèle est possible avec une limitation du nombre de requêtes longues traitées simultanément, ce qui permet aux requêtes courtes d’utiliser une « voie rapide ».
La limitation des prompts longs dans les LLM réduit les blocages et améliore la réactivité, idéale pour améliorer l’expérience utilisateur dans des charges de travail complexes.
Inconvénients du préremplissage parallèle
Bien que le préremplissage parallèle semble avantageux, il présente des faiblesses fondamentales. La plus notable est que le processus de génération de tokens est ralenti lorsqu’un préremplissage et un décodeur s’exécutent simultanément sur le même GPU. Cela signifie qu’une seule requête longue peut affecter les requêtes déjà en phase de décodage.
« Une requête avec un long prompt suffit pour ralentir toutes les requêtes planifiées précédemment en phases de décodage. »
Benjamin Merkel, TNG
La stratégie de TNG pour les modèles LLM gourmands
Pénaliser les longs prompts ou avoir un serveur dédié pour ceux-ci sont deux options considérées par TNG. Pourtant, ces solutions ne traitent pas la cause fondamentale de ralentissement, surtout lorsque la demande est élevée. TNG a même mis en place une API pour les requêtes de lot, qui sont planifiées avec une priorité très basse, pour mieux gérer les charges.
En fin de compte, aucune solution n’est parfaite. Savoir quand et comment répartir les ressources de calcul reste une tâche délicate nécessitant un ajustement constant. L’important est de maintenir un équilibre entre les performances et la réactivité du système pour satisfaire les utilisateurs et éviter les temps d’attente prolongés.