Qué PC debo comprar para deep learning?

15/06/2020


A día de hoy, se pueda ejecutar deep learning casi con cualquier dispositivo. Sin embargo, a la hora de entrenar redes neuronales, el hardware que elijas condicionarán de manera importante el desembolso económico necesario, y el tiempo que tardará la red en aprender.

Existen dos grandes opciones a la hora de elegir hardware para entrenar redes convolucionales. Por un lado, puedes utilizar servicios como AWS, Azure, o Google Cloud. Estos servicios te permiten crear un servidor a medida, configurando la cantidad de RAM, cuántas CPUs quieres, o qué tarjeta gráfica (GPU) necesitas. Sin embargo, si alguna vez has calculado cuánto cuestan estos servicios habrás visto que no son baratos, pudiendo pagar casi 300€ por usar un servidor con GPU durante 24 horas. Existen maneras de reducir el coste que suponen estos servicios, como por ejemplo utilizar servidores interrumpibles. Esta no es una solución perfecta, ya que el proveedor de servicios se reserva el derecho de apagar el servidor si necesita utilizar ese hardware, esto hace que tengas que crear software tolerante a fallos, reduciendo por una parte el coste hardware, pero aumentando el coste del software.

Una alternativa al uso de servicios en la nube es que compres tu propio PC, configurado específicamente para deep learning. Esto te supondrá un ahorro económico importante, ya que los servicios en la nube utilizan tarjetas gráficas de servidor que son significativamente más caras, y ofrecen una serie de servicios como son la alta disponibilidad, que no te benefician demasiado a la hora de entrenar redes convolucionales. Además, el uso de tu propio PC te facilitará el desarrollo de software, ya que trabajarás con los datos de manera local, y podrás ver información gráfica de forma más sencilla

En este artículo te explicamos qué componentes debes comprar para entrenar tus propios modelos ahorrando dinero. Elegiremos cada pieza del PC sin tener en cuenta ordenadores preconfigurados que suelen ser más caros, y el objetivo será alcanzar un alto rendimiento utilizando hardware de consumo. Todo esto con un presupuesto de 3000€.

La buena noticia es que un PC solo tiene 8 componentes que debemos elegir. Estos componentes son GPU, CPU, RAM, disco duro, placa base, fuente de alimentación, refrigeración, y caja.

Tarjeta gráfica o GPU

Tarjeta gŕafica o GPU

La GPU es el componente que realizará la mayoría de cálculos pesados cuando entrenes una red convolucional. Principalmente, estos cálculos incluyen convoluciones, multiplicaciones de matrices, y funciones de activación.

La GPU que elijas debe cumplir tres requisitos fundamentales. En primer lugar debe de tener memoria suficiente para almacenar toda la información utilizada durante el entrenamiento. Esta información incluye cuanto contribuye de cada uno de los parámetros de la red neuronal (pesos de las conexiones, valores de los filtros de convolución...) al error de análisis. De esta manera, gracias a tener esa información almacenada, el proceso de entrenamiento puede afinar las variables de la red neuronal para que funcione un poco mejor en cada ciclo de entrenamiento. El segundo requisito es la velocidad de procesamiento, que normalmente va correlacionado con la cantidad de memoria que incluye la GPU. La velocidad de procesamiento determina el número de imágenes que se van a procesar por segundo. De esta manera, una GPU más rápida tardará menos tiempo en entrenar, permitiendo que hagas más experimentos y aumentando tu productividad. Finalmente, las librerías de deep learning como TensorFlow y Keras utilizan CUDA, un framework desarrollado por NVIDIA para realizar cómputo paralelo en tarjetas gráficas, por lo que la tarjeta gráfica que compres debe ser de esta marca para asegurar la máxima compatibilidad.

Cada dos años, NVIDIA saca a la venta una serie de GPUs, siendo la serie 20 la familia actual de tarjetas gráficas. Dentro de esta serie, el modelo con memoria y velocidad de procesamiento más rápido es la 2080 Ti con 13.45 TFLOPs (billones de operaciones por segundo) y 11 GB de memoria GDDR6. Su precio es de aproximadamente 1300€.

Siendo el componente más importante a la hora de entrenar redes convolucionales, este artículo se podría extender mucho si incluyese comparativas de tarjetas gráficas. Por esta razón te recomiendo que estés atento a la siguiente entrada de blog, donde se comparan diferentes GPUs atendiendo a su rendimiento y precio.

CPU

CPU

Durante el entrenamiento de redes neuronales, una de las funciones más importantes de la CPU es la de ejecutar todas las operaciones del “camino” de datos que va desde la lectura de un dato en el disco duro, hasta mover los datos a la GPU para que se ejecuten las operaciones de la red convolucional.

La CPU juega un papel clave en el entrenamiento de arquitecturas deep learning ya que, en muchos casos, es la encargada de decodificar, normalizar, y realizar otras técnicas de preprocesamiento. De esta forma, si la CPU no es lo suficientemente rápida, los datos tardarán en llegar a la GPU, haciendo que la tarjeta gráfica esté ociosa mientras espera por los datos, y ralentizando el entrenamiento.

La importancia de la CPU aumenta si es necesario preprocesar los datos en cada iteración de entrenamiento. Una solución que se suele utilizar, sobre todo cuando el equipo no tiene suficiente memoria RAM para almacenar todo el conjunto de datos, es leer los datos de disco duro en cada iteración de entrenamiento. Esto hace que la carga de trabajo de la CPU aumente, ya que antes de ejecutar la red convolucional el procesador debe convertir los datos al formato correspondiente. Si has programado tu red con Keras, puedes utilizar la API tf.data.Dataset para optimizar el camino de datos. Esta API permite cargar datos con la CPU a la vez que ejecutas una red convolucional con la GPU, o paralelizar la ejecución de algoritmos de preprocesado. Por otra parte, TensorFlow y PyTorch usan operaciones vectoriales como SSE o AVX, así que debes tener una CPU compatible para sacarle el máximo partido a estas librerías.

En cuanto a marcas, el fabricante líder en cuota de mercado es Intel. Esta marca saca a la venta una generación de CPUs nuevas cada año, y actualmente van por la generación 10. Cada generación tiene 3 modelos principales llamados i3, i5, e i7 ordenados de menor a mayor rendimiento respectivamente. Además debes tener cuidado ya que cada modelo tiene variantes, por ejemplo, algunas variantes del procesador i7 son i7-10700, que no permite cambiar la frecuencia de reloj, y i7-10700k que si lo permite. El procesador i7-10700k tiene un precio aproximado de 440€, lo que nos deja con un total de 1740€ hasta el momento.

RAM

Memoria RAM

La memoria RAM es un componente que también debes elegir teniendo en cuenta qué tipo de modelo quieres entrenar. En muchos casos te encontrarás con un modelo simple, y un conjunto de datos pequeño, lo que te permite cargar todo en memoria RAM. Almacenar todos los datos en memoria RAM resultará, en muchos casos, en una reducción de la cantidad de tiempo dedicada al entrenamiento, ya que se realizarán menos operaciones de preprocesado de datos.

Sin embargo, los procesadores de consumo mencionados anteriormente tienen un límite relativamente bajo de cantidad de RAM que pueden usar. De acuerdo con las especificaciones de procesador elegido, no podríamos usar más de 128GB de RAM en nuestro equipo. Además, si juntamos esto con que el precio de la memoria RAM DDR4 está por encima de los 5€ por GB, te podrías llegar a gastar una cantidad importante de dinero para que, en muchos casos te sobre memoria, y en otros casos te falte, pero se mitigue utilizando TensorFlow para optimizar el camino de datos.

Una decisión razonable es mantener la cantidad de memoria RAM en el rango 32-64GB para que no se dispare (todavía más) el precio del PC. Para esta configuración, usaremos 2 sticks de 16GB del modelo Vengeance LPX DDR4 3200 de Corsair. Esto supone unos 170€ adicionales, sumando 1910€ en total.

Disco duro

Disco duro

El disco duro se usa para guardar los datos de entrenamiento. Tradicionalmente, la métrica que más se comprobaba en los discos duros era su capacidad de almacenamiento. Esto cambió con la llegada de los discos duros de estado sólido, que aumentan considerablemente la velocidad de lectura y escritura de datos.

Cuando entrenas algoritmos de machine learning, debes de tener en cuenta esas dos métricas. Por una parte, el disco duro debe tener capacidad suficiente para almacenar todos los datos de entrenamiento. Pero por otra parte te interesa tener un disco duro con una velocidad de lectura lo suficientemente rápida como para mantener la GPU ocupada todo el rato. Además, debes tener en cuenta que en algunos casos utilizarás el formato TFRecord para guardar datos, lo que supone un aumento en el espacio que ocupan los datos, no solo por tenerlos duplicados, sino también porque estarás guardando los datos directamente en forma matricial. Finalmente, hay que comprobar la velocidad del disco duro que quieres comprar, si bien los discos duros M.2 han crecido en popularidad, el hecho de tener formato M.2 no es sinónimo de velocidad. El rango de velocidades de lectura empieza en unos 400 MB/s y llega casi a los 2.5 GB/s, superando la velocidad de acceso de las memorias RAM DDR de primera generación.

En este PC utilizaremos el modelo 970 EVO Plus (1TB) de Samsung, que tiene un precio aproximado de 250€. Sumamos así 2160€.

Placa base

Placa base

La placa base es el componente al que conectas CPU, GPU, y memoria RAM para que trabajen de manera conjunta. Debe ser compatible con la serie 10 de Intel, tener una ranura PCI express x16 en la que conectar la GPU, y funcionar con memoria RAM DDR4.

Algo a tener en cuenta es que aunque una ranura PCI express sea físicamente x16, por dentro puede estar funcionando como una x8, o incluso 4x. Esto supone una velocidad menor en la transferencia de datos y puede penalizar el tiempo de entrenamiento, por esta razón debes tener cuidado al elegir placa base, y leer bien las especificaciones del fabricante. La configuración PCI express cobra más importancia cuando quieres usar varias tarjetas gráficas, ya que es más común que la segunda ranura x16 de una placa base funcione a menor velocidad.

Para este PC hemos elegido la placa base MPG Z490 Gaming Plus de MSI. Esta placa base cumple todos los requisitos, usa el chipset Z490 compatible con la serie 10 de Intel, tiene una ranura x16 funcionando en modo x16 (aunque la segunda ranura x16 funciona en modo x4), y tiene 4 ranuras para memoria RAM DDR4. Esta placa base cuesta 190€, sumando hasta el momento 2350€.

Fuente de alimentación

Fuente de alimentación

La fuente de alimentación se encarga de proporcionar corriente a los diferentes componentes del ordenador. Las características principales son los vatios de salida, la eficiencia, y la cantidad de conectores.

En primer lugar, debes elegir una fuente que sea capaz de alimentar todos los componentes. La GPU elegida consume 300W según las especificaciones del fabricante, el resto de componentes combinados está en el rango 250-300W. Esto supone que debes asumir un consumo de 600W, pero no significa que puedas comprar una fuente de 600W, todavía hay que contabilizar la eficiencia, y verificar que la fuente elegida tenga suficientes conectores para alimentar todo.

La eficiencia de las fuentes de alimentación se marca con el distintivo “80 Plus” y las variantes White, Bronze, Silver, Gold, Platinum, y Titanium. La eficiencia de las fuentes 80 Plus va de 82%, para los modelos White, hasta el 94% para los Titanium. Si te pones en el peor de los casos, una eficiencia justo por encima del 80%, el cálculo resulta en una fuente de 600W/80%=750W.

Finalmente, no todas las fuentes de alimentación de 750W tendrán el número de conectores suficientes para alimentar el equipo. El punto crítico de este PC es la GPU, que necesita 3 conectores PCIe (6+2).

Una fuente que cumple con todos los requisitos es la TX750M de Corsair. Ofrece 750W, tiene 4 conectores PCIe, y tiene una eficiencia del tipo 80 Plus Gold. Esta fuente cuesta 120€, y sitúa el PC en 2470€.

Refrigeración

Refrigeración

Cuando la CPU comience a preprocesar los datos, su temperatura comenzará a subir. En caso de que la temperatura supere los 90ºC, su velocidad se reducirá automáticamente para permitir que se enfríe y prevenir daños.

Las CPUs suelen venir con un ventilador pequeño. Este ventilador está orientado a usuarios que no dejarán el PC trabajando durante varias horas seguidas. Sin embargo, si entrenas tu red en un PC con este ventilador, podría llegar a calentarse lo suficiente como para reducir su rendimiento. Si el rendimiento de la CPU decae, podría acabar convirtiéndose en un cuello de botella, resultando en una tarjeta gráfica infrautilizada, y alargando el tiempo de entrenamiento.

Una alternativa son los disipadores de terceros, o los kits de refrigeración líquida. Estos componentes ofrecen un mayor rendimiento en la refrigeración de la CPU, y hacen menos ruido. Además, si quieres hacer overclocking, un kit de refrigeración líquida te permitirá empujar el rendimiento un poco más.

Para este PC hemos elegido el kit de refrigeración líquida Hydro H100x de Corsair. Este kit tiene un precio aproximado de 90€, sumando en total 2580€.

Caja

Caja

La caja almacenará los diferentes componentes del PC. El principal requisito de la caja es su tamaño, debe ser compatible con el formato ATX de placa base, debe tener longitud suficiente para que quepa la tarjeta gráfica, y debe tener hueco para el radiador y ventiladores. Como usuario final, también puedes elegir si quieres que tenga ventana lateral, puertos frontales, o incluso paneles amortiguadores de sonido.

En este artículo hemos elegido el modelo Carbide 275Q de Corsair, tiene suficiente hueco para GPU y ventilación, además de tener paneles acústicos que reducirán en un par de decibelios el ruido del PC. Esta caja cuesta 85€, lo que supone un total de 2645.

Proporción de precios

En esta gráfica puedes ver que fracción de dinero se ha llevado cada componente.

Que modelos puedes entrenar con este PC?

El hardware que hemos elegido será suficiente para entrenar la mayoría de redes. Podrás entrenar redes de clasificación como ResNet o Xception, redes de segmentación como U-Net o DeepLab, y redes de localización como YOLO. En general, podrás utilizar "minibatches" de imágenes de hasta 512x512 pixels, a partir de este tamaño llegará un momento que no quepa ni una imagen en la memoria de la GPU, debido a que se guardan todos los resultados intermedios del procesamiento para corregir el error. Aún así, habrá muchas redes que puedas entrenar para imágenes de un tamaño cercano a 512x512, para esto deberás usar un tamaño de batch reducido, y hacer algunos pequeños ajustes, como por ejemplo sustituir batch normalization por batch renormalization.

También habrá problemas que no puedas tratar con este PC. Por ejemplo, no podrás entrenar una arquitectura Transformer desde cero, debido a la gran cantidad de datos que se suelen utilizar. Según los records actuales, para entrenar BERT en una hora necesitarías 1472 GPUs V100 de NVIDIA. Aún así, puedes descargar un modelo preentrenado y refinarlo con tu conjunto de datos.