AccueilContact

RouteLLM - Économisez les coûts LLM sans compromettre la qualité !

Publié dans Intelligence Artificielle
12 juillet 2024
5 min read
RouteLLM - Économisez les coûts LLM sans compromettre la qualité !

RouteLLM

RouteLLM est un framework pour servir et évaluer les routeurs LLM. Il permet d’économiser les coûts LLM sans compromettre la qualité !

Nos principales fonctionnalités incluent :

  • Remplacement plug-and-play du client OpenAI (ou lancement d’un serveur compatible OpenAI) pour router des requêtes plus simples vers des modèles moins chers.
  • Des routeurs entraînés sont fournis en standard, que nous avons montré réduire les coûts jusqu’à 85% sur des benchmarks largement utilisés comme MT Bench tout en maintenant une performance GPT-4 de 95%.
  • Extension facile du framework pour inclure de nouveaux routeurs et comparer les performances des routeurs sur plusieurs benchmarks.

Installation

Depuis PyPI

$ pip install routellm

Depuis la source

$ git clone https://github.com/lm-sys/RouteLLM.git
$ cd RouteLLM
$ python setup.py install

Démarrage Rapide

Marche à suivre pour remplacer un client OpenAI existant pour router des requêtes entre LLMs au lieu d’utiliser un seul modèle :

  1. Tout d’abord, remplaçons notre client OpenAI en initialisant le contrôleur RouteLLM avec le routeur. Par défaut, RouteLLM utilisera la configuration la plus performante :
import os
from routellm.controller import Controller
os.environ["OPENAI_API_KEY"] = "sk-XXXXXX"
os.environ["ANYSCALE_API_KEY"] = "esecret_XXXXXX"
client = Controller(
routers=["mf"],
strong_model="gpt-4-1106-preview",
weak_model="anyscale/mistralai/Mixtral-8x7B-Instruct-v0.1",
)
  1. Chaque requête de routage a un seuil de coût qui contrôle le compromis entre coût et qualité. Nous devrions calibrer cela en fonction des types de requêtes que nous recevons pour maximiser les performances de routage. Par exemple, calibrons notre seuil pour des appels GPT-4 de 50% en utilisant des données de Chatbot Arena.

  2. Ensuite, mettons à jour le champ model lors de la génération des complétions pour spécifier le routeur et le seuil à utiliser pour chaque requête.

C’est tout ! Maintenant, les requêtes seront routées entre le modèle fort et le modèle faible en fonction de ce qui est requis, en économisant des coûts tout en maintenant une haute qualité de réponses.

Serveur & Démo

Au lieu d’utiliser le SDK Python, vous pouvez également lancer un serveur compatible OpenAI qui fonctionnera avec n’importe quel client OpenAI existant, en suivant des étapes similaires.

Une fois le serveur lancé, vous pouvez démarrer un chatbot de routage local pour voir comment les différents messages sont routés.

Support de Modèle

Dans les exemples ci-dessus, GPT-4 et Mixtral 8x7B sont utilisés comme paire de modèles, mais vous pouvez modifier cela en utilisant les arguments strong_model et weak_model.

Nous utilisons anyscale pour prendre en charge les complétions de chat à partir d’une large gamme de modèles open-source et fermés. En général, vous devez configurer une clé API et pointer vers le fournisseur avec le nom de modèle approprié. Alternativement, vous pouvez également utiliser n’importe quel endpoint compatible OpenAI en préfixant le nom du modèle avec anyscale et en définissant les drapeaux strong_model et weak_model.

Motivation

Les différents LLM varient largement en termes de coûts et de capacités, ce qui pose un dilemme lors de leur déploiement : router toutes les requêtes vers le modèle le plus performant conduit aux réponses de la plus haute qualité mais peut être très coûteux, tandis que router les requêtes vers des modèles plus petits peut économiser des coûts mais peut entraîner des réponses de moindre qualité.

Le routage LLM offre une solution à cela. Nous introduisons un routeur qui examine les requêtes et route les requêtes plus simples vers des modèles plus petits et moins chers, économisant ainsi des coûts tout en maintenant la qualité. Nous nous concentrons sur le routage entre 2 modèles : un modèle plus fort et plus cher et un modèle moins cher mais plus faible. Chaque requête est également associée à un seuil de coût qui détermine le compromis coût-qualité de cette requête - un seuil de coût plus élevé conduit à un coût plus faible mais peut entraîner des réponses de moindre qualité.

La recherche dans ce référentiel a été menée en 2024, et nous sommes reconnaissants pour leur aide et leur soutien.

Serveur

RouteLLM propose un serveur léger compatible OpenAI pour router les requêtes en fonction de différentes stratégies de routage :

  • routers spécifie la liste des routeurs disponibles pour le serveur. Par exemple, ici, le serveur est démarré avec un routeur disponible : mf (voir ci-dessous pour la liste des routeurs).
  • config_path spécifie le chemin du fichier de configuration pour les routeurs. Si non spécifié, le serveur utilisera par défaut notre configuration la plus performante (voir ci-dessous pour les détails).

Pour la plupart des cas d’utilisation, nous recommandons le routeur mf car nous l’avons évalué comme très performant et léger.

Lorsqu’une requête est faite au serveur, les clients spécifient le routeur et le seuil de coût à utiliser pour chaque requête en utilisant le champ model dans le format suivant. Par exemple, en utilisant un seuil de 0.5 spécifie que la requête doit être routée en utilisant le routeur mf avec un seuil de 0.5.

Évaluation

RouteLLM inclut également un cadre d’évaluation pour mesurer les performances de différentes stratégies de routage sur des benchmarks.

Pour évaluer un routeur sur un benchmark, vous pouvez utiliser la commande suivante :

  • routers spécifie la liste des routeurs à évaluer, par exemple mf et elo dans ce cas.
  • benchmark spécifie le benchmark spécifique sur lequel évaluer les routeurs. Nous prenons actuellement en charge : mt_bench, mmlu, et gsm8k.

Les résultats de l’évaluation seront imprimés dans la console. Un graphique de performance du routeur sera également généré dans le répertoire actuel (remplacez le chemin en utilisant --output_path). Pour éviter de recomputer les résultats, les résultats pour un routeur sur un benchmark donné sont mis en cache par défaut. Ce comportement peut être remplacé en utilisant le drapeau --overwrite_cache, qui prend une liste de routeurs pour écraser le cache.

Les résultats pour tous nos benchmarks ont été mis en cache. Pour MT Bench, nous utilisons les jugements précalculés pour la paire de modèles souhaitée. Pour MMLU et GSM8K, nous utilisons anyscale pour calculer les résultats pour la paire de modèles souhaitée - le code complet pour cela peut être trouvé dans les répertoires de benchmark si vous souhaitez évaluer une paire de modèles différente.

Par défaut, GPT-4 et Mixtral sont utilisés comme paire de modèles pour l’évaluation. Pour modifier la paire de modèles utilisée, définissez-les en utilisant les drapeaux strong_model et weak_model.

Routeurs

Prêt à l’emploi, RouteLLM prend en charge 4 routeurs entraînés sur la paire de modèles mf et elo.

La liste complète des routeurs :

  1. mf : Utilise un modèle de factorisation matricielle entraîné sur les données de préférence (recommandé).
  2. elo : Utilise un calcul Elo pondéré pour le routage, où chaque vote est pondéré en fonction de sa similarité avec la requête de l’utilisateur.
  3. bert : Utilise un classificateur BERT entraîné sur les données de préférence.
  4. llm : Utilise un classificateur basé sur LLM accordé sur les données de préférence.
  5. random : Routage aléatoire vers l’un ou l’autre modèle.

Bien que ces routeurs aient été entraînés sur la paire de modèles mf et elo, nous avons constaté qu’ils généralisent bien à d’autres paires de modèles forts et faibles également. Par conséquent, vous pouvez remplacer la paire de modèles utilisée pour le routage sans avoir à re-entraîner ces modèles !

Nous fournissons également des instructions détaillées sur la manière de former le classificateur basé sur LLM dans le lien suivant.

Pour plus de détails, consultez notre documentation.

Configuration

La configuration des routeurs est spécifiée soit dans l’argument config pour Controller ou en passant le chemin d’un fichier YAML en utilisant le drapeau --config_path. Il s’agit d’une correspondance de premier niveau du nom du routeur aux arguments de mot-clé utilisés pour l’initialisation du routeur.

Un exemple de configuration est fourni dans le fichier config.yaml - il fournit les configurations pour les routeurs qui ont été entraînés sur des données d’Arena augmentées en utilisant GPT-4 comme juge. Les modèles et les ensembles de données utilisés sont tous hébergés sur Hugging Face sous les organisations anyscale et elo.

Contribution

Nous accueillons les contributions ! N’hésitez pas à ouvrir une issue ou une pull request si vous avez des suggestions ou des améliorations.

Ajout d’un nouveau routeur

Pour ajouter un nouveau routeur à RouteLLM, implémentez la classe abstraite Router dans routers.py et ajoutez le nouveau routeur au dictionnaire ROUTERS. Ensuite, vous pouvez utiliser immédiatement le nouveau routeur dans le serveur ou le cadre d’évaluation.

Il n’y a qu’une seule méthode à implémenter : win_rate, qui prend la requête de l’utilisateur et renvoie le taux de victoire pour le modèle fort conditionné à cette requête donnée - si ce taux de victoire est supérieur au seuil de coût spécifié par l’utilisateur, alors la requête est routée vers le modèle fort. Sinon, elle est routée vers le modèle faible.

Ajout d’un nouveau benchmark

Pour ajouter un nouveau benchmark à RouteLLM, implémentez la classe abstraite Benchmark dans benchmarks.py et mettez à jour le module benchmarks pour initialiser correctement la nouvelle classe de benchmark. Idéalement, les résultats du benchmark devraient être précalculés pour éviter d’avoir à régénérer les résultats pour chaque exécution d’évaluation — consultez les benchmarks existants pour des exemples sur la façon de le faire.

Citation

Le code de ce référentiel est basé sur la recherche de l’[année]. Veuillez citer si vous trouvez le référentiel utile.

Source de l’article


Tags

#IA#Routeurs#Optimisation

Share

Article précédent
Récits DeFiLlama Captivants

Articles similaires

Distillation de System 2
11 juillet 2024
1 min
© 2024, All Rights Reserved.

Liens Rapides

Partenariats et opportunités publicitairesContactez nous

Réseaux Sociaux