miércoles, diciembre 25, 2024

Cómo montar tu propio servidor de Inteligencia Artificial: Apple Silicon, Ollama, LMStudio & Pinockio

Ayer vimos en la primera parte de este artículo de "Cómo montar tu propio servidor de Inteligencia Artificial: Modelos Open Source, Parámetros y Hardware NVIDIA" cómo elegir un modelo de lenguaje LLM Open Source, en qué nos debemos fijar, y una serie de alternativas con NVIDIA o, como ejemplo, cómo es mi servidor. Hoy vamos a ver otras alternativas y más cosas a tener en cuenta para poder tener nuestro entorno de pruebas para entrenar algoritmos de Machine Leaning y ejecutar proyectos con Inteligencia Artificial on-premise.

Figura 10: Cómo montar tu propio servidor de Inteligencia Artificial.
Apple Silicon, Ollama, LMStudio & Pinockio

Además de las alternativas descritas, tenemos también la opción Apple Silicon, que también utilizo ya que tengo un Macbook Pro M1 Max con 1TB de disco duro y 32GB de RAM - el jefe tiene un M3 - Con esta configuración puedo levantar modelos de 7B (y algunos de más billions) a una velocidad más que decente, aunque teniendo ya la generación M4 se empieza a notar. Ahora con los M4 la potencia y la velocidad como podéis imaginar es mayor, aunque como pasa siempre en Apple, tenemos que pagarla (a veces a precio de oro). 

Figura 11: Libro de Machine Learning aplicado a Ciberseguridad de
Carmen TorranoFran Ramírez, Paloma Recuero, José Torres y Santiago Hernández

Una configuración mínima para poder ejecutar modelos decentes sería un Macbook Pro M4 con 32GB de RAM y 1TB de disco duro. Esta configuración ronda los 3.000€ pero vas a tener el rendimiento “parecido” (sólo se equipara si tienes el M4 Max) al de una 4090 a la hora de entrenar y ejecutar modelos LLMs (no hablo de juegos ni FPS). Pero recuerda el precio de una 4090 … los Silicon de Apple se han convertido en una buena opción. Pero eso sí, en principio siempre serán más rápidas las NVIDIA pero a mayor consumo energético.

Otra configuración que se está poniendo de moda es usar los Mac mini que rondan los 800€ y crear con ellos clústeres a través del puerto Thunderbolt o de red. Esto nos permite poner por ejemplo 3 Mac mini digamos 16GB por menos de 2.500€ y conectarlos entre ellos para sumar su potencia. Ojo con esto que no es del todo así (hay más factores que influyen en la velocidad que ahora veremos), no tendremos 48GB de VRAM pero sí más o menos unos 30GB. Con la opción de poder añadir nodos bajo demanda de manera muy sencilla. En este vídeo tienes un ejemplo completo de cómo se pueden conectar usando exo que te permite unir cualquier ordenador Mac Silicon en formato clúster.

Figura 13: M4 Mac Mini Cluster

Un pequeño disclaimer. No sólo es la VRAM, también tenemos que tener en cuenta parámetros tan opuestos en su naturaleza como por la velocidad el bus de memoria de los Silicon, el contexto del LLM o la cuantización. Pero sí podemos hacernos una idea del consumo de VRAM usando por ejemplo esta fórmula en este artículo o usar alguna calculadora online como esta para modelos de HuggingFace. Por ejemplo, usando la fórmula del artículo anterior, para levantar un modelo Llama 2 a 70B con cuantización de 4 bits necesitaríamos 42GB de VRAM (en principio y según esta fórmula, yo creo que con menos se podría).

Bien, pues ya tenemos nuestro servidor preparado, es hora de instalar el software necesario para ejecutar todo tipo de modelos o de utilidades que usen la IA. Se me olvidaba algo importante … el consumo eléctrico. En esto los Mac Silicon están a años luz de las gráficas NVidia. Estas requieren fuentes de alimentación mínimo de 750W para gráficas como la 4070 y de 1000W o más para las 4090 mientras que los mac consumen mucha menos electricidad.

Los tokens por segundo marcan la usabilidad

La velocidad de generación medida en tokens por segundo es el factor que define el rendimiento y usabilidad de los modelos locales de LLMs. Los tokens ya sabemos que representan las unidades mínimas en las que se descompone el texto (palabras, sílabas o incluso caracteres), y la rapidez con la que un modelo puede procesar y generar estas unidades determina su eficiencia en tareas como la creación de texto, la traducción o el análisis de datos que hagamos.

Esta velocidad depende de varios factores: la arquitectura del modelo (por ejemplo, cuántos parámetros tiene), la capacidad de cómputo (potencia de la GPU o CPU utilizada) y la optimización del software (uso de librerías como CUDA, cuDNN o frameworks optimizados como Hugging Face Transformers). En nuestro caso, para entornos locales, la limitación de recursos suele ser más estricta que en soluciones en la nube por lo que es importante justar tanto el hardware como el software para maximizar el número de tokens por segundo.

Para optimizar los tokens por segundo en un modelo local LLM, se pueden implementar diversas estrategias enfocadas en hardware y software. Por ejemplo, utilizar una buena GPU compatible con librerías como CUDA y cuDNN nos permite acelerar los cálculos matriciales de la arquitectura Transformer, optimizando la inferencia.

A nivel de software, podemos aplicar técnicas como la cuantización que ya hemos mencionado antes, que reduce la precisión de los parámetros del modelo (por ejemplo, de FP32 a INT8) sin sacrificar significativamente el rendimiento, logrando una mayor velocidad de procesamiento. Por otro lado, el uso de batching eficiente y librerías optimizadas como PyTorch con operadores adaptados a hardware específico, o herramientas como TensorRT, permite ejecutar el modelo de forma más rápida y con un menor consumo de recursos. 

Por último, reducir el tamaño del modelo mediante técnicas como pruning o utilizar modelos más ligeros, como los LLMs optimizados para dispositivos locales (por ejemplo, LLaMA 7B o GPTQ), también ayuda obtener una aceptable generación de tokens por segundo en un hardware limitado.

Software a utilizar: Ollama, LMStudio & Pinockio

Lo que voy os a contar ahora es independiente de si tienes un GNU/Linux, Windows o Mac Silicon, todos sirven en las tres plataformas. Voy a centrarme solamente en tres que creo que son indispensables y sobre todo sencillas de utilizar. Vamos a empezar con dos que serán el motor principal de nuestro servidor: Ollama y LMStudio.

Ollama es una plataforma pensada para que puedas ejecutar modelos de lenguaje directamente en tu máquina de una manera sencilla y eficiente. Es como el “plug and play” de los LLMs: descargas, configuras y en unos minutos tienes funcionando modelos como LLaMA, Mistral o Vicuna. Su gran ventaja es que está optimizado para funcionar en hardware local, ya sea un Mac con Apple Silicon o una GPU NVIDIA decente, lo que te permite usar modelos bastante potentes sin depender de la nube ni complicarte con instalaciones infernales. Además, la biblioteca de modelos de Ollama ya viene ajustada y lista para usar, lo que te ahorra tiempo y dolores de cabeza.

Figura 15: Ollama

Por otro lado, LMStudio tiene otro enfoque porque está pensado más para el fine-tuning y personalización de modelos, RAG, etcétera. Aquí no solo ejecutas un LLM, sino que lo adaptas a lo que necesitas: puedes entrenar tu propio modelo con datasets específicos y ajustar los parámetros para obtener resultados optimizados y personalizados. Es ideal si tienes un proyecto concreto y necesitas que el modelo “hable” o “sepa” del contexto que quieras. 

Figura 16: LMStudio

Mientras que Ollama te permite desplegar un modelo rápidamente y sin complicaciones, LMStudio te da el control completo sobre el proceso de entrenamiento. ¿La diferencia clave? Ollama es perfecto para usar modelos preexistentes, mientras que LLMStudio es tu herramienta si quieres crear o hacer fine-tunning de un modelo a medida (aunque por supuesto, también te permite ejecutar modelos).

Pinokio es en cambio una herramienta que nos va facilitar mucho la vida. Se trata de una especie de “hub” de aplicaciones que permite instalar, ejecutar y controlar de manera programada y local cualquier aplicación de IA con un solo clic. Pinokio automatiza todo el proceso, por lo que sólo tienes que centrarte en utilizar la herramienta. 

Figura 17: Vídeo instalación y uso de Pinokio

Esto sabiendo lo complicado que es a veces ejecutar entornos de IA (por ejemplo por las dependencias), la verdad es que es una gran ayuda. Pinokio tiene su propio repositorio de GitHub aunque se puede instalar directamente en MacOS, GNU/Linux o MS Windows descargando la aplicación desde su web.

A partir de este punto ya tenemos todo lo necesario para poder ejecutar todo tipo de aplicaciones de IA en local, ya sea para generar imágenes, vídeo, texto, LLMs, etcétera. Existen herramientas como Ollama WebUI (que puedes instalar desde Pinokio) que te ofrecen una interfaz parecida a ChatGPT para tus modelos locales de Ollama, puedes llamar a tu modelo a través de una API, usar RAG, etcétera.

This is the way …

El futuro, en mi humilde opinión, se basa en agentes y el uso de IA local (ambos combinados) para crear una especie de ecosistema de “microservicios” inteligentes locales creando tareas complejas partiendo de tareas más sencillas. Con la llegada de GPUs más potentes (como la RTX 5090), nuevas tecnologías de hardware como Groq, el desarrollo de clústeres accesibles (como los Mac mini) y soluciones de cuantización más eficientes, la capacidad de ejecutar modelos LLM de alta complejidad en hardware asequible será cada vez algo más habitual. Además, herramientas que faciliten el fine-tuning local y las APIs conectadas a servicios propios permitirán que cada usuario o empresa ajuste la IA a su medida.

Prácticamente cada día entramos en nueva era de la inteligencia artificial, donde la privacidad, el control de costes y la potencia accesible son cada vez más una parte importante a tener en cuenta. El hardware sigue mejorando, el software simplificándose y los modelos avanzando; el objetivo, poder controlar nosotros mismos esta tecnología (democratizarla) que está cambiando día a día toda la Humanidad (por mucho que haya gente que no crea aún en la IA o diga que estamos en un punto muerto o sin salida). 

Happy Hardware Hacking Hackers!!! 

Autor: Fran Ramírez, es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", también de "Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades. Puedes contactar con Fran Ramirez en MyPublicInbox.

 Contactar con Fran Ramírez en MyPublicInbox

martes, diciembre 24, 2024

Cómo montar tu propio servidor de Inteligencia Artificial: Modelos Open Source, Parámetros y Hardware NVIDIA

La privacidad es algo que nos preocupa (y cada vez más) en general, y en el ámbito de la Inteligencia Artificial en particular, también es importante para las personas y las organizaciones. Cada vez que escribimos un prompt y lo enviamos a servicios en la nube como ChatGPT o Claude, estamos compartiendo datos que, potencialmente, pueden almacenarse y reutilizarse.

Esto es particularmente preocupante cuando la información enviada es sensible, ya que existe el riesgo de que termine en un Data-leak, afectando tanto a empresas como a individuales.  Además, algunos modelos en la nube utilizan los datos recibidos para mejorar sus sistemas mediante re-entrenamientos, lo que podría provocar que esa información apareciera inesperadamente si alguien realiza las preguntas adecuadas en el futuro. 

Figura 1: Cómo montar tu propio servidor de Inteligencia Artificial.
Modelos Open Source, Parámetros y Hardware NVIDIA

Por otro lado, está, cómo no, el factor económico. Los servicios de IA en la nube suelen cobrar por uso, basándose en la cantidad de tokens procesados por cada consulta o interacción. Para desarrolladores o pequeñas empresas que quieren integrar IA en sus aplicaciones, estos costos pueden acumularse rápidamente y convertirse en una barrera complicada. En este artículo - que tiene dos partes - veremos un recorrido sobre diferentes opciones para esto. 

Figura 2: Libro de Machine Learning aplicado a Ciberseguridad de
Carmen TorranoFran Ramírez, Paloma Recuero, José Torres y Santiago Hernández

Sin embargo, no todo está perdido: los modelos LLM de código abierto ofrecen una alternativa asequible. Estas soluciones nos permiten desplegar IA de forma local (on-premise), eliminando la dependencia de terceros y ofreciendo un control total sobre los datos y los costes (básicamente, el precio de la luz eléctrica). Algo que muchos hechos hecho también para entrenar nuestros modelos de Machine Learning, con lo que para investigadores es una solución perfecta.

Está claro que, el rendimiento de estas alternativas, dependerá del hardware disponible, pero con la infraestructura adecuada, es posible construir entornos locales que pueden ejecutar proyectos de gran complejidad sin poner en peligro nuestra privacidad y tampoco quedarnos sin fondos. Pero vayamos por partes.

Los modelos LLM Open Source

Un modelo LLM (Large Language Model) de código abierto es un modelo de IA entrenado con grandes cantidades de texto para realizar tareas de procesamiento de lenguaje natural (NLP), como generación de texto, traducción, clasificación, entre muchas otras. Al ser de código abierto, los pesos del modelo, el código fuente y, en muchos casos, los datos o el proceso de entrenamiento están disponibles públicamente, permitiendo a cualquiera personalizar, adaptar o reutilizar el modelo para sus propios proyectos. 
La gran mayoría de estos modelos se basan en arquitecturas de Transformers, que ya conocemos bien, que fueron introducidas por Vaswani et al. en 2017, y que utilizan mecanismos de autoatención para analizar el contexto global de las palabras en una secuencia, capturando relaciones complejas entre términos en largos rangos de texto.

El funcionamiento de un LLM se divide en dos fases principales: preentrenamiento y ajuste fino (fine-tuning). En el preentrenamiento, el modelo aprende patrones lingüísticos generales a partir de grandes corpus de texto no supervisados, utilizando tareas como predicción de palabras “enmascaradas” (BERT) o predicción autoregresiva (GPT).

Posteriormente, en el fine-tunning, el modelo es adaptado a tareas concretas mediante conjuntos de datos etiquetados, lo que mejora su precisión en dominios específicos. Estos tienen una escalabilidad exponencial (el rendimiento tiende a mejorar con el aumento del tamaño del modelo y los datos de entrenamiento), capacidades multi-idioma, y flexibilidad para realizar múltiples tareas con el mismo modelo base.

Los “Billions” son la clave …

Es importante dejar claro un tema antes de continuar: los “Billions”. Los “billions” son esa “B” que podemos ver cuando se describe cada modelo. La “B” en los modelos LLM, como 7B13B o 70B, nos muestra la cantidad de billones (americanos) de parámetros que tiene el modelo, donde un parámetro es un coeficiente ajustable aprendido durante el entrenamiento.

Estos parámetros determinan cómo el modelo procesa la entrada (texto) y genera la salida (respuesta), y esto es clave para su capacidad de comprensión y generación de lenguaje natural. En términos técnicos y simplificando mucho, los parámetros son los pesos y sesgos de las capas de la arquitectura Transformer, ajustados a lo largo de millones de iteraciones de entrenamiento para minimizar la pérdida en tareas como predicción de texto. Un mayor número de parámetros permite al modelo capturar patrones más complejos y sutiles en los datos de entrenamiento, mejorando su rendimiento en tareas más complejas.


Pero claro, el aumento en el número de parámetros tiene implicaciones directas en el rendimiento, el coste y la infraestructura necesaria. Modelos más grandes, como uno de 70B, requieren una cantidad exponencialmente mayor de memoria GPU (mínimo aproximadamente 40 GB por GPU para inferencia eficiente) y un mayor tiempo de cómputo, tanto para entrenamiento como para inferencia (no os preocupéis de momento por esto, lo veremos en el siguiente apartado).

Esto impacta en la calidad de las respuestas, especialmente en contextos complejos, pero también introduce latencia y un consumo energético. En cambio, modelos más pequeños como 7B son más rápidos y pueden ejecutarse en hardware más asequible, como un Mac M1 con 16 GB de RAM o una GPU de consumo medio como una NVIDIA RTX 3060 con 12GB de VRAM. Pero mejor vamos a centramos en el hardware para ver qué necesitaremos.

El hardware: Opción NVIDIA

Ya sabemos las restricciones y características que nos ofrecen los modelos de código abierto, ahora necesitamos la electrónica para poder ejecutarlos. Aquí es donde debemos tener en cuenta varias variables. La primera es tener clara la inversión que vamos a hacer y la segunda decidir la posible arquitectura base (x86 vs ARM o dicho de otra manera, NVIDIA vs Apple Silicon). Como todo en la vida, a más dinero mejor ;) pero vamos a ver algunas que no sean una locura de inversión. Cada una de ellas tiene sus ventajas y sus problemas.

Si seleccionamos una arquitectura clásica basada en NVIDIA y x86, el primer paso es tener un buen ordenador. Los ordenadores tipo “gaming” son una gran opción ya que estos suelen llevar una buena configuración de hardware de base. Es importante que tengamos un buen microprocesador de arquitectura x86 ya sea Intel o AMD pero seguro que esto lo vemos mejor con un ejemplo. ¡Ojo!, por supuesto hay más opciones y más sencillas, esto es sólo una recomendación basada en mi experiencia.
Y nada mejor mi que mi caso concreto ;) que es un buen equipo para empezar. Mi servidor de IA también lo utilizo para otras tareas más genéricas (virtualización) y es un AMD Ryzen 9 3900X, con 64GB de RAM y 3TB de disco duro. La tarjeta gráfica que tengo es una RTX 4070 con 12GB de VRAM (estoy esperando a las nuevas 5090 que salen a principios de 2025). La pegatina de Alan Turing también es importante ponerla ;)

Figura 7: Mi servidor local de IA y VMs, con la pegatina de Alan Turing.

Como he comentado antes, esta configuración no la tengo exclusivamente para IA, ya que quiero aprovechar el hardware. Por eso tengo instalado Proxmox como hipervisor (consejo de mi gran amigo Rafael Troncoso, alias "Tuxotron"). La ventaja es que me sirve para gestionar máquinas virtuales y usando la característica “GPU Passthrough” puedo conectar la tarjeta gráfica a la VM que necesite ejecutar IA en local.  De esta forma puedo estar levantando y apagando las VM con diferentes sistemas operativos (eso sí, sólo una VM puede gestionar la gráfica a la vez).

Figura 8: NVidia A100

Esta configuración es más que suficiente para levantar modelo 7B y alguno más a una velocidad decente de ejecución. Aquí la clave está en la memoria VRAM de la tarjeta gráfica, ya que es lo que te permitirá levantar y hacer inferencias a modelos grandes.

El problema de esta configuración x86 basada en NVIDIA, como podéis haber imaginado, es el precio. Una 4090 con 24GB de VRAM está alrededor de los 2.000€ aunque es posible que el precio baje cuando salgan las nuevas 5090. De todas formas, hay soluciones decentes 3090 TI con 24GB a buen precio e incluso podrías conectarlas usado NVLink o SLI y así aumentar la VRAM y su potencia que te permitiría hasta ejecutar modelos de 70B, como puedes ver en el vídeo siguiente.

Figura 9: INSANE! 2 Nvidia RTX 3090 on ONE 850W Power Supply!

Ya si queremos opciones más profesionales como una A100 por ejemplo con 80GB de VRAM ya estamos hablando de precios que oscilan entre los 10.000 y 20.000€ aproximadamente. Pero hay otras opciones, y hay más cosas que tener en cuenta para montar tu propio servidor de Inteligencia Artificial, lo vemos en la siguiente parte que tienes aquí mismo: "Cómo montar tu propio servidor de Inteligencia Artificial: Apple Silicon, Ollama, LMStudio & Pinockio".

Happy Hacking Hackers!!! 

Autor: Fran Ramírez, es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", también de "Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades. Puedes contactar con Fran Ramirez en MyPublicInbox.

 Contactar con Fran Ramírez en MyPublicInbox

Entrada destacada

Hacking IA: Jailbreak, Prompt Injection, Hallucinations & Unalignment. Nuestro nuevo libro en 0xWord

Pocas veces me ha hecho tanta ilusión que saliera un nuevo libro en 0xWord como con este libro de " Hacking IA: Jailbreak, Prompt Inje...

Entradas populares