Problema

Los entusiastas de la infraestructura casera suelen combinar servidores antiguos, tarjetas aceleradoras y discos de alta velocidad para ejecutar cargas de trabajo de IA, contenedores y servicios de respaldo. Cuando la arquitectura incluye varios tipos de CPU (EPYC, Xeon, Power8), GPUs de consumo (RTX 3090) y GPUs de centro de datos (Tesla P100, A2), además de almacenamiento NVMe, SAS y cintas LTO, la complejidad de la gestión crece rápidamente. Los síntomas típicos son:

  • Saturación intermitente de los enlaces de 10 GbE, aunque el ancho de banda nominal parece suficiente.
  • Inestabilidad de los nodos GPU bajo carga prolongada (reinicios, throttling).
  • Dificultad para exponer volúmenes NVMe a máquinas virtuales sin perder rendimiento.
  • Confusión al asignar recursos de RAM y CPU entre Proxmox, contenedores y máquinas virtuales.

En esencia, el problema es cómo diseñar una arquitectura homelab que mantenga rendimiento, estabilidad y facilidad de gestión pese a la heterogeneidad del hardware.

Causa

  1. Red sin segmentación adecuada
    Con varios enlaces de 10 GbE y 2.5 GbE compartidos entre almacenamiento NFS, tráfico de IA y gestión, el tráfico de control compite con el de datos. La falta de VLANs o QoS provoca colisiones y pérdida de paquetes.

  2. Distribución de energía y refrigeración insuficiente
    GPUs de alta potencia (RTX 3090, Tesla P100) generan más de 300 W cada una. Si el rack no tiene una distribución de carga eléctrica balanceada, los breakers se disparan o la fuente de alimentación entra en modo de protección térmica.

  3. Asignación estática de recursos en Proxmox
    Cuando se crean VM o LXC con valores fijos de vCPU y RAM, cualquier cambio en la carga (por ejemplo, iniciar un nuevo experimento LLM) obliga a re‑planificar manualmente, lo que lleva a sobre‑commit o a sub‑utilización.

  4. Acceso directo a dispositivos NVMe sin pasar por un pool de almacenamiento
    Conectar discos NVMe directamente a VM puede romper la consistencia de ZFS o de LVM, y dificulta la migración de máquinas entre hosts.

  5. Falta de monitorización centralizada
    Sin un stack de métricas (Prometheus + Grafana, por ejemplo), los cuellos de botella aparecen solo cuando el servicio ya está degradado.

Solución

Una arquitectura modular basada en tres capas simplifica la gestión:

1. Red de datos segmentada

  • VLANs: crea al menos tres VLANs – 10GbE-Storage (NFS, iSCSI), 10GbE-Compute (tráfico GPU, RDMA) y Mgmt (SSH, API).
  • QoS: asigna prioridad alta a la VLAN de almacenamiento; la de gestión puede usar DSCP EF.
  • LACP: agrupa los dos puertos de 10 GbE en un LAG activo‑activo para balanceo de carga y redundancia.

2. Distribución eléctrica y refrigeración

  • Balanceo de fases: conecta cada rack a una fase distinta del panel eléctrico para evitar picos.
  • UPS dimensionado: calcula la carga total (potencia GPU × n + CPU × n + discos) y añade un margen del 20 %.
  • Ventilación dirigida: usa ventiladores de extracción en la parte superior del rack y de suministro en la base; coloca los servidores GPU en la zona más fresca.

3. Proxmox con pools de recursos

  • CPU pinning: asigna rangos de cores físicos a grupos de VM (hostpci0 para GPU, hostpci1 para NVMe).
  • Memory pools: define memory y balloon en la plantilla de VM para que Proxmox ajuste dinámicamente la RAM según la carga.
  • GPU passthrough con vfio-pci: usa vfio-pci para exponer cada GPU a una VM dedicada; mantén un GPU‑pool para balancear la carga cuando una VM no necesita aceleración.

4. Almacenamiento unificado

  • ZFS on Linux: crea un pool tank con los SSD SAS y los NVMe como vdevs híbridos (mirror + cache).
  • iSCSI target: exporta LUNs a Proxmox usando targetcli. Las VM acceden a bloques sin conocer la topología física.
  • Snapshots y replicación: habilita zfs send/recv a la biblioteca LTO para backups offline.

5. Monitorización y alertas

  • Node Exporter en cada host para métricas de CPU, RAM, temperatura y consumo eléctrico.
  • GPU Exporter (nvidia‑smi) para exposición de uso de memoria y potencia.
  • Grafana dashboards preconfigurados para visualizar cuellos de botella de red y de almacenamiento.
  • Alertmanager con notificaciones por Telegram o correo cuando la temperatura supera 80 °C o el uso de enlace supera el 85 %.

Cuándo aplicar esta solución

  • Síntomas de saturación de red: latencia alta en NFS, caídas de contenedores al iniciar trabajos de IA.
  • Reinicios inesperados de GPUs: logs de nvidia-smi indican throttling térmico.
  • Migraciones frecuentes de VM: cuando se necesita mover cargas entre nodos sin perder acceso a discos NVMe.
  • Escalado de workloads AI: cuando se añaden más tarjetas GPU y la carga de entrenamiento supera la capacidad actual.

No es necesario aplicar todo el stack si el homelab solo ejecuta servicios ligeros (p. ej., solo contenedores Docker). En entornos con una única GPU y almacenamiento local, la segmentación de red y la monitorización básica pueden ser suficientes.

Código

# Configuración básica de LACP en un switch Cisco
interface Port-channel1
  description LAG-10GbE-Compute
  switchport mode trunk
  switchport trunk allowed vlan 10,20,30
  spanning-tree portfast trunk
  lacp system-priority 32768
  exit

# Proxmox: crear un pool de memoria y asignar a una VM
pvesh create /pools -poolid gpu-pool -comment "GPU‑bound VMs"
pvesh set /nodes/node1/qemu/101/config -memory 32768 -balloon 16384 -cpuunits 2048
pvesh set /pools/gpu-pool/vms/101

Verificación

  1. Ping intra‑VLAN: desde un host en 10GbE-Compute verifica que la latencia a la IP del NFS sea < 1 ms.
  2. GPU health: ejecuta nvidia-smi -q -d POWER y comprueba que la potencia media esté por debajo del 80 % de la TDP.
  3. ZFS health: zpool status -v tank debe mostrar ONLINE y sin errores de checksum.
  4. Alertas: dispara una alerta artificial (por ejemplo, aumenta la carga de CPU al 100 %) y confirma que Grafana envía la notificación configurada.

Notas adicionales

  • Cuando uses tarjetas Tesla con NVLink, habilita nvidia-persistenced para evitar la pérdida de contexto al reiniciar la VM.
  • Si el rack está en un sótano con alta humedad, añade deshumidificadores; la condensación es una causa frecuente de fallos intermitentes en discos SAS.
  • Documenta siempre la asignación de PCI IDs en /etc/modprobe.d/vfio.conf; un error tipográfico puede impedir que el GPU pase al modo vfio-pci.
  • Considera usar Proxmox Backup Server para snapshots de VM en la biblioteca LTO; la velocidad de restauración es mucho mayor que la de cinta tradicional.