Come eseguire un Agente AI su Proxmox senza scheda video

Introduzione

Eseguire un agente AI locale su un homelab senza GPU dedicata è una sfida comune: la maggior parte dei modelli LLM richiede VRAM per l’inferenza, ma non tutti hanno una scheda video compatibile (o vogliono dedicarla). La soluzione che abbiamo adottato per Hermes Agent su Proxmox VE usa due leve fondamentali:

  • Offloading dell’inferenza su cloud tramite OpenRouter (API unificate per modelli gratuiti e a pagamento)
  • Containerizzazione leggera in LXC invece di VM pesanti

Il risultato: un agente AI sempre attivo, accessibile via Telegram/CLI, che gira su un nodo Proxmox senza GPU e consuma pochissime risorse.

Architettura a blocchi

Ecco come si compone lo stack:

  • Proxmox VE 8.x (host bare-metal)
  • Container LXC unprivileged (Debian 12 “bookworm”, 2 vCPU, 4 GB RAM, 20 GB disco)
  • Hermes Agent (runtime Python, configurato via config.yaml)
  • OpenRouter come provider LLM (modello openrouter/free per test, openrouter/auto in produzione)
  • Telegram Bot API per interfaccia conversazionale
  • Home Assistant (opzionale, per controllo domotica via tool ha_*)

Perché OpenRouter: niente GPU, niente problemi

OpenRouter espone decine di modelli (Llama, Mixtral, Qwen, Gemma, ecc.) dietro un’unica endpoint compatibile OpenAI. Basta una OPENROUTER_API_KEY nel .env e Hermes la userà come provider LLM predefinito.

# ~/.hermes/.env (solo le voci rilevanti)
MODEL_PROVIDER=openrouter
MODEL_NAME=openrouter/auto
OPENROUTER_API_KEY=sk-or-v1-...
# oppure per i modelli gratuiti:
# MODEL_NAME=openrouter/free

Vantaggi:

  • Zero dipendenze CUDA/ROCm, zero driver GPU sull’host
  • Switch istantaneo tra modelli (basta cambiare MODEL_NAME)
  • Fatturazione a consumo / tier gratuito per sperimentazione
  • Latenza accettabile (~1-2 s prima token) su connessione fibra

Container LXC vs VM: perché LXC vince qui

RisorsaVM (KVM)LXC (unprivileged)
Overhead RAM~500 MB solo per kernel guest~0 (kernel condiviso)
Avvio30-60 s< 3 s
Backup/RestoreImmagine disco interaDirectory bind-mount, snapshot ZFS istantaneo
Accesso host (GPU, /dev, rete)Passthrough complessoBind mount nativi, lxc.cgroup2.devices.allow
Densità2-3 VM per nodo entry-level10+ container

Per un agente AI che gira 24/7 e fa solo I/O di rete (chiamate API, Telegram, Home Assistant), LXC è la scelta ovvia: più densità, backup atomici con pct snapshot, migrazione live tra nodi Proxmox senza downtime.

Setup passo-passo

1. Crea il container LXC

# Su Proxmox host (root)
pct create 110 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst   --hostname hermes-agent   --cores 2 --memory 4096 --swap 512   --rootfs local-lvm:20   --net0 name=eth0,bridge=vmbr0,ip=dhcp   --unprivileged 1   --features nesting=1   --onboot 1

pct start 110
pct enter 110

2. Dentro il container: dipendenze di base

apt update && apt install -y   python3 python3-venv python3-pip git curl   ca-certificates gnupg lsb-release

# Utente non-root per sicurezza
useradd -m -s /bin/bash hermes
su - hermes

3. Installa Hermes Agent

cd ~
git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent
python3 -m venv .venv
source .venv/bin/activate
pip install -e .[all]  # include dipendenze opzionali (browser, voice, ecc.)

4. Configurazione (config.yaml + .env)

# ~/.hermes/config.yaml (estratto chiave)
profile: default
model:
  provider: openrouter
  name: openrouter/auto
  temperature: 0.3
  max_tokens: 4096

telegram:
  enabled: true
  # token e chat_id nel .env

homeassistant:
  enabled: true
  # url e token nel .env

skills:
  auto_load: true
  directories:
    - ~/.hermes/skills
    - ./skills
# ~/.hermes/.env (chmod 600!)
MODEL_PROVIDER=openrouter
MODEL_NAME=openrouter/auto
OPENROUTER_API_KEY=sk-or-v1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TELEGRAM_BOT_TOKEN=123456789:AAHXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TELEGRAM_CHAT_ID=654210634
HA_URL=http://192.168.1.XX:8123
HA_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
# TTS opzionale
TTS_PROVIDER=edge
TTS_VOICE=it-IT-DiegoNeural

5. Systemd service per avvio automatico

# /etc/systemd/system/hermes-agent.service (come root nel container)
[Unit]
Description=Hermes Agent
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=hermes
WorkingDirectory=/home/hermes/hermes-agent
Environment=PATH=/home/hermes/hermes-agent/.venv/bin:/usr/bin:/bin
EnvironmentFile=/home/hermes/.hermes/.env
ExecStart=/home/hermes/hermes-agent/.venv/bin/python -m hermes_agent
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now hermes-agent
journalctl -u hermes-agent -f

6. Verifica su Telegram

Invia /start al bot. Hermes risponde e mostra i tool caricati (skills, Home Assistant, ecc.). Prova:

  • accendi luce soggiorno → chiama ha_call_service
  • cerca su web "Proxmox LXC backup" → usa web_search
  • leggi file /etc/hostname → usa read_file

Manutenzione e aggiornamenti

  • Aggiornare Hermes: cd ~/hermes-agent && git pull && pip install -e .[all] + systemctl restart hermes-agent
  • Backup configurazione: snapshot ZFS del dataset LXC (pct snapshot 110 pre-update) + copy ~/.hermes/ su storage remoto
  • Cambiare modello: modifica MODEL_NAME in .env e riavvia il servizio (nessun rebuild)
  • Log centralizzati: journalctl -u hermes-agent -f o forward su Loki/Grafana via systemd-journal-remote

Costi indicativi (OpenRouter, novembre 2026)

ModelloCosto / 1M token (in+out)Note
openrouter/free (es. meta-llama/llama-3.2-3b-instruct:free)$0Rate limit, context 8k-32k, qualità base
openrouter/auto (routing intelligente)~$0,10-0,50Sceglie il miglior rapporto qualità/prezzo per ogni richiesta
anthropic/claude-3.5-sonnet$3 / $15Top-tier coding/reasoning
google/gemini-flash-1.5$0,075 / $0,30Ottimo rapporto qualità/prezzo, context 1M

Un agente attivo 24/7 con ~50 richieste/giorno (misto chat + tool use) sta intorno a 0,50-1,50 €/mese su openrouter/auto, quasi zero su tier gratuito.

Conclusione

Far girare un agente AI completo su Proxmox senza GPU non solo è possibile, ma è la scelta più pragmatica per un homelab: LXC dà densità e gestione immutabile, OpenRouter rimuove il collo di bottiglia hardware. Hermes Agent aggiunge l'orchestrazione (skills, tool use, memoria persistente, voce, browser) trasformando il container in un vero "system administrator sintetico" che risponde su Telegram, governa Home Assistant, scrive codice e fa ricerca web.

Prossimi passi per il lab: aggiungere cronjob per report giornalieri, integrare karakeep-notes per knowledge base locale, testare browser-use per automazioni web complesse — tutto nello stesso container LXC da 4 GB.