11 puntos por GN⁺ 2024-01-14 | 2 comentarios | Compartir por WhatsApp
  • Tiene experiencia usando Siri y Google Assistant. Pueden controlar dispositivos, pero no permiten personalización y dependen de servicios en la nube.
  • Quiere aprender algo nuevo y tener algo genial que pueda usar en su vida diaria. Quiere que el nuevo asistente tenga una personalidad sarcástica y mordaz.
  • Quiere que todo se ejecute localmente. Sin excepciones. No hay razón para que una cafetera esté hablando con un servidor al otro lado del país.
  • Quiere algo más que la función básica de "encender la luz". Espera poder agregar nuevas capacidades en el futuro.

Arquitectura

  • Usa un Protectli Vault VP2420 para firewall, NIPS y enrutamiento VLAN.
  • Expone HomeAssistant a internet para poder usarlo de forma remota sin VPN. Para ello toma medidas de seguridad extremas.
  • Eligió un switch administrable TRENDnet TEG-3102WS para obtener 2.5 gigas a bajo costo.
  • Usa dos RTX 4060Ti en una computadora armada lo más barata posible, comprando la mayoría de las piezas en eBay. La VRAM es importante para suministrarle grandes cantidades de contexto al LLM.
  • Usa un Minisforum UM690 para ejecutar HomeAssistant (y WAF). También podría servir una Raspberry Pi 4, pero ejecuta muchos servicios y Whisper exige bastante al CPU.
  • Un caos gigantesco de cables Ethernet.

Motor de inferencia

  • Eligió vLLM porque quiere un LLM de propósito general que también pueda usarse fuera de HomeAssistant. Es muy rápido y es el único motor capaz de atender a varios clientes al mismo tiempo.
  • Soporta un servidor API compatible con OpenAI, lo que facilita mucho las cosas.
  • Eligió el modelo Mixtral de Mistral AI, cuyo equilibrio entre VRAM y rendimiento le queda perfecto.

Cuantización del modelo

  • Como no puede ejecutar el modelo completo en fp32, eligió una versión cuantizada.
  • La cuantización, como un MP3, reduce un poco la calidad y mejora enormemente los requisitos de recursos.
  • Tuvo que elegir entre GPTQ y AWQ, y como necesitaba pasarle al modelo todo el estado del hogar inteligente, eligió GPTQ.

Integración con HomeAssistant

  • Usó los addons predeterminados de Whisper y Piper de HomeAssistant OS, pero descargó un modelo de voz GlaDOS personalizado desde HuggingFace.
  • HomeAssistant ya tiene una integración con OpenAI, pero no puede controlar dispositivos y no tiene una configuración base_url para obligarlo a hablar con un servidor OpenAI falso en lugar de los servidores de OpenAI, así que no usó toda la funcionalidad extendida.
  • Encontró una integración personalizada, pero ya sabe que el software no funciona así. Después de instalarla, aparecieron dos problemas más.

Resolución de problemas

  • Mixtral usa una plantilla de chat peculiar. No permite prompts de sistema y lanza una excepción si detecta uno.
  • vLLM no soporta la API de function calling de OpenAI. Incluso si la soportara, tendría que ejecutar un modelo especializado en function calling.
  • Para modificar Mixtral, cambió la plantilla de chat para que aceptara un "prompt de sistema". Usó Librechat como UI para lograr que el prompt de sistema funcionara correctamente.

Salida JSON

  • Aunque el modelo no pueda llamar funciones, se le puede pedir que produzca JSON y luego ejecutarlo.
  • Hizo un fork de la integración personalizada y agregó la capacidad de ejecutar servicios de HomeAssistant mediante JSON.

Prompt de GlaDOS

  • Modificó el prompt de GlaDOS para usarlo en su propio asistente.
  • Surgió un problema: al modelo le encanta producir JSON. Incluso ante preguntas simples, devuelve JSON intentando llamar servicios.

Solución

  • Pidió que se insertara un texto conocido cuando el usuario solicitara una tarea. Eligió "$ActionRequired".
  • Filtró eso en su fork y resolvió el problema.

Prompt final

  • Actualizó el prompt inicial con más dispositivos y menos entidades innecesarias.
  • Lo incentiva a no realizar acciones si no se le pidió hacerlo.
  • Después de varios intentos, consiguió algo que funciona casi perfectamente (aunque es un poco lento por la limitación del bus de memoria de la 4060Ti).

Opinión de GN⁺

  • Este proyecto puede ser muy interesante para quienes valoran la privacidad y una experiencia personalizada.
  • Usar un LLM que corre localmente para controlar un hogar inteligente ofrece grandes ventajas en seguridad de datos y velocidad de respuesta.
  • El proceso de construir y personalizar el sistema por cuenta propia es un gran ejemplo de educación técnica y cultura DIY.

2 comentarios

 
xguru 2024-01-15

Está bien resumido, así que fue divertido leerlo.
Como Home Assistant planea añadir funciones de LLM, parece que en el futuro será posible usarlo de forma más sencilla.

Incluso en un canal de YouTube de programas de interiorismo que veo dijeron que están creando productos IoT, así que sería aún más interesante si desde el principio pensaran en hacer posible usar este tipo de cosas también en lugares así.

 
GN⁺ 2024-01-14
Opinión de Hacker News
  • Opinión del fundador de Home Assistant:

    • Home Assistant planea integrar de forma nativa una función similar este año.
    • Enfatiza la necesidad de una API estandarizada para LLM locales y quiere una función para consultar qué puede hacer el modelo.
    • Le gustaría ver LLM locales que soporten capacidades similares a las funciones de OpenAI para que resulten realmente útiles.
    • Quiere resultados ejecutables directamente al generar JSON, sin errores.
  • Experiencia de otro usuario:

    • Señala que falta una explicación clara de los resultados después de la instalación.
    • Menciona que, en comparación con GPT-4, los modelos pequeños tienen limitaciones para realizar tareas complejas.
    • Le gustaría ver ejemplos de salida reales.
  • Usuario que probó un LLM local:

    • Indica que el modelo llava-v1.5-7b-q4 es efectivo para tareas de automatización del hogar.
    • Dice que obtuvo resultados de un nivel similar a GPT-4.
  • Comentarios de un usuario de Home Assistant:

    • Reconoce que no entiende mucho sobre IA y agradece la plantilla para empezar.
    • Menciona que usa Home Assistant en varios lugares y que le ha resultado útil.
  • Pregunta sobre el arreglo de micrófonos:

    • Tiene curiosidad por el nivel de avance de los arreglos de micrófonos usados como hobby.
    • Plantea dudas sobre el rendimiento del micrófono en comparación con dispositivos Echo.
  • Preguntas sobre hardware y configuración:

    • Pregunta qué modelo de GPU se usó y cómo se compara el precio.
    • Solicita información específica sobre la elección de cuantización.
    • Espera que, debido a las limitaciones de VRAM, la precisión se mantenga incluso con un nivel de cuantización bajo.
  • Solicitud de más información sobre la elección del micrófono y la implementación del reconocimiento de voz:

    • Espera más detalles en el futuro sobre la elección del micrófono y la implementación del reconocimiento de voz.
  • Experiencia de un usuario con la API de OpenAI:

    • Escribió un wrapper sencillo en Python usando la API de OpenAI.
    • Usó ESP32-Box y el proyecto Willow para reconocimiento y generación de voz locales.
  • Pregunta sobre la configuración de red:

    • Tiene curiosidad por saber por qué no se usó tailscale en lugar de una configuración de red compleja.
    • Pide una explicación sobre la flexibilidad que ofrece esa infraestructura.