Despliega tu propio ChatGPT privado con Kubernetes: OpenAI Whisper y GPT en tu VPS

Despliega tu propio ChatGPT privado (con Whisper y GPT) usando Kubernetes en tu VPS

¿Alguna vez has soñado con tener tu propio asistente de IA conversacional (parecido a ChatGPT) funcionando en tu VPS? ¿Y que incluso pueda transcribir mensajes de voz usando Whisper? Hoy vamos a desplegar, paso a paso, una solución moderna combinando OpenAI Whisper para transcripción de voz y un pequeño modelo GPT open source, todo orquestado hermosamente con Kubernetes. ¡Ideal para aprender, automatizar o mantener segura tu información sensible!

¿Para qué sirve este proyecto?

  • ChatGPT privado: Instala una interfaz básica donde puedes escribir o dictar preguntas y obtener respuestas del modelo, todo sin enviar datos a servidores externos.
  • Whisper local: Sube un audio o habla por micrófono y lo transcribirá automáticamente.
  • Ideal para experimentos, automatización de tareas o como backend de bots privados.

Arquitectura de la solución

  • Servicio 1: backend FastAPI, expone endpoints para transcribir audios (usando Whisper) y recibir preguntas de texto.
  • Servicio 2: contenedor con un pequeño modelo GPT (ejemplo: GPT4All o llama.cpp), accesible en la red interna.
  • Servicio 3: frontend muy sencillo en Flask o Node.js, para conversar y subir audios.

Ficheros YAML completos

Montaremos tres Deployments con su Service correspondiente. Puedes afinar recursos o images según el hardware de tu VPS, aquí tienes una base sobre la que experimentar.

1. Namespace y ConfigMaps

apiVersion: v1
kind: Namespace
metadata:
  name: ia-chat

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: gpt-config
  namespace: ia-chat
data:
  MODEL_PATH: "/models/ggml-gpt4all-j.bin"

2. Despliegue de Whisper (transcriptor de voz)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: whisper-api
  namespace: ia-chat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: whisper-api
  template:
    metadata:
      labels:
        app: whisper-api
    spec:
      containers:
      - name: whisper
        image: ghcr.io/openai/whisper-asr-webservice:latest
        ports:
        - containerPort: 9000
        resources:
          limits:
            cpu: "2"
            memory: "2Gi"
---
apiVersion: v1
kind: Service
metadata:
  name: whisper-api
  namespace: ia-chat
spec:
  selector:
    app: whisper-api
  ports:
    - protocol: TCP
      port: 9000
      targetPort: 9000

3. Despliegue de GPT4All/llama.cpp (chatbot local)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: local-gpt
  namespace: ia-chat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: local-gpt
  template:
    metadata:
      labels:
        app: local-gpt
    spec:
      containers:
      - name: gpt
        image: ghcr.io/gpt4all/gpt4all-api:latest
        envFrom:
        - configMapRef:
            name: gpt-config
        ports:
        - containerPort: 5000
        volumeMounts:
        - mountPath: /models
          name: model-volume
      volumes:
      - name: model-volume
        hostPath:
          path: "/opt/gpt-models"  # Ajustar ruta con tu modelo
---
apiVersion: v1
kind: Service
metadata:
  name: local-gpt
  namespace: ia-chat
spec:
  selector:
    app: local-gpt
  ports:
    - protocol: TCP
      port: 5000
      targetPort: 5000

4. Despliegue de Frontend Flask

apiVersion: apps/v1
kind: Deployment
metadata:
  name: chat-frontend
  namespace: ia-chat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: chat-frontend
  template:
    metadata:
      labels:
        app: chat-frontend
    spec:
      containers:
      - name: frontend
        image: ghcr.io/usuario/flask-chatgpt-frontend:latest
        ports:
        - containerPort: 8080
        env:
        - name: WHISPER_URL
          value: "http://whisper-api.ia-chat.svc.cluster.local:9000"
        - name: GPT_URL
          value: "http://local-gpt.ia-chat.svc.cluster.local:5000"
---
apiVersion: v1
kind: Service
metadata:
  name: chat-frontend
  namespace: ia-chat
spec:
  type: NodePort
  selector:
    app: chat-frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30888

¿Cómo lo utilizo?

  1. Descarga un modelo compatible y guárdalo en tu VPS bajo /opt/gpt-models/ggml-gpt4all-j.bin. Puedes encontrar modelos ligeros de prueba en los repositorios de gpt4all (consulta licencias y hardware requerido).
  2. Despliega los recursos con kubectl apply -f en el orden mostrado.
  3. Abre tu navegador apuntando a http://<ip-de-tu-vps>:30888 y prueba tu propio chat privado, ¡por voz o por texto!

¿Qué aprendes con este proyecto?

  • Buenas prácticas de microservicios y segregación de responsabilidades.
  • Uso de Kubernetes Services para redes internas seguras.
  • Montaje de volúmenes para modelos pesados (hostPath).
  • Variables de entorno y ConfigMaps para parametrizar despliegues IA.
  • Escalabilidad modular: puedes añadir GPU, intermediarios cache, otros frontends, ¡o tus propios plugins!

Consejos y troubleshooting

  • Si usas VPS baratos, escoge modelos ligeros (ggml). El rendimiento variará mucho según la CPU.
  • El frontend en Flask es sólo un punto de partida. ¡Anímate a conectarlo con Telegram, Slack o tus aplicaciones privadas!
  • Si tu cluster tiene GPU, revisa imágenes que aprovechen aceleración (por defecto, estos ejemplos son sólo CPU).
  • Checa los logs con kubectl logs -n ia-chat <POD> si algún servicio no responde.
  • Evita exponer directamente tus endpoints de IA a Internet, usa CORS restringido o firewalls.

¡Con esto puedes tener tu propio ChatGPT privado y transcriptor de voz en minutos! Comparte en los comentarios mejoras, ideas y tus experimentos, ¡y cuida bien tus tokens!

Avatar

Por Mid