Ordenador IA (2024)
El mundo de la inteligencia artificial o IA y en especial la IA generativa ha pegado un boom en los últimos años desde la salida de ChatGPT en 2021. Hay mucho "hype" por esta tecnología y se habla mucho de que es futuro. Mi curiosidad me ha llevado a querer aprender como funciona esta tecnología y como aplicarla a mi día a día. Y si algo he aprendido como estudiante de ingeniería es que la mejor forma de aprender como funciona algo es construyéndolo tu mismo.
Por eso he decidido construir por partes un ordenador los suficientemente potente para poder ejecutar y trastear con algunos de estos modelos de IA de manera local. La decisión de construir este ordenador de sobremesa por partes ha sido en parte influenciada por este video.
Hasta ahora había tenido un portátil HP que me ha servido bien durante la carrera. Sin embargo un portátil siempre va a ser menos potente que un ordenador de sobremesa con los mismos componentes por las limitaciones térmica. Decidí vender mi portátil para construir este. La desventaja por su puesto es la portabilidad, sin embargo, como se menciona en el video hay una solución para esto: utilizar escritorio remoto mediante conexión ssh. Por eso he instalado en mi tablet un cliente para realizar esta conexión. De esta manera me puedo tener utilizar a mi ordenador de sobremesa allí donde me lleve la tablet.
Componentes:
Nvidia GeForce RTX 3060 LHR
Hay algo que me a quedado investigando como qué componentes elegir es que el componente más importante para ejecutar modelos de IA es la tarjeta gráfica. Esto es así por que los algoritmos de inferencia son altamente paralelizables. La inferencia es el procesamiento que estos modelos llevan a acabo para generar una salida a partir de una entrada, ya sea texto, video, audio o cualquier otro tipo de información. Este procesamiento conlleva un gran número de cálculos de operaciones con matrices que se pueden llevar a cabo en paralelo. Las GPUs (Graphic Processing Unit) están diseñadas como su propio nombre indica para generar gráficos. El cálculo de estos gráficos también consiste en un gran número de operaciones simples que pueden ser realizadas simultáneamente. Debido a esta similitud, las GPUs son mucho más adecuadas para ejecutar estos modelos que las CPUs cuyo propósito es ejecutar operaciones de manera general.
La capacidad de computación medida en TFLOPs es importante ya que cuanto mayor sea más rápida será la velocidad de inferencia pero el parámetro más importante el la VRAM. La VRAM es la memoria de la tarjeta gráfica y es el factor limitante a la hora de ejecutar un modelo. Antes de ejecutarse, el modelo tiene que cargarse en la memoria (VRAM). Cuanto mayor sea la VRAM más grandes serán los modelos que podamos ejecutar y esto es importante porque los modelos grandes tienden a ser más inteligentes y a tener un mejor desempeño.
Otro factor a tener en cuenta es el fabricante. Nvidia ha sido pionera a la hora de adaptar sus productos para el desarrollo de aplicaciones de inteligencia artificial. Los drivers que ofrece la empresa permite el acceso a los recursos de la GPU mediante el lenguaje de programación "CUDA". Esto hace que sea la plataforma pueda ser altamente optimizable para este tipo de aplicaciones. Esto es por lo que el boom de la IA ha hecho que esta empresa se vuelva la más valiosa del mundo.
El merado de de las tarjetas gráficas es impredecible y en los últimos años ha aumentado mucho la demanda por lo que son bastante caras. En mi caso tuve suerte de encontrar una Nvidia 3060 por 200€ de segunda mano. Se trata de una tarjeta de gama media-baja de penúltima generación. Lo que tiene de especial esta tarjeta es que si bien no es especialmente potente, tiene 12GB de VRAM similar a algunas tarjetas de gama alta y esto viene muy bien para esta aplicación.
CPU AMD Ryzen 7 8700G
La Unidad Central de Procesamiento (CPU) escogida es un AMD Ryzen 7 de gama media-alta de penúltima generación por 280€. Además de ser un procesador de propósito general muy capaz con 12 hilos de procesamiento, esta CPU viene con gráficos integrados batante potentes. Esto puede quitar carga a la tarjeta gráfica si se utiliza, por ejemplo, para renderizar los gráficos de la pantalla. Además en el caso de que el modelo sea demasiado grande, este se pude partir para guardar parte en la memoria principal (RAM) y que sea la CPU con los gráficos la que ejecute la otra parte del modelo. Aunque esto no siempre es deseable ya que la CPU haría de cuello de botella ralentizando considerablemente la inferencia.
MSI PRO B650M-A WIFI
La placa base escogida es la MSI B650 de gama media adaptada para procesadores AMD con socket AM5 por 142€. El factor de forma de la placa base es micro-ATX. Los componentes de los ordenadores de sobremesa siguen un estándar creado en 1995 llamado ATX. Las placas base micro-ATX son algo más compactas y suelen tener menos periféricos que las ATX pero son iguales en el resto de prestaciones. Además son más baratas. En este caso, lo importante de esta placa es que ofrece dos puertos PCIe para conectar dos tarjetas gráficas si fuese necesario y que cuenta con una alta velocidad de reloj para la memoria (5200 Mz).
Cooler Master
Para la CPU he elegido un disipador barato de 23€ de la marca Cooler Master con 8 tuberías de cobre. Si bien la CPU es bastante potente, también es muy eficiente. El consumo de la CPU se mide en vatios con un parámetro llamado TDP ("Thermal Design Power"). La TDP de esta CPU es de 65 W mientras que la TDP para algunas CPUs de la misma gama es de alrededor de 200 W. Por eso no he decidido no gastar el dinero en un refrigerador de líquido ni un disipador de aire grande y aparatoso.
CRUCIAL 2x16GB
El sistema está equipado con 32GB de memoria RAM de última tecnología (DDR5). En caso de que parte del modelo no quepa en la VRAM se podrá cargar en los 32GB de la memoria principal. Esto me costó 119€.
SSD 2TB
El sistema lleva como memoria externa una SATA SSD de 2TB que me había comprado para el portátil. Esto me dará espacio de sobra para guardar los modelos que me descargue. Las memorias con interfaz SATA no son tan rápidas como las NVme pero son mucho más rápidas los discos duros HDD. Creo recordar que me costó unos 100€
PSU Gibabyte
Con todos los componentes anteriores decididos utilicé esta calculadora para hacer una estimación de cuanta potencia demanda el sistema y con eso elegir la fuente de potencia. Decidí comprar una de 750 W que si bien es mucho más de lo que necesito me permitirá en un futuro hacer mejoras como añadir otra tarjeta gráfica, más memoria RAM u otra SSD.
No es bueno intentar recortar demasiado costes en este caso porque una fuente de potencia mala puede comprometer a el resto de componentes si falla o se estropea. Decidí comprar una PSU de Gibabyte por 99€.
Llegados a este punto el ordenador funcionaba perfectamente pero no era lo más estético ni lo más seguro tener todos los componentes expuestos así que finalmente me decidí comprar una caja en condiciones por 59€:
El coste total contando, contando con la SSD, ordenador es de aproximadamente 1020€. Creo que es bastante barato para las capacidades que ofrece. He mirado este ordenador que vale 1700 y tiene unas especificaciones similares.
Caja
Intentando recortar los costes tuve la no muy buena idea de imprimir mi propia caja para el ordenador. Viendo que la tarea iba a llevarme tiempo y intentos de impresión decidí solo imprimir solo una estructura o chasis para soportar los componentes. Algo parecido a un banco de pruebas. Me descargué este modelo Printables.com y lo modifiqué para que se adaptase mejora formato micro-ATX de mi placa base. Utilicé mi impresora 3D, PLA y un bote de pintura metálica que tenía. Este es el resultado.
¿Para qué lo he utilizado hasta ahora?
Estas son algunas de las aplicaciones de inteligencia artificial para las que lo he utilizado:
LM Studio: es un programa que permite descargar LLMs (Grandes Modelos del Lenguaje) y ejecutarlos localmente de manera muy sencilla mediante una interfaz gráfica.
Ollama: Es una aplicación del terminal que ofrece Meta que también permite descargar y ejecutar LLMs de manera local. Tanto LM Studio como Ollama están creados a partir de la librería llamacpp (de C++).
Whisper: Este es un modelo liberado por OpenAI capaz de transcribir culquier audio a texto. Lo utilicé para generar los subtítulos de un anime que me estaba viendo.
Generación de Imágenes: He utilizado un modelo llamado Flux1.0_dev liberado por Black Forest para la generación de imágenes a partir de texto. Este modelo es el mismo que utiliza Grok, la IA de X (Twitter), para generar imágenes. He utilizado ConfyUI una interfaz para controlar de manera precisa modelos de generación de imágenes. Algunos ejemplos:
La aplicación de IA que más a diario es Ollama con Llama 3.1 el último modelo publicado por Meta. Es muy conveniente tenerlo rápidamente accesible en la linea de comandos y además es muy rápido ya que al ejecutarse de manera local no tiene latencia y tiene una gráfica prácticamente dedicada.
Por su puesto que este ordenador no solo me lo he construido para este propósito. Tener un equipo potente también vendrá muy bien para aplicaciones de ingeniería pesadas y para muchas otras cosas.
Mejoras para futuro
Estas son algunas mejoras que puede que haga en el futuro:
Otra tarjeta gráfica: Añadir otra tarjeta gráfica puede aumentar la velocidad y la capacidad de los modelos. Simplificando un poco, puedes partir un modelo de IA, almacenar cada una de esas partes en una tarjeta gráfica y ejecutarlas en serie.
Añadir otros dos módulos de 16 GB de memoria RAM.
Añadir una memoria SSD Nvme para acelerar el arranque de programas y el proceso de carga de los modelos de IA en memoria.