2 Punkte von GN⁺ 2023-11-03 | 1 Kommentare | Auf WhatsApp teilen
  • Talk-Llama ist ein whisper.cpp-Beispiel, bei dem man im Terminal ins Mikrofon spricht, Whisper Sprache in Text umwandelt und LLaMA antwortet
  • Für die Aufnahme von Mikrofon-Audio wird SDL2 benötigt; beim Build muss die CMake-Option WHISPER_SDL2=ON aktiviert werden
  • Beim Start wird mit -mw das Whisper-Modell angegeben; für Echtzeit-Gespräche werden die Modelle base oder small empfohlen
  • Mit -ml wird ein ggml-kompatibles LLaMA-Modell angegeben; zur Vorbereitung des Modells soll man den Anweisungen von llama.cpp folgen
  • Mit --session FILE kann der Modellzustand gespeichert und geladen werden, sodass bei langen Gesprächen oder über mehrere Ausführungen hinweg Kontext erhalten bleibt

Beispiel für Sprachdialog im Terminal

  • whisper.cpp/examples/talk-llama ist ein Beispiel, um im Terminal per Sprache mit der LLaMA-AI zu sprechen
  • Die Performance-Demo mit Stand vom 2. November 2023 wird als Ausführung auf einem M2 Ultra mit der Kombination Whisper Medium + LLaMA v2 13B Q8_0 angegeben
  • Eine frühere Demo wird als CPU-Ausführungsbeispiel mit einem separaten Video bereitgestellt

Build- und Ausführungsablauf

  • whisper-talk-llama hängt für die Aufnahme von Mikrofon-Audio von der Bibliothek SDL2 ab
  • Beispiele für die Installation von SDL2 je nach Betriebssystem:
    • Debian-basierte Linux-Systeme: sudo apt-get install libsdl2-dev
    • Fedora Linux: sudo dnf install SDL2 SDL2-devel
    • Mac OS: brew install sdl2
  • Beim CMake-Build wird die Option WHISPER_SDL2=ON aktiviert
    • cmake -B build -S . -DWHISPER_SDL2=ON
    • cmake --build build --config Release
  • Im Ausführungsbeispiel werden Whisper-Modell, LLaMA-Modell, Prompt und Anzahl der Threads gemeinsam angegeben
    • ./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

Optionen zur Modellangabe

  • Das Argument -mw legt das zu verwendende Whisper-Modell fest
    • Für ein Echtzeit-Erlebnis werden base oder small empfohlen
  • Das Argument -ml legt das zu verwendende LLaMA-Modell fest
    • Wie man ein ggml-kompatibles LLaMA-Modell erhält, ist in den Anweisungen von llama.cpp beschrieben

Kontext mit Sitzungsdateien fortführen

  • whisper-talk-llama unterstützt Sitzungsverwaltung für konsistentere und fortlaufende Gespräche
  • Dadurch kann der Kontext früherer Interaktionen erhalten bleiben, sodass Nutzeranfragen natürlicher verstanden und beantwortet werden können
  • Die Sitzungsunterstützung wird beim Start mit der Kommandozeilenoption --session FILE aktiviert
    • Nach jeder Interaktion wird der Modellzustand von whisper-talk-llama in der angegebenen Datei gespeichert
    • Wenn die Datei nicht existiert, wird sie neu erstellt
    • Wenn die Datei existiert, wird der Modellzustand daraus geladen und die vorherige Sitzung fortgesetzt
  • Das ist nützlich bei langen Gesprächen oder bei Interaktionen mit dem AI assistant über mehrere Sitzungen hinweg, weil frühere Interaktionen erinnert und kontextbezogenere Antworten geliefert werden können
  • Beispielaufruf:
    • ./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

Sprachausgabe und Feedback

  • Um die erzeugten Textantworten als Sprache zu hören, wird ein TTS-Tool benötigt
  • Es kann jede gewünschte TTS-Engine verwendet werden; bei Bedarf lässt sich das Skript speak entsprechend anpassen
  • Die Standardeinstellung verwendet unter MacOS say oder unter Windows SpeechSynthesizer
  • Feedback kann über die GitHub-Diskussion #672 gegeben werden

1 Kommentare

 
GN⁺ 2023-11-03
Meinungen auf Hacker News
  • Lustig, das hier zu sehen :)
    Die Apple-Silicon-Performance dürfte inzwischen deutlich besser sein als im Video gezeigt. whisper.cpp läuft jetzt vollständig auf der GPU, und die Generierungsgeschwindigkeit von llama.cpp hat sich in den letzten Monaten stark verbessert.

    • Bis zum Commit des neuen Demo-Videos hat es nur 13 Minuten gedauert, nicht schlecht :D
      Tatsächlich ist auch die Performance beeindruckend.
    • Sie scheinen inzwischen ziemlich bekannt zu sein. Es ist sehr wahrscheinlich, dass viele Leute GitHub aufmerksam mitverfolgen.
    • Ich habe einen PR geschickt, der die neue Demo ganz nach oben setzt. Ich finde, die neue Demo ist deutlich besser.
    • Ist Apple Silicon die kosteneffizienteste Option, um das auszuführen, oder geht es günstiger auf einem leistungsfähigen Homelab-Linux-Server?
    • Funktioniert das auch mit den neuesten distilled Llama-Modellen?
  • Cool. In einem aktuellen Projekt habe ich Llama mit einem Open-Source-Sprachsynthese-Modell verbunden; dabei gab es viele interessante Engineering-Aspekte.
    Persönlich sind für mich die nützlichsten Coding-Assistenten solche, die die manuelle Arbeit reduzieren, etwa indem sie aus Docstrings Argumente und Typen erzeugen oder umgekehrt, statt schwieriges Denken oder Problemlösen übernehmen zu wollen. Bei komplexeren Aufgaben muss man dem Assistenten offenbar einen ziemlich guten Startpunkt geben.
    Beim Programmieren rede ich oft mit mir selbst; wenn so ein Tool meine Worte als Kontextvektoren einbetten und als zusätzliche Eingabe verwenden könnte, um dem Modell einen besseren Startpunkt zu geben, wäre das wirklich futuristisch und nützlich. Ich habe Copilot spät angenommen und nutze es nicht ständig, aber falls jemand etwas Ähnliches kennt, würde es mich interessieren.

  • Wenn der Open-Weights-Vorschlag innerhalb von 270 Tagen Realität wird, könnte das in ein paar Monaten praktisch verboten sein.

    • Diese Behauptung wird durch den Text der Biden-Executive-Order nicht gestützt. Es gibt lediglich die Aufforderung an mehrere Regierungsbehörden, Rahmenwerke zur Sicherheitsbewertung zu entwickeln, eine erste Bewertung von Open-Weights-Modellen durchzuführen und dem Präsidenten innerhalb von 270 Tagen Empfehlungen vorzulegen.
      Soweit ich finden konnte, gibt es darin überhaupt nichts, was Open-Weights-Modelle verbietet. Ich sehe auch wenig Grund, warum in der endgültigen Empfehlung „verbieten“ stehen sollte.
      Man kann sich zum Beispiel Empfehlungen vorstellen, die etablierten Anbietern zugutekommen, indem sie die Hürden für die Einführung von Open-Weights-Modellen durch die Regierung so hoch setzen, dass der Kauf von OpenAI deutlich attraktiver wirkt. Aber das ist etwas anderes als die ursprüngliche Aussage.
      Die Executive Order scheint recht gut lesbar zu sein; habe ich im Text etwas übersehen?
      https://www.whitehouse.gov/briefing-room/presidential-action...
    • Ich sehe nichts, wonach Gewichte verboten würden. Der Teil, den ich gesehen habe, liest sich eher wie die Aufforderung, einen Bericht über die Risiken und Vorteile von Open Weights zu erstellen.
      Ich stimme zu, dass die offene Ausgestaltung des Umfangs besorgniserregend ist, aber wo genau ist das tatsächliche Verbot?
    • Wie ernst ist diese Bedrohung? Wie könnte man so etwas Dummes durchsetzen, ohne sich überhaupt mit den Branchenführern zu beraten?
  • Wenn ich ./talk-llama unter Arch und Debian ausführe, bekomme ich eine floating point exception. sdl2lib und ffmpeg habe ich überprüft, und auch das zugehörige Issue (https://github.com/ggerganov/whisper.cpp/issues/1325) habe ich gesehen, aber gelöst ist es nicht. Hat das noch jemand?

    • Ich hatte unter PopOS 22.04 mit demselben Fehler zu kämpfen; das hier hat geholfen:
      https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
      Ich bin nicht sicher, was sich dadurch geändert hat, aber im Grunde habe ich ffmpeg und libsdl2-dev entfernt und im Root des Repos make ausgeführt. Danach habe ich libsdl2 und ffmpeg installiert und make talk-llama ausgeführt.
      Auf einem 4-Core i7-8550U mit 16 GB RAM ist es ziemlich langsam.
      Im Root des Repos habe ich ungefähr Folgendes gemacht:
      $ 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
  • Gibt es keine Text-to-Speech-Lösung, die nicht wartet, bis Llama die Generierung beendet hat, sondern einen Textstream entgegennimmt und ihn sofort vorliest?
    Das dürfte allerdings nur funktionieren, wenn das Modell den Buffer schnell genug füllt, damit die Sprachsynthese-Engine nicht ins Stocken gerät.

    • Wenn im Buffer nur noch ein Wort übrig ist, könnte man llama.cpp einfach „um“, „uhh“ und Ähnliches ausgeben lassen :D
    • Man muss wissen, wohin der Satz geht, damit Timing und Betonung besser passen. Sonst kann es sich anfühlen wie bei UN-Dolmetschern, wo die Wörter eher flach aneinandergereiht werden.
    • ElevenLabs und Gemelo.AI sind Dienste, die genau für diesen Zweck Streaming von Texteingaben unterstützen. Open-Source-Modelle für inkrementelle Sprachsynthese (Incremental TTS) kenne ich nicht, aber man kann etwas Ähnliches umsetzen, indem man Tokens puffert und sie bei Satzzeichen an das Sprachsynthese-Modell schickt.
  • Könnte man die Latenz verringern, indem man nicht wartet, bis die gesamte LLM-Antwort fertig ist, sondern die erzeugten Inhalte in etwa 6-Token-Blöcken zur Sprachsynthese streamt?

    • Ja, genau das wollte ich damals machen, aber dann kam etwas anderes dazwischen. Dieses einfache Beispiel lässt sich auf viele Arten verbessern.
      Man könnte die Erkennung des Sprechendes verbessern, die derzeit nur einen einfachen adaptiven Schwellenwert verwendet, und man könnte ein kleines LLM allgemeine schnelle Antworten erzeugen lassen, während ein großes LLM rechnet. Auch die Sprachsynthese könnte man chunk- oder satzweise streamen.
      Eine der besseren Open-Source-Versionen solcher Chatbots ist meiner Ansicht nach https://github.com/yacineMTB/talk. Inzwischen gibt es wahrscheinlich auch deutlich mehr ähnliche Projekte.
  • Was ist das beste Chat-Interface für Llama? Ich habe eine 3090 und würde gern ein Modell für schnelle Coding-Aufgaben im Terminal laufen lassen.

    • ollama ist wirklich einfach zu benutzen. Es ist ein einzelnes Binary, das Modelle bei Bedarf herunterlädt, ähnlich wie Docker Images bezieht.
      pacman -S ollama
      ollama serve
      ollama run llama2:13b 'insert prompt'
      https://ollama.ai/
    • Es gibt ein Open-Source-Projekt, das auch Sprache unterstützt:
      https://github.com/cogentapps/chat-with-gpt
      Es scheint für die Nutzung von ElevenLabs und der OpenAI API gebaut zu sein, dürfte sich aber vielleicht leicht für lokales Whisper.cpp und Llama konfigurieren lassen.
    • Nicht Open Source, aber derzeit noch kostenlos ist lmstudio.ai. Es bietet Chatverlauf, eine ordentliche Einstellungs-UI, einfaches Prompt-Management, Modellverwaltung und -suche, unkomplizierte Einrichtung, Cross-Platform-Support und sogar eine API-Server-Funktion zur Anbindung anderer Tools.
      Sie stellen ein und haben keine öffentlich bekannte Monetarisierungsstrategie, daher rechne ich damit, dass bald einige kostenlose Funktionen kostenpflichtig werden oder absichtlich eingeschränkt werden. Trotzdem ist es für schlanke Apps für kostenlose LLMs, die vollständig auf llama.cpp beruhen, schwer, einen Vendor Lock-in zu erzeugen. Wenn Open Source wichtiger ist als Features, würde ich ebenfalls ollama empfehlen.
    • Am einfachsten einzurichten ist das hier: https://faraday.dev/
      Für technische Fragen ist derzeit meiner Ansicht nach Wizard angesagt.
    • Das hängt davon ab, was man mit „beste“ meint. Wenn es um möglichst schnelle, moderne Inferenz geht, dann ExLlama oder ExLlamaV2 auf einer 4090.
  • Ich bin mit ollama zum Ausführen lokaler Open-Source-LLMs wirklich zufrieden. Was wäre das entsprechende Pendant für Whisper oder aktuelle Open-Source-Sprachsynthese-Modelle? Ich kenne kein Projekt, mit dem sich Whisper lokal so einfach einrichten lässt.

  • Kann jemand einfach erklären, was das hier kann? Kann es den Kontext eines Chats lernen und beibehalten und so etwas wie ein Langzeitgedächtnis aufbauen?

    • Ich bin kein LLM-Experte, aber nach meinem Verständnis ist die Architektur Spracherkennung → Llama → Sprachsynthese, und das läuft auf dem eigenen PC statt auf Servern Dritter.
      Die Kontextbeschränkung des LLM hängt vom gewählten Modell und den Einstellungen ab. Also etwa davon, ob man Llama 2, Wizard Vicuna oder ein anderes Modell nutzt und wie das Kontextfenster konfiguriert ist. Das kann verwirrend sein: Ein LLM „antwortet“ dem Nutzer nicht wirklich, sondern sagt den wahrscheinlichsten nächsten Inhalt in einem Gesprächsverlauf zwischen dem Nutzer und einem hilfreichen Assistant voraus – und dadurch gelingt es ihm, so zu tun, als wäre es ein hilfreicher Assistant, wodurch es tatsächlich zu einem nützlichen Assistant wird.
      Wenn man die Pipeline verändert, scheint so ein Verhalten ebenfalls möglich. Die Struktur wäre dann Spracherkennung → Wrapper[Llama] → Sprachsynthese; interessant wird es, wenn der Wrapper Llama seine Arbeit machen lässt, aber zusätzlichen Processing auf den Eingabetext anwendet.
      Der Wrapper könnte das Gespräch analysieren, Kernelemente extrahieren wie „diese Person heißt Bob, ist männlich, 35 Jahre alt, mag Hunde, bevorzugt Ordnung, möchte um 17 Uhr daran erinnert werden, seine Tochter anzurufen, ist ein eingeschleuster Agent der antarktischen Mafia und bevorzugt Antworten mit starkem polnischem Akzent“, und entsprechend handeln.
      Zum Beispiel könnte er über HomeAssistant eine Erinnerung für 17 Uhr erstellen, die Sprachsynthese-Engine auf polnischen Akzent einstellen und den initialen Gesprächsverlauf späterer Ausführungen anpassen. Etwa indem er in der internen Chat-Konversation den Namen der Person einfügt und in der Vorab-Einführung des nächsten Gesprächs Interessen und Persönlichkeit komprimiert bereitstellt.
      So entstünde Interaktivität durch Aktionen, die andere Tools ausführen, und Kontinuität durch das Anpassen des nächsten Gesprächsverlaufs.
  • Das hat wirklich einen starken ELIZA-Vibe.