Neuer Massespeicher im Laptop

So langsam aber sicher wird der Speicherplatz für den Massespeicher auf dem Laptop zu klein, das ganze KI-Zeug braucht relativ viel Speicherplatz.
Da wir mit LVM / LUKS arbeiten, sind ein paar Schritte mehr notwendig…

  • Booten mit CloneZilla und Festplatte auf externe HDD klonen
  • neue SSD einbauen
  • Booten mit CloneZilla und Image zurück auf Festplatte spielen, Partitionen wie im Original belassen und nicht prozentual anpassen.
  • Live-USB stick booten und mit gparted die LVM-Partition entsperren und vergrößern. Gparted sieht nur die LVM-Partition und nicht die darin enthaltenen ‚logischen Volumen‘
  • Live-System beenden und ins normale System booten

Einen Überblick über die einzelnen Volume erhalten wir mit lvdisplay

Zunächst entfernen wir die Swap-Partition:

# Swap deaktivieren
swapoff -a
# mit lvremove die die logische Partionion 
lvremove /dev/vgmint/swap_1

Ermittel nun den freien Platz in der Partition: vgdisplay. Wenn die Einheit nicht ganz passt, kann sie mit vgdisplay --unit G angepasst werden.

Nachdem der Versuch das ganze mit GB anzugeben wegen Umrechnungsungenauigkeiten nicht geklappt hat, rechnen wir das ganze in Extends aus:

1 Extent = 4 MiB = 0,00390625 GB
32 GB / 0.00390625 ≈ 8192 Extents

715128 (verfügbar) - 8192 (für Reserve) = 706936 Extents

# Befehl zur Vergrößerung des Volumens
lvextend -l +706936 /dev/vgmint/root

Anschließend muss noch das Dateisystem vergrößert werden:

resize2fs /dev/vgmint/root

Und die Swap-Partion wieder hergestellt (es wird der komplette leere Platz verwendet) werden:

lvcreate -l 100%FREE -n swap_1 vgmint
mkswap /dev/vgmint/swap_1
swapon /dev/vgmint/swap_1

# Zum Überprüfen ob alles läuft:
swapon --show
free -h

Virtuelle Python Umgebungen

Die Einrichtung erfolgt im Verzeichnis in dem das Script liegt/ von dem das Script aus gestartet wird.
python3 -m venv NAME

Der NAME ist durch den zu verwenden Name zu ersetzten. Sinnvoll ist es die Umgebung gleich zu benennen wie das Script, damit später die Zuordnung klar ist.

Die Umgebung wird aktiviert mit:
source NAME/bin/activate

Nach dem aktivieren können fehlende bzw. spezielle Bibliotheken installiert werden. z.B.:
pip3 install pillow pyexiftool langchain-ollama

Lokale LLM im Docker

Wir verwenden Ollama (https://ollama.com/)

Installation über docker compose.

docker-compose.yaml

services:
  ollama:
    image: docker.io/ollama/ollama:rocm
    container_name: ollama
    volumes:
      - ollama:/root/.ollama
    ports:
      - 11434:11434
    devices:
      - /dev/kfd:/dev/kfd
      - /dev/dri:/dev/dri
#    environment:
#      - OLLAMA_KEEP_ALIVE=1h
#      - OLLAMA_HOST=127.0.0.1
    pull_policy: always
    tty: true
    restart: unless-stopped

volumes:
  ollama:
    driver: local

Umgang mit Models:

# Modell installieren
docker exec -it ollama ollama pull llava:v1.6
# Modell entfernen
docker exec -it ollama ollama rm llava:v1.6
# Modell aus dem Speicher entladen
docker exec -it ollama ollama stop llava:v1.6
# Modell auflisten
docker exec -it ollama ollama list

Multimodal-Model (die sich u.a. für die Bildanalyse eignen)

  • llava:v1.6; llava:13b : LLaVA is a novel end-to-end trained large multimodal model that combines a vision encoder and Vicuna for general-purpose visual and language understanding.
  • DeepSeek-Janus-Pro-7B

Modelle für Übersetzungen:

BIOS-Update

Um die aktuelle Version anzuzeigen:
sudo dmidecode -s bios-version

Update der Firmware-Infos:
sudo fwupdmgr refresh --force

Geräte anzeigen lassen:
sudo fwupdmgr get-devices

Alle verfügbaren Updates herunterladen:
fwupdmgr get-updates

Firmeware-Update durchführen, sofern notwenig:
sudo fwupdmgr update

beruhigend…

Es ist sehr beruhigend wenn die Personalabteilung zur Einführung der digitalen Personalakte mit den Worten informiert:

Durch den Wegfall des Versands von Personalakten zu den jeweiligen hamburgischen Behörden, werden Ressourcen eingespart und der Datenschutz wird zudem zukünftig sicherer gewahrt, da es nahezu ausgeschlossen ist, dass Unberechtigte an die Daten gelangen können.

Pihole + Unbound mit Docker auf dem Raspi

Ziel

pihole und unbound in jeweils einem eigenen Container, um mögliche Port Konflikte zu vermeinden.
Es wird macvlan verwendet

Quelle: https://forum.openmediavault.org/index.php?thread/50758-pihole-and-unbound-in-docker/
Was gegen diese Lösung mit den macvlan spricht: https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/

Netzwerk einrichtung MACVLAN

Erstelle unter „Networks“ ein neues Netzwerk:

  • Name: mypiholevlan
  • Driver: macvlan
  • Parent network: eth0 (den richtigen Adapter auswählen, mit dem das VLan verknüpft sein soll)
  • Subnet: „192.168.130.0/24“
  • Gateway: „192.168.130.1“ (Im Regelfall der Router)
  • IP range: „192.168.130.12/30 # 192.168.130.12 and 192.168.130.13“ (Kann frei bleiben, sofern man die IP-Adressen selbst und ohne DHCP verteilet.
    Alternativ reserviert man ein paar IP-Adressen, die von Docker verwendet werden dürfen und nicht per DHCP genutzt werden.)
  • Der pihole

# Pihole
#
# https://github.com/pi-hole/docker-pi-hole?tab=readme-ov-file
#
version: "3"

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    hostname: pihole #Choose your hostname
    dns:
     - "192.168.130.13" #DNS1: Should be the address of your unbound system
     - "9.9.9.9"        #DNS2: Quad9 as an example, optional
    networks:
      mypiholevlan:    #the network name you specified in the first step
        ipv4_address: 192.168.130.12    #The IP address you want to assign to your pihole. Make sure this address is available to be used in your network
    # For DHCP it is recommended to remove these ports and instead add: network_mode: "host"
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      # - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server
      - "80:80/tcp"
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    environment:
      - TZ='Europe/Berlin'
      - WEBPASSWORD=${PIHOLE_WEBPASSWORD}
      - DHCP_ACTIVE=false
    labels:
      - com.centurylinklabs.watchtower.enable=false
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    restart: unless-stopped
    # Required if you are using Pi-hole as your DHCP server, else not needed
    # cap_add:
      # - NET_ADMIN

networks:
  mypiholevlan:  #network name
    external: true

Unbound-Container

version: "3"

services:
  unbound:
    container_name: unbound
    image: mvance/unbound:latest
    hostname: unbound
    networks:
      mypiholevlan: #the network name you specified in the first step
        ipv4_address: 192.168.130.13 #The IP address you want to assign to Unbound. Make sure this address is available to be used in your network
    ports:
      - "53:53/tcp"
      - "53:53/udp"
    #volumes:    #It's important to comment out these two lines if you don't want to use your own unbound configuration! An own configuration can be tricky as you have to provide several config files manually.
    #  - './etc-unbound:/opt/unbound/etc/unbound'
    restart: unless-stopped
networks:
  mypiholevlan:  #the network name you specified in the first step
    external: true