Loading...

Blog

Lokale LLM's draaien met het gemak van containers

28-11-2023

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

20-11-2023

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 brewgeï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]

NuGet package versies via Directory.Packages.props

29-09-2023
Versimpelt nuget versie beheer via ManagePackageVersionsCentrally en Directory.Packages.props

Disk quota volume voor Docker

16-09-2023
Docker heeft momenteel out of the box geen mogelijkheid om een quota in te stellen op een volume. Dit kan via een tmpfs, maar deze is niet persistent bij herstart. Dit is op te lossen met een disk image.

Interessante en gratis AI tools

30-01-2023
Korte lijst van interessante en soms gratis AI tools

Bash template

09-01-2023
De originele template die ik ooit ergens gevonden heb om mijn bash scripts van een aantal standaard variabelen te voorziet, bleek niet om te kunnen gaan met spaties in de directory namen. De oplossing was eenvoudig toe te passen.

iPhone 2Fa zonder app

15-02-2022
Tot mijn verbazing is het mogelijk om 2Fa te gebruiken zonder extra app met macOS, IOS en IpadOS.

.NET Everywhere - Windows, Linux, and Beyond - Het einde van System.Drawing is in zicht

14-11-2021
Met de komst van .Net 6 zijn de eerste stappen genomen om System.Drawing uit te faseren. Zo is deze libary nu als "Windows Only" gemarkeerd. Gelukkig zijn er alternatieven om bestaande code simpel aan te passen en toekomst zeker te maken.

Reset mysql root password in docker container

09-11-2021
In veel gevallen start ik MySql in Docker zo op, dat er een random root wachtwoord wordt aangemaakt. Dit is prima, mits je of het wachtwoord uit de logfile haalt. In het geval dat je deze niet hebt, kan je mogelijk in de problemen komen.

.Net XUnit test herkend geen actions

23-10-2021
Asp.Net Core XUnit unittest project herkend geen actions

ZFS dataset niet aanwezig na stroomonderbreking

20-09-2021
Nadat de spanning van een bepaalde machine per ongeluk uitgevallen was, starte een aantal Docker services op deze machine niet meer op. Het blijkt al snel dat Docker niet gestart is, oftewel niet heeft kunnen opstarten.

Zfs snapshot als standaard gebruiker

11-08-2021
Voeg rechten toe aan een gewone gebruiker om snapshots te maken

Net 5.0 service op MacOS

19-06-2021
Uitvoeren van een achtergrond service via Launchd op MacOS, gemaakt in DotNet Core

Opstarten nginx met ontbrekende (Docker) host

22-02-2020
Herstarten nginx zonder foutmelding als reverse proxy host ontbreekt

DotNet Core achtergrond service onder Linux

28-12-2019
Systemd service onder linux met dotnet core

Uitbreiden swap

15-12-2019
Meer virtueel geheugen toewijzen aan linux server

Verplaatsen van docker storage lokatie

05-09-2019
Verplaats docker data storage naar andere partitie

Testen verplaatsen Docker volume van Mailcow naar ZFS pool

06-05-2019
Na de installatie van Mailcow via Docker op een Linux productie server, blijkt dat de opslag van de mail data in een Docker volume staat, waardoor de root partitie van de server langzaam volloopt. Mailcow biedt een beschrijving om dit aan te passen.