Introduction : Ce qu'il en est des frameworks de chat « simples »
Le problème avec les outils de développement qui se disent « simples », c'est qu'ils ne le sont généralement pas. Ils sont simples de la même manière que l'embarquement dans un avion est « simple ». Des files d'attente, des zones et une carte d'embarquement que vous ne trouvez pas parce que l'application vous a déconnecté à la porte d'embarquement. FastChat, le framework de chat open source que les gens ajoutent aux LLM, est souvent qualifié de simple. En pratique ? C'est simple si vous savez exactement ce que vous faites. Si ce n'est pas le cas, c'est un enchevêtrement de ports, de modèles et de calculs GPU qui ressemble à une audition pour un rebondissement de l'intrigue de Christopher Nolan.
Ce guide est mon point de vue clair sur la façon d'utiliser FastChat sans transformer votre week-end en retraite de débogage. Nous verrons comment utiliser FastChat localement, comment servir des modèles, comment brancher un point de terminaison compatible avec OpenAI et comment faire fonctionner une interface utilisateur qui ne s'effondre pas au premier contact avec la réalité. Je soulignerai ce qui est fragile, ce qui est rapide et ce qui est présenté comme rapide. (Ce sont souvent trois choses différentes.)
Qu'est-ce que FastChat, en réalité ?
FastChat est un système open source pour servir et discuter avec de grands modèles de langage. Considérez-le comme un « clone de l'API OpenAI », mais vous apportez vos propres modèles. Il comprend :
- Un contrôleur (l'agent de la circulation),
- Un ou plusieurs workers de modèle (les personnes qui font réellement le travail),
- Une couche d'API REST compatible avec OpenAI,
- Une interface utilisateur web qui est mieux que rien et pire que tout ce qui est conçu à cet effet.
Si vous avez déjà exécuté un LLM local avec une seule ligne de code et que vous vous êtes dit : il n'y a aucune chance que ce soit prêt pour la production, vous avez raison. FastChat est l'opposé : il veut être quasi-production. Vous câblez les composants, plus comme des LEGO Technic que des LEGO Duplo. L'avantage est la flexibilité. Le coût est de savoir ce que vous faites.
Comment utiliser FastChat : La version courte
- Installez FastChat et ses dépendances (Python, CUDA si la vitesse vous importe, les poids du modèle).
- Démarrez au moins un worker de modèle et pointez-le vers le contrôleur.
- (Facultatif mais utile) Démarrez le serveur d'API compatible avec OpenAI.
- (Facultatif mais salvateur) Démarrez l'interface utilisateur web.
- Envoyez des requêtes via l'API de style OpenAI ou l'interface utilisateur intégrée. Itérez jusqu'à ce que vous arrêtiez de jurer.
C'est la boucle principale. Le reste consiste à faire cela sans faire frire votre GPU ou votre patience.
Configuration : Les parties ennuyeuses qui vous font gagner des heures plus tard
- Python : Utilisez un environnement virtuel que vous n'empoisonnerez pas. FastChat est pointilleux sur les versions. Les logiciels pointilleux ne s'excusent pas.
- GPU : Si vous avez du matériel NVIDIA, installez une boîte à outils CUDA qui correspond réellement à vos pilotes. Si vous n'en avez pas, vous fonctionnerez sur le CPU, ce qui revient à conduire une mini-fourgonnette en haut de Pike's Peak : c'est possible, plus lent que vous ne le pensez, et vous vous demanderez pourquoi vous avez essayé.
- Modèles : FastChat n'est pas livré avec des modèles. Vous le pointez vers des poids de modèle : les variantes de Llama, Mistral, Qwen, etc. Vous pouvez également exécuter des modèles quantifiés si votre VRAM GPU est plus « MacBook » que « centre de données ».
Installation de base : Rester propre
- Créez un nouvel environnement venv Python.
- pip install fastchat. Si vous avez besoin de PyTorch compatible avec CUDA, installez-le d'abord. Si vous ne savez pas si vous en avez besoin, c'est probablement le cas.
- Vérifiez que torch voit votre GPU : si ce n'est pas le cas, corrigez cela avant de blâmer FastChat. Blâmer les frameworks pour les pilotes manquants, c'est la version devops qui consiste à blâmer le thermostat pour l'hiver.
Démarrez le contrôleur : La tour de contrôle aérien
Exécutez le contrôleur. Il assure le suivi des workers de modèle et achemine les requêtes. Sans lui, rien ne parle à rien. Considérez-le comme un DNS pour votre ferme d'inférence. Ennuyeux, essentiel, invisible quand ça marche.
Démarrez un worker de modèle : Là où la magie opère réellement
- Choisissez un modèle que vous pouvez vous permettre en VRAM. Un modèle de 7B paramètres en FP16 peut encore détruire un GPU modeste. Essayez la quantification 4 bits ou 8 bits si vous êtes limité.
- Démarrez un worker, pointez-le vers le contrôleur et définissez le chemin du modèle. S'il ne parvient pas à se charger, c'est généralement parce que la précision du modèle ne correspond pas ou que le tokenizer est mal assorti. Lisez les journaux. Ils sont directs comme le sont les chirurgiens.
API compatible avec OpenAI : La partie utile
FastChat expose une API de style OpenAI. Cela signifie que vos scripts et outils existants qui s'attendent à des points de terminaison OpenAI peuvent, en théorie, simplement fonctionner. En pratique, vous ajusterez les URL de base et surveillerez les fonctionnalités que le modèle ne peut pas faire (appel de fonction, entrées d'image) à moins que votre worker ne les prenne en charge. Mais la forme de la chose (le JSON, les points de terminaison chat/complétions) s'aligne. C'est la différence entre un projet de week-end et quelque chose que vous pouvez câbler dans un service.
Interface utilisateur web : Parce que parfois, vous voulez cliquer
L'interface utilisateur intégrée est parfaite pour les tests. Ce n'est pas un produit, c'est une fenêtre. Si vous voulez seulement une console de développement pour votre cerveau en boîte, c'est suffisant. Si vous voulez des espaces de travail, des threads, des entrées multimodales ou des fonctionnalités de qualité de vie bien pensées, vous finirez quand même par écrire votre propre wrapper ou par utiliser un client qui a déjà compris les cas extrêmes.
Comment utiliser FastChat pour le développement local
- Lancez le contrôleur et un worker dans des terminaux séparés. Ne les enterrez pas dans tmux tant que vous ne leur faites pas confiance.
- Utilisez curl ou un petit script Python pour atteindre le point de terminaison compatible avec OpenAI : envoyez une invite de test courte et non ambiguë.
- Réglez les paramètres de génération : température, top_p, max_tokens. Commencez de manière conservatrice. Les gens sur-règlent le caractère aléatoire, puis se plaignent des hallucinations comme si le modèle s'était réveillé malicieux.
- Vérifiez que le comportement de tokenisation correspond à vos attentes. Si vous échangez fréquemment des modèles, vous trouverez des cas extrêmes. Ce n'est pas la faute de FastChat. C'est « Les LLM sont bizarres ».
Comment utiliser FastChat pour le prototypage en équipe
- Exécutez le contrôleur sur un hôte stable.
- Exécutez plusieurs workers avec le même modèle pour simuler un pool, ou mélangez les modèles par capacité.
- Exposez le point de terminaison compatible avec OpenAI en interne. Donnez à votre équipe une seule URL et une clé API.
- Ajoutez la journalisation. Ce n'est pas une idée nouvelle, mais le nombre d'équipes qui fonctionnent à l'aveugle ferait rougir un bookmaker de Vegas. Vous avez besoin d'invites et de réponses pour le débogage ; expurger les éléments sensibles si vous le devez.
Performance : Ce que signifie « rapide » dépend de vous
FastChat vous donne assez de corde pour être rapide, ou pour vous pendre avec des configurations trop ambitieuses. Contrôles de la réalité :
- VRAM : Si vous n'en avez pas assez, quantifiez. Si vous n'en avez toujours pas assez, utilisez des modèles plus petits. Aucun framework ne corrige la physique.
- Taille du lot : Bon pour le débit, souvent mauvais pour la latence. Choisissez-en un. Si vous avez besoin des deux, vous avez besoin de plus de workers.
- Cache KV : Réutilisez-le si votre worker le prend en charge. Sinon, vous payez pour un contexte que vous avez déjà payé.
- Échantillonnage de jetons : Les schémas de décodage sophistiqués obtiennent des rendements décroissants une fois que la qualité de votre modèle de base est le facteur limitant.
Sécurité : Ce n'est pas un jouet
Si vous mettez FastChat sur un serveur où d'autres humains peuvent le toucher :
- Ajoutez l'authentification. Même une clé API brute est préférable à « l'espoir ».
- Limitez le débit. Votre futur moi vous remerciera lorsqu'un script deviendra récursif à 2 heures du matin.
- Divisez le trafic entre les modèles publics et privés si vous mélangez des poids sous licence avec des poids ouverts. Les avocats aiment l'ambiguïté ; ne les nourrissez pas.
Comment utiliser FastChat avec de vrais outils
- Notebooks : Pointez votre client OpenAI vers l'URL de base de FastChat et c'est parti. C'est le chemin le moins ennuyeux pour les scientifiques des données.
- CLI : Gardez un petit script à portée de main pour les tests de fumée. Si vous n'obtenez pas de réponse sensée en 10 secondes, arrêtez-vous et corrigez le pipeline.
- Applications web : Traitez FastChat comme un microservice interne. Contrôles de santé, nouvelles tentatives, délais d'attente. Vous n'avez pas besoin d'un livre pour faire ça, vous avez besoin de discipline.
Choisir des modèles : La partie sur laquelle tout le monde se dispute
La façon d'utiliser FastChat de manière responsable commence par la sélection du modèle. Voici quelques heuristiques rapides :
- Chat court avec des réponses claires : Les petits modèles réglés sur les instructions font souvent mieux que leur poids.
- Invites à forte teneur en code : Utilisez des modèles qui se sont réellement entraînés sur du code avec des licences permissives. « Assez proche » ne l'est pas.
- Contexte long : Si vous avez besoin de plus de 32 000 jetons, planifiez d'abord votre matériel. Ensuite, baissez vos attentes.
- Multimodal : La compatibilité de FastChat varie. Si vous avez besoin d'images ou d'audio, choisissez un worker et un modèle qui le prennent explicitement en charge, ou ne faites pas semblant.
Le piège de la compatibilité OpenAI
Le bon côté d'une API compatible avec OpenAI est que vous pouvez échanger des back-ends. Le mauvais côté est que les gens commencent à traiter tous les modèles comme s'ils étaient les mêmes. Ils ne le sont pas. Un point de terminaison qui semble identique peut se comporter de manière très différente d'un modèle à l'autre : raisonnement, verbosité, filtres de sécurité, toute la personnalité. Votre application ne s'adaptera pas comme par magie simplement parce que le schéma JSON correspond. Testez avec les modèles réels que vous allez exécuter. Puis testez à nouveau après avoir changé quoi que ce soit.
Observabilité : Vous ne pouvez pas réparer ce que vous ne pouvez pas voir
- Enregistrez les invites, les paramètres et les latences.
- Suivez le nombre de jetons et rejetez les invites qui dépassent votre budget.
- Conservez des tableaux de bord par modèle. Oui, c'est beaucoup pour un « serveur de chat ». C'est aussi la différence entre la stabilité et les vibrations.
Modes de défaillance : Où FastChat contre-attaque
- Le worker meurt sous OOM : Vous avez deviné un peu trop haut sur la précision. Baissez-la ou procurez-vous un GPU avec plus de VRAM : aucune sorcellerie ne permet de faire entrer FP16 13B dans 8 Go de manière fiable.
- Le contrôleur perd la trace des workers : Hoquet de réseau. Ajoutez des nouvelles tentatives et ne déployez pas tout sur le même Wi-Fi bancal comme si vous étiez à une LAN party dans un café.
- Pics de latence désagréables : Votre lot est trop ambitieux ou votre CPU étrangle la tokenisation. Faites un profil avant de théoriser.
Comment utiliser FastChat pour le RAG sans perdre une semaine
Les gens continuent de boulonner FastChat sur des pipelines de récupération et d'agir surpris lorsque le modèle improvise au lieu de citer. Conseils :
- Faites la récupération ailleurs proprement (BD vectorielle, intégrations) et nourrissez le modèle avec un contexte court et structuré.
- Gardez les invites disciplinées. « Répondre avec des citations » n'est pas un sort, c'est une suggestion. Si vous avez besoin de citations, appliquez une structure en post-traitement ou utilisez un modèle qui a été entraîné à se comporter.
- Mettez en cache les réponses aux requêtes répétitives. La plupart des bases de connaissances « dynamiques » sont à 80 % les mêmes six questions sous différents angles.
Coût : Le temps est la partie coûteuse
Exécuter FastChat localement est bon marché sur le papier et coûteux en attention. Si votre objectif est d'apprendre, c'est génial. Si votre objectif est d'expédier, réfléchissez à l'endroit où va votre temps : l'emballage, les mises à niveau, la surveillance, les solutions de repli. Il n'y a pas de honte à utiliser un service géré si le travail sur lequel vous êtes réellement jugé est autre chose que « a exécuté un serveur de chat ».
Où Sider.AI s'intègre et où il ne s'intègre pas Si vous voulez une expérience client saine (threads, gestion des invites, commutation rapide entre les modèles locaux et cloud), Sider.AI fonctionne réellement sans vous supplier de lire d'abord trois fichiers YAML. Vous pouvez le pointer vers un point de terminaison compatible avec OpenAI (comme FastChat) ou utiliser des modèles hébergés lorsque votre GPU commence à siffler. Ce n'est pas un remplacement pour FastChat, c'est la partie qui transforme vos aspérités en quelque chose que les gens peuvent utiliser sans qu'un développeur se tienne à proximité pour l'expliquer. Si votre priorité est de bricoler avec les workers et les contrôleurs, restez dans FastChat. S'il s'agit de faire un travail réel, Sider assis au-dessus de votre point de terminaison FastChat est la partie que vous ne regretterez pas. Comment utiliser FastChat, étape par étape (sans les gestes de la main)
- Installez les dépendances : Python, CUDA si applicable, PyTorch avec CUDA.
- Installez FastChat dans un nouvel environnement.
- Démarrez le contrôleur sur un port prévisible.
- Téléchargez un modèle que vous pouvez réellement exécuter. Ne commencez pas avec la plus grande chose du classement comme un adolescent choisissant une première voiture.
- Lancez un worker avec ce modèle. Confirmez l'utilisation de la VRAM et un premier jeton.
- Démarrez le serveur d'API compatible avec OpenAI.
- Testez avec une invite connue en utilisant votre client OpenAI réglé sur votre URL de base locale.
- Ajustez les paramètres de décodage, définissez des valeurs par défaut raisonnables et verrouillez-les dans la configuration.
- Ajoutez la journalisation, l'authentification de base et les limites de débit avant que quiconque d'autre ne le touche.
- Facultatif : démarrez l'interface utilisateur web ou connectez un meilleur client comme Sider.AI.
Les pièges courants que vous rencontrerez exactement une fois (si vous lisez ceci)
- Versions mixtes de CUDA/PyTorch : Cela semblera bien jusqu'à la première charge réelle. Faites correspondre les versions exprès.
- Incompatibilité du tokenizer : La dérive du modèle Hugging Face par rapport au tokenizer crée un non-sens subtil. Gardez-les synchronisés.
- Invites système trop longues : Vous payez des jetons pour des conversations d'encouragement. Rendez l'invite système courte, spécifique et ennuyeuse.
- Ignorer le streaming : Activez le streaming pour la réactivité. Les utilisateurs finaux assimilent « commence à taper vite » à « intelligent », et honnêtement, ils n'ont pas tort.
Mise à l'échelle : Quand un worker ne suffit pas
- Workers horizontaux : Plusieurs workers enregistrés auprès du contrôleur. Ce n'est pas de la science-fiction, mais vous avez besoin d'un plan pour les poids du modèle sur chaque machine.
- Modèles mixtes : Acheminez les réponses courtes vers des modèles plus petits ; envoyez les questions difficiles au poids lourd. Vous aurez besoin d'une logique d'acheminement ; le contrôleur ne sera pas le parent de votre application pour vous.
- Mise en cache : Mémorisez les invites courantes. Rien ne semble plus rapide que de sauter un travail que vous avez déjà fait.
Pourquoi FastChat au lieu d'un autre framework ?
Parce que vous voulez le contrôle sans construire toute la cathédrale. La division contrôleur/worker est saine. L'API compatible avec OpenAI est pragmatique. Et il ne prétend pas être plus qu'il n'est. Vous pouvez passer de « l'idée » à « utilisable » en un après-midi si vous gardez vos ambitions dans les limites des lois de la thermodynamique.
Mais ne vous leurrez pas
Bien utiliser FastChat signifie accepter des compromis :
- Vous renoncerez à un certain éclat pour la flexibilité.
- Vous lirez les journaux, et ils seront incompréhensibles au moins une fois.
- Vous serez tenté de chasser les dragons de référence. Résistez. Le choix du modèle compte plus que le framework pour la plupart des travaux pratiques.
Si vous ne devez retenir que cinq choses
- Commencez petit. Des modèles plus petits, des configurations plus petites, moins de pièces mobiles.
- Testez tôt via l'API compatible avec OpenAI. Si ce chemin fonctionne, le reste est de la plomberie.
- Quantifiez avant de compromettre la stabilité. Les OOM ne vous rendent pas plus rapide.
- Enregistrez tout ce sur quoi vous ne voudriez pas deviner plus tard.
- Utilisez un client décent. La bonne interface utilisateur fait que les modèles médiocres se sentent compétents et que les bons modèles se sentent excellents. Sider.AI est une couche solide et sans fioritures ici.
Résumé : La prise honnête
FastChat est ce qui se passe lorsque l'open source grandit juste assez pour être utile sans prétendre être un SaaS. Il est modulaire, pragmatique et manifestement désintéressé à l'idée de vous prendre la main. La façon d'utiliser FastChat est, pour la plupart, la façon d'utiliser n'importe quel outil qui privilégie la flexibilité à la cérémonie : commencez par un objectif clair, câblez le pipeline viable minimum et arrêtez quand ça marche. Le reste (les tableaux de bord, les workers distribués, le zoo de modèles) peut attendre que quelqu'un vous demande un numéro de disponibilité.
Pour la plupart des gens, la solution intelligente consiste à exécuter FastChat derrière un client qui ne gaspille pas votre attention. Pour les bricoleurs, c'est un terrain de jeu avec des bords tranchants. Pour tout le monde : c'est rapide si vous le rendez rapide, simple si vous le gardez simple, et seulement aussi bon que votre choix de modèle. C'est ainsi que les logiciels devraient être, et c'est rarement le cas.
FAQ
Q1 : Comment utiliser FastChat avec un client compatible avec OpenAI ?
Pointez l'URL de base de votre client vers le serveur d'API FastChat et conservez le même schéma de chat/complétions. Le point de terminaison correspond, mais le comportement du modèle ne correspondra pas. Testez donc les invites et les paramètres par rapport au modèle réel que vous exécuterez.
Q2 : Quelle est la meilleure façon d'exécuter FastChat sur un seul GPU ?
Choisissez un modèle qui correspond à votre VRAM avec de la marge, idéalement quantifié (4 à 8 bits) pour plus de confort. Démarrez un worker, diffusez des jetons et gardez la taille du lot minuscule, à moins que vous n'aimiez les pics de latence.
Q3 : FastChat peut-il gérer plusieurs modèles à la fois ?
Oui, le contrôleur suivra plusieurs workers et modèles. Acheminez les requêtes intentionnellement ; ne supposez pas que « même API » signifie « résultats interchangeables » entre les modèles.
Q4 : Comment accélérer FastChat sans acheter de nouveau matériel ?
Quantifiez le modèle, activez la réutilisation du cache KV, diffusez les réponses et dimensionnez correctement max_tokens. La mise en cache des invites courantes aide plus que la plupart des réglages de boutons.
Q5 : FastChat est-il bon pour les pipelines RAG ?
Il fonctionne bien comme couche de chat, mais la qualité du RAG dépend d'une récupération propre et d'invites disciplinées. FastChat ne corrigera pas le contexte bâclé ; il sert simplement le modèle plus rapidement.