Lokale LLM's draaien met het gemak van containers
Zou het niet handig zijn om LLM's te kunnen starten alsof het Docker images zijn? Dat was het idee dat de ontwikkelaars van Ollama hadden. Ollama is een tool, waarmee een groot aantal LLM's automatisch gedownload kunnen worden. Hierna kan er via de ollama cli gecommuniceerd worden met deze LLM's en er wordt ook nog een api mee geleverd zodat er tegenaan geprogrammeerd kan worden. Allemaal super handig en Ollama handelt al het moeilijke gedoe af.
Momenteel is Ollama alleen voor Linux en macOS beschikbaar, maar kan via WSL2 ook onder Windows gedraaid worden. Een GPU is hierbij wel aan te bevelen. Een M1 (of hoger) processor wordt hierbij ook ondersteund.
Na het installeren van Ollama is het simpel 1 van de LLM's te starten:
% ollama run llama2
>>> hoeveel is 1 + 1?
The answer to 1 + 1 is 2.
Grappig genoeg heeft Llama2 de neiging (voor mij) om altijd in het engels te antwoorden. Naast Llama 2 (er zijn ook verschillende grote variaties) zijn er nog diverse andere, zoals ook OpenChat en CodeLlama. Elke LLM heeft zo z'n voor en tegens. Let trouwens ook even op de hoeveelheid geheugen die beschikbaar is in je systeem, dit bepaald welke grote LLM je nog fatsoenlijk kan draaien op je machine.
Via ollama pull {LLM}
kunnen de LLM's gedownload worden. ollama list
maakt een mooi lijstje van de gedownloade LLM's beschikbaar en ollama rm {LLM}
kunnen ze verwijderd worden. Hiernaast is het ook mogelijk om je 'eigen' image te maken. Net zoals via een dockerfile kunnen er vooringestelde instructies geschreven worden, waarna er een eigen image opgezet kan worden. Hiermee kan je de LLM van je keuze alvast tweaken voor het gebruik dat je wenst. Zo kan bijvoorbeeld de system prompt en de temperature instellen. Via deze methode kan je ook versies van je eigen LLM beheren.
Nog een interessante optie, is het combineren van Ollama met Open Interpreter. Deze laatste is een code hulp tool, die eventueel via de api van ChatGPT je code kan schrijven en ook uitvoeren. Het wordt hierbij nog extra interessant als dit allemaal lokaal kan draaien. Met deze combinatie kan dat:
% ollama pull codellama
% interpreter --model "ollama/codellama:latest" --api_base http://localhost:11434
Wat de kwaliteit van de gegeven antwoorden is, moet ik zelf ook nog ervaren, maar het scheelt in ieder geval in de kosten en is direct toegankelijk via de Command-line.
.Net 8.0 en andere sdk's op macOS via brew
Afgelopen week is de nieuwe .Net 8 officieel gereleased. Deze versie zou bomvol met verbeteringen zitten die vooral de snelheid nog meer gaat verhogen. Hoe dan ook, ik vind het een belangrijk speerpunt om de software altijd up-to-date te houden.
Dotnet heeft een aardige feature, dat er meerdere variaties van de SDK's geïnstalleerd kunnen zijn. Dit is ook noodzakelijk om zowel .Net 6 en 7 applicaties door elkaar te kunnen gebruiken. Via dotnet --list-sdks
krijg je snel te zien welke geïnstalleerd zijn.
Dotnet heb ik via brew
geïnstalleerd. Wat me al eerder opviel bij brew, is dat hij simpelweg altijd de laatste versie installeert van wat dan ook. Zo heb ik spontaan de nieuwe Reaper ontvangen en een poos terug de nieuwe Guitar Pro, waar ik beide geen licentie voor had. Voor dotnet-sdk
geldt hiervoor hetzelfde. Bij het installeren van versie 8, worden alle eerdere geïnstalleerde versies verwijderd. Je krijgt dan iets als dit te zien:
You must install or update .NET to run this application.
Architecture: arm64
Framework: 'Microsoft.NETCore.App', version '7.0.0' (arm64)
.NET location: /usr/local/share/dotnet/
The following frameworks were found:
8.0.0 at [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Learn more:
https://aka.ms/dotnet/app-launch-failed
To install missing framework, download:
https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=7.0.0&arch=arm64&rid=osx-arm64&os=osx.14
Process finished with exit code 150.
Een mogelijke oplossing is deze niet via brew
toe te voegen, maar de officiële installatie van Microsoft. Maar er is ook een alternatief: homebrew-dotnet-sdk-versions.
Deze GitHub bevat een 'tap' om verschillende versies parallel te installeren. En het is heel simpel:
brew tap isen-ng/dotnet-sdk-versions
brew install --cask <version>
dotnet --list-sdks
Bij <version>
kan je bijvoorbeeld kiezen voor dotnet-sdk8-0-100
en dotnet-sdk7-0-400
. Als je hierna dotnet --list-sdks
uitvoert krijg je wat je eigenlijk al eerder verwacht had:
% dotnet --list-sdks
7.0.404 [/usr/local/share/dotnet/sdk]
8.0.100 [/usr/local/share/dotnet/sdk]