Alpaca, Ollama und wie man es missbrauchen kann

Seit letztem Dienstag bastel ich mit lokalen LLM rum. Dazu habe ich Alpaca ausprobiert, daß als Flatpak installiert wurde.

Alpaca, Ollama und wie man es missbrauchen kann

Das zuerst wählt man sich eins oder mehrere Sprachmodelle aus, die man benutzen will:UI Oberfläche mit einer Auswahl von Modellen in einer ListeDanach kann man direkt loslegen, weil Alpca als Frontend für Ollama alles nötige macht:

– Ollama als Dienst starten
– die Modelle vorbereiten und pullen
– eine Eingabeoberfläche mit HTML Ausgabe bereitstellen.

Wer jetzt nur mit dem Modell Spielchen treiben will, kann direkt anfangen. Wer aber ohne die Oberfläche jedes mal starten zu müssen, mit den Modellen interagieren möchte, der sollte Ollama selbst installieren.

Dazu einfach root werden und das Install Script starten. Wenn man bereits 3D-vollständige Grafikkarteninstallationen hat, passiert nicht viel, außer:

– Ollama User wird angelegt
– Systemd Service erstellt
– Ollama initialisiert

Mehr braucht es nämlich gar nicht. Das Ganze wird mit einer einzigen Zeile gestartet:

$ curl -fsSL https://ollama.com/install.sh | sh

Nach dem Start sieht das dann so aus:

$ systemctl status ollama
ollama.service – Ollama Service
Loaded: loaded (/etc/systemd/system/ollama.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Fri 2024-08-09 11:13:18 CEST; 6s ago
Main PID: 82811 (ollama)
Tasks: 18 (limit: 18994)
Memory: 1.7G
CPU: 8.917s
CGroup: /system.slice/ollama.service
└─82811 /usr/local/bin/ollama serve$ netstat -nlap|grep 114

tcp 0 0 127.0.0.1:11434 0.0.0.0:* LISTEN –
tcp 0 0 127.0.0.1:11435 0.0.0.0:* LISTEN 6638/ollama

Hmm, Zwei Ollama’s … ja klar, eins vom Flatpak und eins haben wir je gerade installiert.

Alpaca Daten übertragen

Weil das Vorbereiten der Modelle und das Pullen der Datenblobs nicht jedermans Sache ist, klauen wir uns jetzt die Daten vom Flatpak und schieben es der eigenen Installation unter 😀 Alpaca beendet man jetzt am besten

$ ls -la .var/app/com.jeffser.Alpaca/data/
insgesamt 24
drwxr-xr-x. 5 marius marius 4096 9. Aug 11:07 .
drwxr-xr-x. 7 marius marius 4096 6. Aug 09:34 ..
drwxr-xr-x. 2 marius marius 4096 7. Aug 15:59 chats
drwx——. 3 marius marius 4096 6. Aug 09:34 .nv
drwxr-xr-x. 3 marius marius 4096 8. Aug 13:35 .ollama
-rw-r–r–. 1 marius marius 280 9. Aug 11:07 tmp.log

 

$ su root
$ systemctl stop ollama
$ mv /usr/share/ollama/.ollama /usr/share/ollama/.ollama.old
$ mv /home/$USER/.var/app/com.jeffser.Alpaca/data/.ollama /usr/share/ollama
$ chown ollama: -R /usr/share/ollama/.ollama
$ systemctl enable -now ollama

Fertig. jetzt könnt Ihr direkt mit den installierten Modellen arbeiten und braucht keine GUI mehr. Das erlaubt unserer Freundin Carola jetzt Ollama direkt auf Port 11434  anzusprechen und Ihre Fähigkeiten zu erweitern 😉

WARNUNG:

Diese Sprachmodelle sind riesig und werden komplett in den Speicher geladen. Unter 16 GB Ram geht da gar nichts, weil Carolas STT Dienst ja auch schon 3,2 GB Ram haben will und die Modelle meisten größer als 5 GB sind.

Wie das alles genau geht, gibt es nächstes Linux am Dienstag 😉

Als kleine Vorschau, was Euch qualitativ so erwartet, wenn Ihr den Kram lokal bei Euch laufen lasst, hier ein Bericht von einem „KI“-Assistenten-Gadget, von dem ich genau weiß, was es getan hat :DDD

Wer dagegen lieber live bei der Zerstörung von „KI“ dabei ist, der ist besser nächste Woche Dienstag um 19 Uhr bei Linux am Dienstag dabei :DDD

Wer mal bewusst gekauftes Sponsering für ein Produkt erleben möchte, der schaut sich zum Rabbit R1 das mal an:

„gekauft“, weil das Teil so schlecht ist, daß das unmöglich nicht aufgefallen sein kann 😉

Gestern gebaut, heute schon in Carola integriert

Ja, das ging schnell, weil das alles so einfach ist 😉

Gestern gebaut, heute schon in Carola integriert

Gestern Abend in Linux am Dienstag bauten wir Recall nach, natürlich nur eine simple Version, aber funktional. Da durfte die Anbindung an Carola ja nicht fehlen 🙂

Also habe ich das kurz als Plugin eingebaut. Jetzt versteht Vosk leider „Recall“ in Deutsch in keinster weise, weshalb das jetzt erst einmal „Gedächtnis“ heißt. Es wird also mit „Suche im Gedächtnis (nach) Kontostand“ angesprochen.

Die Updates für diese Funktion kommen dann auch morgen per RPM zu den Benutzern. Bislang müßt Ihr Recall aber noch selbst installieren, den Globalen Teil machen wir erst nächste Woche fertig, glaube ich jedenfalls 😉

Linux am Dienstag baut Recall nach

Update: RPM ist fertig.

 

Piper TTS braucht Eure technische Expertise

Beim letzten Linux am Dienstag wurde uns Piper TTS vorgestellt, daß in seiner initialen Version schon gute Resultate liefert, aber leider min. einen gravierenden Sprachfehler in den deutschen Modulen hat. Carola konnte natürlich nicht anders und hat die Sprachausgabe schon für sich gekappert 😉

Piper TTS braucht Eure technische Expertise

Laut dem GitHub Issue #52 ist dafür aber ESpeak-NG verantwortlich, weil es min. die Silbe „ch“ nicht richtig ausspricht. So klingen die deutschen Stimmen wie unsere holländischen Nachbarn. Eine provisorische Korrektur später, hatten wir allerdings Turkdeutsch in der Ausgabe, was auf seine Art auch irritierend ist, aber immer noch verständlicher, als wenn CH als ICK ausgesprochen wird 😉

Jetzt kommen die ESPEAK-NG Fachleute unter Euch ins Spiel: Wie bekommt man den Sprachfehler da jetzt raus?

Wenn jemand hilfreiche Tips hat, dann bitte direkt in dem GitHub Issue #52 zum Besten geben, um so schneller kann Piper die Standartsprachausgabe von Linux werden, auch wenn die noch einen weiten Weg hat.

Der Vorteil von Piper ist die komplett lokale Verarbeitung. Es ist zudem auch super schnell, variabel und kann in mehreren Sprachen benutzt werden. Leider fehlt dem TTS System noch jede Form von Betonung durch Satzzeichen, etwas, daß andere TTS wie das von Google oder Mary schon lange beherrschen.

Carola Integration

Das neueste Carola Paket v1.19 hat bereits die nötigen Konfigurationen und den Sprachbefehl mitbekommen. Außerdem könnt Ihr die Piper-RPMs auch im PVA Repo finden. Wer das selbst von Hand nutzen will, kann sich die Files von Github ziehen.

Wenn man eine „nicht-repo“ Version von Carola pimpen will, müßte man die Github-Dateien nach /usr/local/share so installieren:

piper
├── espeak-ng-data
├── libespeak-ng.so -> libespeak-ng.so.1.1.51
├── libespeak-ng.so.1 -> libespeak-ng.so.1.1.51
├── libespeak-ng.so.1.1.51
├── libonnxruntime.so.1.14.1
└── piper
piper-voices
├── voice-de-eva_k-x-low
├── voice-de-karlsson-low
├── voice-de-kerstin-low
├── voice-de-pavoque-low
├── voice-de-ramona-low
└── voice-de-thorsten-low

und dann das piper-say Script (im PVA Github Repo) benutzten: /usr/local/sbin/piper 

#!/bin/bash

NAME=$(mktemp)
TEMPO=0.95

if [ "$VOICE" == "" -o "$VOICE" == "de" ]; then
#VOICE="de-thorsten-low"
#VOICE="de-eva_k-x-low"
#VOICE="de-karlsson-low"
VOICE="de-kerstin-low"
#VOICE="de-pavoque-low"
#VOICE="de-ramona-low"
fi

TEXT="$1"

if [ "$NAME" != "" ]; then

   TEXT=$(echo "$TEXT" | sed -e "s/ch/sch/g" -e "s/ssch/sch/g" | tr -d "\n" )
   echo "$TEXT" | /usr/local/share/piper/piper -m /usr/local/share/piper-voices/voice-$VOICE/$VOICE.onnx -f $NAME 2>/dev/null
   play $NAME tempo $TEMPO 2>/dev/null
   rm -f $NAME
fi

Die kleine Kompensation:

TEXT=$(echo „$TEXT“ | sed -e „s/ch/sch/g“ -e „s/ssch/sch/g“ | tr -d „\n“ )

ist leider nötig, weil wir ja nicht dauernd ICK hören wollen und weil Piper ein entscheidenden Bug hat:

Wenn es auf ein LF im Text trifft, fängt es hinter dem letzten LF erst an zu arbeiten. Ihr könnt Euch vorstellen, was passiert, wenn man Ende vom Text ein „LF“ steht? Genau ..“kritsch“ und das wars 😀

Quelle: https://github.com/rhasspy/piper

Wie komme ich ans Repo dran?

PVA: Carola hat Ihr eigenes Repo bekommen