11 points par GN⁺ 2024-01-14 | 2 commentaires | Partager sur WhatsApp
  • Expérience avec Siri et Google Assistant. Ils peuvent contrôler des appareils, mais ne sont pas personnalisables et dépendent de services cloud.
  • Envie d’apprendre quelque chose de nouveau et d’avoir quelque chose de cool à utiliser au quotidien. Le nouvel assistant devait avoir une personnalité sarcastique et mordante.
  • Volonté que tout fonctionne en local. Sans aucune exception. Il n’y a aucune raison qu’une machine à café discute avec un serveur situé à l’autre bout du pays.
  • Volonté d’aller au-delà de la simple fonction « allumer la lumière ». Souhait de pouvoir ajouter de nouvelles fonctions à l’avenir.

Architecture

  • Utilisation d’un Protectli Vault VP2420 pour le pare-feu, le NIPS et le routage VLAN.
  • Exposition de HomeAssistant à Internet pour permettre un usage à distance sans VPN. Pour cela, des mesures de sécurité extrêmes ont été prises.
  • Choix d’un switch administrable TRENDnet TEG-3102WS pour obtenir du 2,5 gigabits à bas prix.
  • Utilisation de deux RTX 4060Ti dans un ordinateur assemblé au coût le plus bas possible, avec la plupart des composants achetés sur eBay. La VRAM est importante pour fournir beaucoup de contexte au LLM.
  • Utilisation d’un Minisforum UM690 pour exécuter HomeAssistant (et le WAF). Un Raspberry Pi 4 pourrait aussi convenir, mais de nombreux services tournent en même temps et Whisper est assez exigeant pour le CPU.
  • Un énorme désordre de câbles Ethernet.

Moteur d’inférence

  • Choix de vLLM, car l’objectif est de disposer d’un LLM générique utilisable aussi en dehors de HomeAssistant. Il est très rapide et c’est le seul moteur capable de servir plusieurs clients simultanément.
  • Il prend en charge un serveur API compatible OpenAI, ce qui simplifie énormément les choses.
  • Choix du modèle Mixtral de Mistral AI, dont le compromis entre VRAM et performances correspond parfaitement au besoin.

Quantification du modèle

  • Impossible d’exécuter le modèle complet en fp32, donc choix d’une version quantifiée.
  • La quantification dégrade légèrement la qualité, comme le MP3, mais améliore fortement les besoins en ressources.
  • Il a fallu choisir entre GPTQ et AWQ, et comme tout l’état de la maison connectée devait être transmis au modèle, GPTQ a été retenu.

Intégration HomeAssistant

  • Utilisation des add-ons Whisper et Piper fournis par défaut dans HomeAssistant OS, mais téléchargement d’un modèle vocal GlaDOS personnalisé depuis HuggingFace.
  • HomeAssistant dispose déjà d’une intégration OpenAI, mais elle ne permet pas de contrôler les appareils et ne propose pas de réglage base_url pour la forcer à parler à un faux serveur OpenAI au lieu des serveurs OpenAI, donc toute son extensibilité n’a pas été utilisée.
  • Une intégration personnalisée a été trouvée, mais il était clair que le logiciel ne fonctionnait pas ainsi. Après l’installation, deux autres problèmes sont apparus.

Résolution des problèmes

  • Mixtral utilise un template de chat inhabituel. Il n’accepte pas les system prompts et lève une exception s’il en détecte un.
  • vLLM ne prend pas en charge l’API de function calling d’OpenAI. Et même si c’était le cas, il faudrait exécuter un modèle spécialement conçu pour le function calling.
  • Pour corriger Mixtral, le template de chat a été modifié afin d’accepter un « system prompt ». Librechat a été utilisé comme interface pour que le system prompt fonctionne correctement.

Sortie JSON

  • Même si le modèle ne peut pas appeler de fonctions, on peut lui demander de produire du JSON, puis l’exécuter.
  • L’intégration personnalisée a été forkée afin d’ajouter la possibilité d’exécuter des services HomeAssistant en JSON.

Prompt GlaDOS

  • Le prompt GlaDOS a été modifié pour être utilisé dans l’assistant personnel.
  • Un problème est apparu : le modèle aime trop produire du JSON. Même pour des questions simples, il renvoie du JSON essayant d’appeler un service.

Solution

  • Il lui a été demandé d’insérer un texte connu lorsque l’utilisateur demande une action. Le choix s’est porté sur "$ActionRequired".
  • Le problème a été résolu en filtrant cela dans le fork.

Prompt final

  • Le prompt initial a été mis à jour avec davantage d’appareils et moins d’entités inutiles.
  • Il a été encouragé à ne pas effectuer d’action lorsqu’aucune demande explicite n’est faite.
  • Après plusieurs essais, le résultat est devenu presque parfait (un peu lent à cause de la limitation du bus mémoire des 4060Ti).

Avis de GN⁺

  • Ce projet peut être particulièrement intéressant pour les personnes qui accordent de l’importance à la confidentialité et à une expérience utilisateur personnalisée.
  • Utiliser un LLM exécuté en local pour contrôler une maison connectée offre de grands avantages en matière de sécurité des données et de rapidité de réponse.
  • Le fait que l’utilisateur construise et personnalise lui-même le système constitue un excellent exemple de promotion de l’apprentissage technique et de la culture DIY.

2 commentaires

 
xguru 2024-01-15

C’est bien structuré, donc j’ai pris plaisir à le lire.
Comme Home Assistant prévoit d’ajouter des fonctionnalités LLM, cela devrait devenir encore plus simple à utiliser à l’avenir.

Même sur une chaîne YouTube de décoration intérieure que je regarde, ils disaient qu’ils allaient créer des produits IoT ; ce serait encore plus intéressant s’ils réfléchissaient dès le départ à permettre d’utiliser ce genre de chose dans ce type d’endroits également.

 
GN⁺ 2024-01-14
Avis sur Hacker News
  • Avis du fondateur de Home Assistant :

    • Home Assistant prévoit d’intégrer nativement des fonctionnalités similaires cette année.
    • Il souligne la nécessité d’une API standardisée pour les LLM locaux et souhaite une fonctionnalité permettant d’interroger ce que le modèle peut faire.
    • Il aimerait voir des LLM locaux prendre en charge des capacités similaires à celles des fonctions d’OpenAI afin qu’ils soient réellement utiles.
    • Il souhaite des résultats directement exécutables lors de la génération de JSON, sans erreurs.
  • Expérience d’un autre utilisateur :

    • Il indique qu’après l’installation, les explications sur les résultats obtenus manquent de clarté.
    • Il mentionne que, par rapport à GPT-4, les petits modèles ont des limites pour effectuer des tâches complexes.
    • Il aimerait voir des exemples concrets de sortie.
  • Utilisateur ayant testé des LLM locaux :

    • Il explique que le modèle llava-v1.5-7b-q4 est efficace pour les tâches de domotique.
    • Il dit avoir obtenu des résultats d’un niveau comparable à GPT-4.
  • Retour d’un utilisateur de Home Assistant :

    • Il reconnaît bien comprendre l’IA et exprime sa gratitude pour un modèle permettant de démarrer.
    • Il mentionne qu’il déploie utilement Home Assistant à plusieurs endroits.
  • Question sur le réseau de micros :

    • Il s’interroge sur l’état d’avancement des réseaux de micros utilisés comme hobby.
    • Il soulève des questions sur les performances des micros par rapport aux appareils Echo.
  • Questions sur le matériel et la configuration :

    • Il pose des questions sur le modèle de GPU utilisé et sur la comparaison des prix.
    • Il demande des informations précises sur le choix de la quantification.
    • Il s’attend à ce que la précision soit maintenue même avec un niveau de quantification plus faible, en raison des contraintes de VRAM.
  • Demande d’informations supplémentaires sur le choix du micro et l’implémentation de la reconnaissance vocale :

    • Il espère obtenir plus de détails à l’avenir sur le choix du micro et l’implémentation de la reconnaissance vocale.
  • Expérience d’un utilisateur ayant utilisé l’API OpenAI :

    • Il a écrit un simple wrapper Python en utilisant l’API d’OpenAI.
    • Il a utilisé ESP32-Box et le projet Willow pour la reconnaissance et la génération vocales en local.
  • Question sur la configuration réseau :

    • Il se demande pourquoi tailscale n’a pas été utilisé au lieu d’une configuration réseau complexe.
    • Il demande une explication sur la flexibilité offerte par cette infrastructure.