Laten we een volledig lokale ChatGPT-achtige bot installeren op een Android-telefoon - met een paar commando's, sorry iPhone-mensen..

september 30, 2024 #Android LLMs #Generative A.I #A.I

Korte demo

Dit draait op een betere telefoon dan degene in de handleiding en heeft een ander besturingssysteem. Als je hier meer over wilt weten, laat het me weten!

Installatie

Oké, in deze post gaan we een aantal dingen gebruiken die we al hebben geleerd, zoals Nix en F-Droid.

Als je dit op een macOS-, BSD- of Linux-laptop wilt doen, haal dan gewoon de one-liner voor de Nix-pakketbeheerder van hun website, en je bent klaar om te gaan. Je kunt dan simpelweg de paar commando's daarna uitvoeren. De kracht van Nix...

Aangezien we dit op onze Android-telefoon willen doen, moeten we de app Nix-On-Droid downloaden, en daarvoor hebben we de open-source app store F-Droid nodig. (Alles daar is gratis, mensen! Ik wil dat altijd benadrukken, en als je iets nuttigs ziet, steun de ontwikkelaars alsjeblieft.)

msg

Laten we F-Droid ophalen van hun website of hun Git-repository als je het echt zelf wilt bouwen en naar je telefoon wilt pushen, maar als je dat al kunt, had je deze hint waarschijnlijk niet eens nodig.

msg

Je telefoon zal waarschijnlijk om toestemming vragen om de installatie toe te staan en zal van tevoren wat paniek over het bestand creëren.

msg

Dit gebeurt met alles buiten de Playstore, zelfs bij Google Chrome...

msg

Het toestel zou je alsnog door de toestemming moeten loodsen, klik gewoon op de melding die je krijgt.

msg

Als je je zorgen maakt, moedig ik je aan om zelf onderzoek te doen, altijd, niet alleen over de dingen die we onderwijzen.

msg

Het kan een tijdje duren voordat de app alles heeft ingesteld en gekoppeld. De volgende stap is het vinden van Nix-on-Droid.

msg

Dit is in wezen een terminalemulator en de Nix-pakketbeheerder die geconfigureerd en klaar voor gebruik is.

msg

Nu moet je F-Droid waarschijnlijk toestemming geven om APK's te downloaden.

msg

Nu dat geregeld is, moeten we de app openen, en deze zal vragen om een opslaglocatie. Ik heb hier niet mee gespeeld, maar theoretisch, als je een gerootte telefoon hebt (administratorrechten), zou je het overal moeten kunnen installeren. Ik heb echter niets getest, dus ik stel voor om de standaardlocatie te gebruiken om toegangsproblemen te voorkomen.

msg

Geef het de tijd die het nodig heeft, vooral als je een oudere telefoon en/of een tragere internetverbinding hebt.

msg

Ik stel voor om de ondersteuning voor Flakes uit te schakelen voor een snellere en gemakkelijkere eerste configuratie. Er zijn minder obstakels, en later, als je met een paar projecten wilt spelen, kun je het opnieuw inschakelen.

msg

Ik heb het nu ingeschakeld omdat ik ermee ga spelen, en ik heb er geen probleem mee om te wachten tot het werkt. MAAR het zal erg lang duren, je zult waarschijnlijk vergeten zijn dat je er überhaupt mee bent begonnen als je Flakes inschakelt...

msg

Het duurt lang en geeft een paar foutmeldingen...

msg msg

En dan, als je bent vergeten wat je oorspronkelijk wilde doen...

msg

Eindelijk zijn we door alle obstakels heen, laten we de paar commando's uitvoeren, maar laten we eerst controleren of Nix correct werkt (er zouden geen problemen moeten zijn, maar kopieer de fouten naar DuckDuckGo of ChatGPT als er problemen zijn).

msg

# Kopieer de tekst / commando's één voor één en druk op Enter om ze uit te voeren (voor het geval sommige mensen dit nog nooit hebben gedaan)

whoami 

ls -a

nix-shell -p htop tmux

# nix-shell installeert de pakketten alleen voor de huidige shell/sessie. Als je de app sluit, heb je deze apps niet meer... tenzij je het commando opnieuw uitvoert.

htop
msg

Visueel aantrekkelijk

Als dit allemaal goed werkt, laten we eindelijk de paar commando's uitvoeren.

De magie

nix-env -iA nixpkgs.ollama

# nix-env installeert de pakketten voor alle toekomstige shells/sessies. In principe hoef je nix-shell -p niet elke keer uit te voeren wanneer je iets wilt uitvoeren.

# Ik raad aan om dit ook met tmux te doen.

# Dit is een onderwerp voor een aparte blogpost, maar ollama is software waarmee je modelinference kunt uitvoeren.

Als je in dezelfde shell bent waar je htop en tmux hebt geïnstalleerd, voer dan tmux uit. Als dat niet het geval is, maak tmux beschikbaar voor jezelf en voer het uit.

tmux

Nu moet je CTRL+b+c op dat kleine virtuele toetsenbord indrukken (alle invoer voor tmux-commando's is klein geschreven). Als dat goed gaat, zou je nu 2 vensters moeten hebben (0 en 1).

msg

Voer nu uit:

ollama serve

Druk nu op CTRL+b, maar druk deze keer op n of p, en voer dan uit:

msg
# Dit is een klein model en het zou op best een paar telefoons moeten draaien!

ollama run tinyllama:1.1b-chat-v0.6-q4_K_M # Je kunt ook q4_K_S proberen voor een nog kleiner model.
ollama run tinyllama:1.1b-chat-v0.6-q3_K_S
# Dit zou op bijna elk apparaat snel moeten draaien.
# Heel klein. Ik heb het gebruikt om de video te maken.

# Of voer uit:

ollama run tinyllama:1.1b-chat-v0.6-q5_K_S # Voor een groter model, houd er rekening mee dat grotere modellen trager zullen zijn.

Wat je eigenlijk kwam halen!

Eerst de omgeving instellen: haal de F-Droid Open-Source App "store" en de Nix-on-Droid app. Of op andere apparaten gewoon de nix-pakketmanager van hun website en je bent klaar om te gaan.

Ten tweede, voer een paar opdrachten uit om de LLM-prompt te configureren:

nix-env -iA nixpkgs.ollama nixpkgs.tmux
tmux # CTRL+b en c op het virtuele toetsenbord om 2 vensters te krijgen.
ollama serve # in één venster, dan CTRL+b en n om naar het volgende venster te gaan.

Ten slotte voeren we nog een opdracht uit:

ollama run tinyllama:1.1b-chat-v0.6-q3_K_S # En je wacht even tot het model is gedownload en je vraagt - afhankelijk van je verbinding.

Ik heb de gids gemaakt en ik voer modellen uit op een oude Sony L2 (het is traag, maar het draait), ik heb de daadwerkelijke video van het draaien van de LLM op een iets betere telefoon gemaakt omdat ik ook het scherm moest opnemen. Als je een gids wilt over hoe ik alles heb ingesteld, laat het me weten.

Ik weet dat ik het misschien een beetje lang heb gemaakt, maar ik hoop dat iedereen een idee heeft van wat er aan de hand was en dat het allemaal voor jou heeft gewerkt!