Talos Kubernetes LLaMA / Llama3 Stack med Rancher

Steg-for-steg-veiledning for on-prem KI-tjenester med GPU-støtte, LLaMA- eller Llama3-modeller, REST API eller GUI-løsninger (Gradio, text-generation-webui, Flowise, Langflow) – og beste praksis.


Oversikt

I denne guiden viser vi hvordan du kan sette opp en robust on-premises KI-infrastruktur basert på:


1. Forutsetninger og oppstart av Talos-klynge

Maskinvare og OS-valg

Oppretting av klynge i Talos

Talos er en minimal Linux-distribusjon spesifikt for Kubernetes:

# Generer Talos-konfig for cluster:
talosctl gen config my-talos-cluster https:// --output ./cluster

# Tildel config til controlplane:
talosctl apply-config --insecure --nodes  \
  --file ./cluster/controlplane.yaml

# Tildel config til worker:
talosctl apply-config --insecure --nodes  \
  --file ./cluster/worker.yaml

# Hent kubeconfig (for kubectl):
talosctl kubeconfig --nodes  --force

Etterpå kan du kjøre kubectl get nodes for å bekrefte at klyngen er oppe. Se talos.dev for detaljer om Talos-installasjon.


2. Installer GPU Operator for NVIDIA-støtte

For å kjøre store modeller effektivt trenger du GPU-drivere og tilhørende verktøy i Kubernetes. NVIDIA GPU Operator automatisk installerer drivere, container-toolkit, m.m.:

helm repo add nvidia https://nvidia.github.io/gpu-operator
helm install --wait --generate-name nvidia/gpu-operator \
  --create-namespace --namespace gpu-operator

Når operatoren er klar, kan du lage pods med resources.limits.nvidia.com/gpu: 1 og kjøre f.eks. nvidia-smi i containeren for å verifisere at GPU er tilgjengelig.


3. Rancher – administrasjon av klyngen

Rancher er et oversiktlig, grafisk grensesnitt for å administrere Kubernetes-klynger. Installer ved hjelp av Helm:

helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
helm install rancher rancher-latest/rancher \
  --namespace cattle-system --create-namespace \
  --set hostname=rancher.ai.local

Pek DNS eller /etc/hosts mot rancher.ai.local, og gå til http://rancher.ai.local i en nettleser. Opprett admin-bruker og vurder SSO/OIDC-oppsett.


4. Ingress-controller (Nginx/Traefik) og sikre URL-er

For å eksponere tjenester via en enkel URL – f.eks. llama3api.ai.local, flowise.ai.local osv. – trengs en Ingress-controller (Nginx eller Traefik).


5. LLaMA / Llama3 – ulike måter å kjøre modellene på

LLaMA er en språkmodell fra Meta AI, og Llama3 antas å være en videreutvikling eller neste generasjon. Du kan bruke:

I Kubernetes konfigurerer du enten en Deployment med ditt favoritt-dockerimage (Flowise, webui, Gradio, etc.) og spesifiserer GPU-limits. Eksempel med Flowise:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flowise
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flowise
  template:
    metadata:
      labels:
        app: flowise
    spec:
      containers:
      - name: flowise
        image: flowiseai/flowise:latest
        ports:
          - containerPort: 3000
        resources:
          limits:
            nvidia.com/gpu: 1  # be om 1 GPU
---
apiVersion: v1
kind: Service
metadata:
  name: flowise-service
spec:
  selector:
    app: flowise
  ports:
  - port: 3000
    targetPort: 3000
    name: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: flowise-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: flowise.ai.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: flowise-service
            port:
              name: http

Opprett DNS-oppføring for flowise.ai.local eller legg til i /etc/hosts. Dermed kan du nå Flowise i nettleser med GPU-støtte. Andre verktøy som Langflow, text-generation-webui, Gradio-apper, Hugging Face TGI osv. settes opp på samme måte – bare bytt Docker-image og porter.


6. Eksempel på REST API med FastAPI og Hugging Face Transformers

Vil du eksponere en LLM via et REST-endepunkt? Her er et enkelt eksempel med FastAPI, Transformers og GPU-støtte:

server.py

from fastapi import FastAPI
from pydantic import BaseModel
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

app = FastAPI()

# Eksempel: Llama3 eller llama-7b-hf
model_name = "decapoda-research/llama-7b-hf"
device = "cuda" if torch.cuda.is_available() else "cpu"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to(device)

class Prompt(BaseModel):
    text: str

@app.post("/predict")
def predict(prompt: Prompt):
    inputs = tokenizer.encode(prompt.text, return_tensors="pt").to(device)
    outputs = model.generate(inputs, max_length=50)
    response_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return {"response": response_text}

Dockerfile

FROM python:3.9-slim

RUN pip install fastapi uvicorn transformers torch

COPY server.py /app/
WORKDIR /app

CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8000"]

Bygg og push bildet til et registry:

docker build -t your-registry/llama3-api:latest .
docker push your-registry/llama3-api:latest

Deploy i Kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: llama3-api
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: llama3-api
  template:
    metadata:
      labels:
        app: llama3-api
    spec:
      containers:
      - name: llama3-api
        image: your-registry/llama3-api:latest
        ports:
          - containerPort: 8000
        resources:
          limits:
            nvidia.com/gpu: 1
---
apiVersion: v1
kind: Service
metadata:
  name: llama3-service
spec:
  selector:
    app: llama3-api
  ports:
  - port: 80
    targetPort: 8000
    name: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: llama3-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: llama3api.ai.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: llama3-service
            port:
              number: 80

Nå kan du POST http://llama3api.ai.local/predict med JSON-objekt {"text": "Hei, Llama"} for å få svar. Bytt model_name etter behov – f.eks. for en hypotetisk Llama3 13B.


7. Sikkerhet og RBAC

For en produksjonsklar KI-klynge er sikkerhet avgjørende:


8. Persistering av modeller og data

Store modeller (f.eks. 13B, 30B eller mer) kan kreve titalls GB. For å unngå å laste dem ned hver gang:


9. Overvåkning, logging og offline-hensyn

Overvåkning og logging

Offline-hensyn


10. CPU vs GPU for LLaMA

LLaMA- (eller “Llama3-”) modeller kan kjøres på CPU for mindre varianter (4–7B), men GPU gir stor ytelsesforbedring for større modeller (13B, 30B, 65B). Du kan ha en mix av CPU-pods for lette oppgaver og en GPU-node for tyngre.


11. Finnes det alt-i-ett-løsninger?

Det finnes ikke et “one-size-fits-all”-repo som har Talos + GPU Operator + Rancher + LLaMA (eller Llama3) ferdig, men du kan:


Oppsummering – Talos, Rancher og LLaMA / Llama3

  1. Installer Talos-klynge (1x controlplane, 1x worker med GPU).
  2. NVIDIA GPU Operator for å få driver/container-toolkit i Kubernetes.
  3. Rancher for visuelt klusteradministrasjon og RBAC-styring.
  4. Ingress Controller (Nginx, Traefik) for pene URL-er og HTTPS.
  5. LLaMA-/Llama3-applikasjoner: Flowise, text-generation-webui, Langflow, Gradio, Python-REST-API m.m.
  6. Sikkerhet (RBAC, OIDC, Nettverksregler) og persistens (PVC, S3, caching).
  7. Overvåkning + logging (Prometheus, Grafana, Loki, EFK) for driftssikkerhet.
  8. Offline-løsning med lokalt container registry, helm pull, Talos ISO for lukkede miljøer.

Med disse stegene får du en komplett on-prem KI-løsning for LLaMA- eller Llama3-modeller (og andre LLM-varianter), administrert via Talos og Rancher, med GPU-akselerasjon fra GPU Operator.


Viktige lenker