2 points par GN⁺ 2023-11-03 | 1 commentaires | Partager sur WhatsApp
  • Talk-Llama est un exemple de whisper.cpp où, lorsque vous parlez au micro dans le terminal, Whisper convertit la voix en texte et LLaMA répond
  • SDL2 est nécessaire pour capturer l’audio du micro, et l’option CMake WHISPER_SDL2=ON doit être activée lors du build
  • À l’exécution, le modèle Whisper se spécifie avec -mw; pour une conversation en temps réel, les modèles base ou small sont recommandés
  • Avec -ml, on spécifie un modèle LLaMA compatible ggml; la préparation du modèle suit les instructions de llama.cpp
  • L’utilisation de --session FILE permet d’enregistrer et de recharger l’état du modèle, afin de conserver le contexte sur de longues conversations ou entre plusieurs exécutions

Exemple de conversation vocale dans le terminal

  • whisper.cpp/examples/talk-llama est un exemple permettant de discuter vocalement avec une IA LLaMA dans le terminal
  • Au 2 novembre 2023, la démo de performance est indiquée comme ayant été exécutée sur un M2 Ultra avec la combinaison Whisper Medium + LLaMA v2 13B Q8_0
  • Une démo précédente est fournie séparément en vidéo comme exemple d’exécution sur CPU

Build et déroulé de l’exécution

  • whisper-talk-llama dépend de la bibliothèque SDL2 pour capturer l’audio du micro
  • Exemples d’installation de SDL2 selon le système d’exploitation :
    • Linux dérivé de Debian : sudo apt-get install libsdl2-dev
    • Fedora Linux : sudo dnf install SDL2 SDL2-devel
    • Mac OS : brew install sdl2
  • Dans le build CMake, activez l’option WHISPER_SDL2=ON
    • cmake -B build -S . -DWHISPER_SDL2=ON
    • cmake --build build --config Release
  • L’exemple d’exécution spécifie ensemble le modèle Whisper, le modèle LLaMA, le prompt et le nombre de threads
    • ./build/bin/whisper-talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8

Options de sélection des modèles

  • L’argument -mw spécifie le modèle Whisper à utiliser
    • Pour une expérience en temps réel, les modèles base ou small sont recommandés
  • L’argument -ml spécifie le modèle LLaMA à utiliser
    • Pour obtenir un modèle LLaMA compatible ggml, il est indiqué de se référer aux instructions de llama.cpp

Continuer le contexte avec un fichier de session

  • whisper-talk-llama prend en charge la gestion de session pour des conversations plus cohérentes et continues
  • Il peut conserver le contexte des interactions précédentes afin de comprendre les demandes de l’utilisateur et d’y répondre plus naturellement
  • La prise en charge des sessions s’active à l’exécution via l’option de ligne de commande --session FILE
    • Après chaque interaction, l’état du modèle whisper-talk-llama est enregistré dans le fichier spécifié
    • Si le fichier n’existe pas, il est créé
    • Si le fichier existe, l’état du modèle est chargé depuis ce fichier pour reprendre la session précédente
  • C’est utile lors d’interactions avec l’assistant IA sur de longues conversations ou sur plusieurs sessions, afin qu’il se souvienne des interactions précédentes et fournisse des réponses contextuelles plus pertinentes
  • Exemple d’exécution :
    • ./build/bin/whisper-talk-llama --session ./my-session-file -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8

Sortie vocale et retours

  • Pour écouter les réponses textuelles générées sous forme vocale, un outil de TTS est nécessaire
  • Vous pouvez utiliser le moteur TTS de votre choix et modifier le script speak selon vos besoins
  • La configuration par défaut utilise say sur MacOS ou SpeechSynthesizer sur Windows
  • Les retours sont sollicités via la GitHub Discussion #672

1 commentaires

 
GN⁺ 2023-11-03
Commentaires sur Hacker News
  • C’est sympa à voir ici :)
    Les performances d’Apple Silicon doivent être bien meilleures maintenant que dans la vidéo. whisper.cpp tourne désormais entièrement sur le GPU, et la vitesse de génération de llama.cpp s’est aussi beaucoup améliorée ces derniers mois.

    • Il n’a fallu que 13 minutes jusqu’au commit de la nouvelle vidéo de démo, pas mal :D
      Les performances réelles sont impressionnantes aussi.
    • Vous êtes devenu assez connu, on dirait. Il y a probablement pas mal de gens qui suivent GitHub de très près.
    • J’ai envoyé une PR pour remonter la nouvelle démo tout en haut. Je trouve qu’elle est bien meilleure.
    • Apple Silicon est-il le plus rentable pour faire tourner ça, ou peut-on faire moins cher avec un serveur Linux de homelab performant ?
    • Est-ce que ça fonctionnerait aussi avec les versions récentes de Llama distillé ?
  • Très chouette. J’ai récemment essayé de connecter Llama à un modèle open source de synthèse vocale dans un projet, et il y avait beaucoup d’aspects d’ingénierie intéressants.
    Personnellement, les assistants de code qui me sont les plus utiles sont ceux qui réduisent la charge de travail manuelle, par exemple en générant les arguments et les types à partir des docstrings, ou l’inverse, plutôt que d’essayer de faire à ma place la réflexion difficile ou la résolution de problèmes. Pour les tâches plus complexes, il faut quand même donner à l’assistant un très bon point de départ.
    Je me parle souvent à moi-même en codant, donc si un outil de ce genre pouvait intégrer mes paroles sous forme de vecteurs de contexte pour les utiliser comme entrée supplémentaire et donner au modèle un meilleur point de départ, ce serait vraiment futuriste et utile. J’ai adopté Copilot assez tard et je ne l’utilise pas tout le temps, mais si quelqu’un connaît quelque chose de similaire, ça m’intéresse.

  • Si la proposition open weights se concrétise dans les 270 jours, cela pourrait en pratique être interdit quelques mois plus tard.

    • Cette affirmation n’est pas étayée par le texte de l’Executive Order de Biden. Il demande seulement à plusieurs agences fédérales de mettre en place un cadre d’évaluation de la sûreté, d’effectuer une évaluation initiale des modèles open weights, puis de soumettre des recommandations au président dans un délai de 270 jours.
      Je n’ai trouvé absolument rien qui parle d’interdire les modèles open weights. Je vois mal pourquoi la recommandation finale contiendrait « interdisez-les ».
      On peut imaginer, par exemple, des recommandations favorables aux acteurs en place, où le gouvernement rendrait le coût d’adoption des modèles open weights si élevé qu’acheter chez OpenAI deviendrait bien plus attrayant. Mais ce n’est pas ce qui était dit au départ.
      L’Executive Order me semble assez facile à lire ; est-ce qu’il y a quelque chose que j’ai raté dans le texte ?
      https://www.whitehouse.gov/briefing-room/presidential-action...
    • Je ne vois rien indiquant que les weights seraient interdits. Ce que j’ai lu ressemble plutôt à une demande de rapport sur les risques et bénéfices de l’open weight.
      Je suis d’accord pour dire qu’une formulation aussi ouverte est préoccupante, mais où voyez-vous une interdiction concrète ?
    • À quel point est-ce une menace sérieuse ? Comment pourraient-ils appliquer quelque chose d’aussi idiot sans même consulter les leaders du secteur ?
  • Sur Arch et Debian, lancer ./talk-llama provoque une floating point exception. J’ai vérifié sdl2lib et ffmpeg, et j’ai aussi regardé l’issue correspondante (https://github.com/ggerganov/whisper.cpp/issues/1325), mais rien n’y fait. D’autres ont le même problème ?

    • J’ai galéré avec la même erreur sur PopOS 22.04, et ceci m’a aidé :
      https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
      Je ne sais pas exactement ce qui a changé, mais en gros j’ai supprimé ffmpeg et libsdl2-dev, puis exécuté make à la racine du dépôt. Ensuite j’ai installé libsdl2 et ffmpeg, puis fait make talk-llama.
      C’est assez lent sur un i7-8550U à 4 cœurs avec 16 Go de RAM.
      Depuis la racine du dépôt, j’ai fait à peu près ceci :
      $ sudo apt purge ffmpeg
      $ make clean
      $ git pull
      $ make
      $ sudo apt install libsdl2-dev
      $ make talk-llama
      $ ./talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-2-13b.Q4_0.gguf -p "t0mk" -t 8\n\n
  • N’existe-t-il pas de solution de synthèse vocale capable de recevoir un flux de texte et de le prononcer immédiatement, sans attendre que Llama ait fini de générer ?
    J’imagine que ce n’est possible que si le modèle remplit le buffer assez vite pour que le moteur de synthèse vocale ne s’arrête pas.

    • Il suffirait que llama.cpp sorte des « um », « uhh » quand il ne reste plus qu’un mot dans le buffer :D
    • Il faut savoir où va la phrase pour mieux caler le timing et l’intonation. Sinon, on risque d’avoir une suite de mots un peu plate, comme un interprète de l’ONU.
    • ElevenLabs et Gemelo.AI sont justement des services qui prennent en charge le streaming de texte en entrée pour ce genre d’usage. À ma connaissance, il n’existe pas de modèle open source de synthèse vocale incrémentale (Incremental TTS), mais on peut obtenir un résultat proche en mettant les tokens en buffer puis en les envoyant au moteur de synthèse lorsqu’une ponctuation apparaît.
  • Sans attendre la fin complète de la réponse du LLM, est-ce qu’on pourrait réduire la latence en diffusant la synthèse vocale au fil de la génération, par paquets d’environ 6 tokens ?

    • Oui, c’est ce que j’avais prévu de faire à l’époque, puis autre chose est arrivé. Cet exemple simple peut être amélioré de plusieurs façons
      On peut déjà améliorer la détection de fin d’énoncé, qui n’utilise actuellement qu’un seuil adaptatif de base, et on pourrait aussi faire générer des réponses rapides et génériques par un petit LLM pendant qu’un gros LLM calcule. La synthèse vocale pourrait aussi être diffusée par chunks ou par phrases
      À mon avis, l’une des meilleures versions open source de ce type de chatbot est https://github.com/yacineMTB/talk. Il y a sans doute encore plus de projets similaires aujourd’hui
  • Quelle est la meilleure interface de chat pour Llama ? J’ai une 3090 et j’aimerais faire tourner un modèle dans le terminal pour des tâches de code rapides

    • ollama est vraiment très simple à utiliser. C’est un binaire unique qui télécharge les modèles à la demande, un peu comme Docker récupère des images
      pacman -S ollama
      ollama serve
      ollama run llama2:13b 'insert prompt'
      https://ollama.ai/
    • Il existe aussi un projet open source qui prend en charge la voix :
      https://github.com/cogentapps/chat-with-gpt
      Il semble conçu pour utiliser ElevenLabs et l’API OpenAI, mais il pourrait aussi être facile à configurer pour Whisper.cpp local et Llama
    • Ce n’est pas open source, mais il y a lmstudio.ai, qui est encore gratuit pour l’instant. Il propose un historique de chat, une interface de réglages correcte, une gestion simple des prompts, la gestion et l’exploration des modèles, une configuration facile, le cross-platform, et même un serveur API pour se connecter à d’autres outils
      Ils recrutent et n’ont pas de stratégie de monétisation publique, donc je m’attends à ce que certains changements arrivent bientôt, soit avec des fonctions gratuites qui deviennent payantes, soit avec des limitations volontaires. Cela dit, pour des applis légères gratuites pour LLM qui reposent entièrement sur llama.cpp, il est difficile de créer un vrai verrouillage fournisseur. Si l’open source passe avant les fonctionnalités, je recommanderais moi aussi ollama
    • Le plus simple à configurer, c’est celui-ci : https://faraday.dev/
      Pour les questions techniques, j’ai l’impression que Wizard est la référence du moment
    • Tout dépend de ce qu’on entend par « meilleur ». Si vous cherchez l’inférence de pointe la plus rapide possible, alors sur une 4090, c’est ExLlama ou ExLlamaV2
  • J’aime vraiment ollama pour exécuter des LLM open source en local, mais quel serait l’équivalent pour Whisper ou les modèles open source récents de synthèse vocale ? Je ne connais pas vraiment de projet qui rende l’installation locale de Whisper aussi simple

  • Est-ce que quelqu’un pourrait expliquer simplement ce que ça peut faire ? Est-ce que ça peut apprendre et conserver le contexte du chat, en construisant une sorte de mémoire à long terme ?

    • Je ne suis pas spécialiste des LLM, mais si j’ai bien compris, l’idée est de faire tourner reconnaissance vocale → Llama → synthèse vocale sur son propre PC, plutôt que via un serveur tiers
      La limite de contexte du LLM dépend du modèle et des réglages choisis par l’utilisateur. Par exemple, cela varie selon que vous utilisez Llama 2, Wizard Vicuna ou un autre modèle, ainsi que selon la façon dont la fenêtre de contexte est configurée. Un LLM ne « répond » pas tant à l’utilisateur qu’il ne prédit la suite la plus plausible dans l’historique d’une conversation entre l’utilisateur et un assistant utile ; comme il réussit ainsi à faire semblant d’être un assistant utile, il finit par en être un en pratique, ce qui peut prêter à confusion
      En modifiant le pipeline, ce genre de comportement semble possible. Si l’architecture devient reconnaissance vocale → Wrapper[Llama] → synthèse vocale, et que le Wrapper peut laisser Llama faire son travail tout en appliquant un traitement supplémentaire au texte d’entrée, cela devient intéressant
      Le Wrapper pourrait analyser la conversation et en extraire des éléments clés comme « cette personne s’appelle Bob, c’est un homme de 35 ans, il aime les chiens, préfère que tout soit bien rangé, veut un rappel à 17 h pour appeler sa fille, est un agent infiltré de la mafia antarctique et préfère qu’on lui parle avec un fort accent polonais », puis agir en conséquence
      Par exemple, il pourrait créer le rappel de 17 h via HomeAssistant, configurer le moteur de synthèse vocale avec un accent polonais et modifier l’historique de départ des sessions suivantes. Il pourrait insérer le nom de la personne dans le dialogue interne et fournir, dans l’introduction préalable des conversations suivantes, un condensé de ses centres d’intérêt et de sa personnalité
      De cette manière, il y aurait de l’interactivité via les actions réalisées par d’autres outils, et aussi une continuité en modifiant l’historique des conversations suivantes
  • Ça donne vraiment une forte vibe ELIZA