Inteligencia artificial Graphics Processing Units GPU vs FPGA
Facebook
Twitter
LinkedIn

Inteligencia artificial Graphics Processing Units – GPU vs FPGA

La capacidad de ejecución de hardware para el éxito en implementación de proyectos de AI

Actualmente, Inteligencia Artificial es uno de los términos más utilizados en muchas áreas, no solo en entornos de tecnología pura, sino también en economía, leyes, medicina, entretenimiento, entre otros. Uno de los objetivos principales de la inteligencia artificial es mejorar el núcleo del negocio en el que está presente. Tradicionalmente, la mejora de un negocio se lleva a cabo por expertos, sin embargo, no siempre es rápida o eficiente. La Inteligencia Artificial (IA) permite en distintos escenarios delegar las tareas más complejas a una máquina, e increíblemente, sin decirle explícitamente cómo hacerlo.

Sin embargo, la INTELIGENCIA ARTIFICIAL no es algo nuevo, pues la teoría básica de esta existe hace más de 50 años, hay áreas de IA como el Machine Learning (ML) o el Deep Learning (DL) que hacen un trabajo complejo en términos computacionales. ML y DL son el resultado de algoritmos matemáticos complejos que aprovechan la probabilidad y la estadística aplicadas, buscando soluciones óptimas a problemas específicos.

Hoy en día, esta tecnología está presente en cada área de conocimiento, hace algunos años hemos visto grandes mejoras en las implementaciones de algoritmos. El elemento más relevante es la nueva capacidad de hardware, es decir, las máquinas pueden ejecutar miles de millones de operaciones matemáticas por segundo.

Alcance y capacidades: Graphics Processing Units – GPU

Un computador está compuesto por procesador (CPU), Memoria (RAM), Almacenamiento (Disco duro) y periféricos (Teclado, Mouse, Pantalla y cualquier dispositivo que se pueda conectar), estos elementos trabajan en perfecta sincronía gracias a la CPU, esta es la encargada de controlar cada una de las partes del computador. *CPU por sus siglas en inglés, Central Processing Unit.

 

Existe un elemento que no está presente en todos los computadores, de manera general se conocen como dispositivos de refuerzo (Boosting Devices), pues esta es su tarea justamente, son dispositivos especializados en una sola tarea por lo que la realizan excepcionalmente bien y a su vez liberan a la CPU de esta tarea. Las nuevas capacidades en cada una de las partes de estas máquinas han permitido realizar las aplicaciones que hoy usamos de INTELIGENCIA ARTIFICIAL.

Núcleos de Procesamiento CPU vs GPU

Núcleos de Procesamiento CPU vs GPU

Para ser más precisos, la llegada de elementos de refuerzo como las GPU (Por sus siglas en Ingles, Graphics Processing Units) nos da una gran parte de esas capacidades. Esta es posible debido a la gran cantidad de procesadores dedicados que componen estos dispositivos. Las GPU son hasta ahora el dispositivo de refuerzo más popular, pero no es el único, otra opción para hacer esas toneladas de matemáticas son los FPGA (Por sus siglas en Ingles, Field Programble Gate Array). Estos dispositivos no son realmente populares, porque son más difíciles de configurar.

Por lo general, la eficiencia se mide en la cantidad de operaciones de punto flotante por segundo (FLOPS) que es capaz de ejecutar y la energía necesaria para hacerlo. Una de las mejores GPU es la Tesla V100 que puede realizar 125 Tera FLOPS y utiliza 250 vatios de potencia, por otro lado, una de las mejores FPGA es la Virtex UltraScale+ VU19P que tiene una capacidad de 256 Tera FLOPS para esto requiere 225 vatios. Como se ve claramente en términos de eficiencia relativa, es mejor usar la FPGA con más de 1 Tera FLOP/W que la GPU con 500 Giga FLOP/W.

Esa es una declaración que ocurre bajo condiciones desiguales.

Las GPU como se mencionó anteriormente son dispositivos de refuerzo, esto significa que no pueden realizar ninguna tarea por sí mismos, pero son excelentes para mejorar el rendimiento de una máquina que los aloja. Bajo esta claridad, los FPGA no son dispositivos de refuerzo, ya que ellos son capaces de realizar cualquier tarea de manera eficiente. Si estos dos dispositivos se evalúan en igualdad de condiciones, lo correcto sería configurar una FPGA para ser utilizada como dispositivo de refuerzo. Donde evidentemente por capacidad de computo ganaría la FPGA.

Entonces, ¿por qué las GPU se usan más que los Field Programble Gate Array FPGA?

Principalmente por la dificultad de programarla / configurarla.

Las GPU son dispositivos de arquitectura basados en instrucciones, como las CPU, mientras que las FPGA requieren un lenguaje de descripción de hardware (HDL). Es decir, los primeros están programados con lenguajes como C, Python o Java, los segundos están configurados con VHLD o Verilog. Es necesario aclarar que a través de cualquiera de los lenguajes es posible implementar cualquier cálculo deseado, pero el desarrollo en FPGA sigue siendo un conocimiento más difícil o más especializado.

Existe una alternativa aún más compleja de desarrollar y mucho más eficiente, son los ASIC (por sus siglas en Ingles, Application-Specific Integrated Circuit). No tendremos en cuenta este dispositivo, pues sus costos de fabricación son muy elevados y solo se justifica para producción en masa.

RELACIÓN FLEXIBILIDAD VS EFICIENCIA ENTRE DISPOSITIVOS[2]

La síntesis de alto nivel (HLS) es una tendencia en este momento, ya que permite la distribución del circuito diseñado en el espacio disponible en el FPGA a través de un proceso de optimización, sin embargo, esta sigue siendo una de las dificultades de desarrollo en estos dispositivos, porque La compilación típica de un programa puede tomar entre 4 y 12 horas.

Ventajas de las implementaciones basadas en FPGA.

Dejando en claro que el tiempo de desarrollo en FPGA puede ser más largo, estos dispositivos nos permiten adaptarnos a nuevas arquitecturas que nos permiten mejorar el rendimiento de nuestra aplicación sin tener que invertir en nuevo hardware. Esto no es posible cuando se usa una GPU, ya que en el fondo es un circuito integrado de aplicación específica (ASIC), por lo tanto, no es posible modificar su arquitectura, que, aunque está optimizado para ciertas operaciones, no es para todos y todavía es un circuito de propósito general para procesamiento de imágenes.

Los FPGA son especialmente buenos si la aplicación requiere baja latencia, lo que significa que el tiempo de respuesta entre el estímulo de entrada y el resultado de salida debe ser muy bajo. En este caso, las GPU son más lentas porque requieren comunicación con la CPU y ejecutar instrucciones. Un buen tiempo de respuesta para una GPU es de 50 microsegundos, mientras que un FPGA puede obtener tiempos de alrededor de 1 microsegundo o menos. Una de las razones de esta baja latencia es que no depende de un sistema operativo o comunicación entre sus partes mediante protocolos estándar como PCIe o USB. Esta baja latencia en gran medida está dada por no tener que usar dichos protocolos y así maximizar el ancho de banda de las comunicaciones.

Finalmente, la comunicación entre sensores o actuadores es más eficiente porque pueden conectarse directamente a los pines del procesador y una vez más la eliminación del uso de protocolos estándar lo que nuevamente permite incrementar el ancho de banda. Adicionalmente las FPGA gracias a su mayor capacidad de memoria Cache pueden almacenar modelos mucho más grandes que una GPU por lo que la eficiencia se ve potenciada.

En resumen, los FPGA son quizás la mejor opción para la implementación de algoritmos que requieren una gran capacidad de computo con una latencia increíblemente baja. Es en estas aplicaciones específicas donde tiene sentido el costo adicional de desarrollo en FPGA, ya que los beneficios son considerables.

¿En qué tipo de aplicaciones existentes sería razonable el desarrollo en FPGA?

BLOCKCHAIN es actualmente una de las industrias que está optando por esta implementación, porque no solo se obtiene una mejora en el tiempo de ejecución, sino también una reducción en el consumo de energía en comparación con las GPU. Esta mejora se debe principalmente a la naturaleza de las operaciones realizadas allí. Esto permite determinar que, aunque los FPGA tienen un rendimiento más alto que las GPU, esto se debe también a la naturaleza de las operaciones. Las operaciones de punto flotante no son el punto más fuerte de los FPGA, pero las operaciones que realizan modificaciones a nivel de bit se realizan en menos tiempo.

Esto nos permite volver al tema de la inteligencia artificial IA, ya que este es un campo que, beneficiado por la potencia de procesamiento que ofrecen las GPU, es un candidato perfecto para analizar si las operaciones que deben llevarse a cabo se beneficiarán de implementarse en un FPGA. La IA está en auge, por lo que nada está escrito en piedra y el estado del arte se reinventa nuevamente, esto permite que el hardware reconfigurable como FPGA proporcione adaptabilidad a medida que se desarrollan nuevos algoritmos.

Independientemente del algoritmo utilizado o la categoría a la que pertenece (ML o DL), es posible generalizar correctamente los procesos de un algoritmo de inteligencia artificial en dos pasos (una vez que se procesa previamente la información). Estos son entrenamiento e inferencia, el entrenamiento consiste en utilizar la información existente para que el modelo (algoritmo) se adapte de manera generalizada a la información de entrada. La inferencia utiliza el resultado del entrenamiento para determinar un nuevo resultado basado en su entrada.

CONDUCCIÓN AUTÓNOMA

La inferencia en aplicaciones como la conducción autónoma, la detección de objetos en tiempo real, el seguimiento de objetos en tiempo real o cualquier evento en el que la baja latencia desempeñe un papel determinante, motiva la investigación del desarrollo de arquitecturas de inteligencia artificial en FPGA. Esto no significa que el entrenamiento de modelos no sea posible, esto también tendría una mejora, pero el fuerte de estas implementaciones está en la inferencia.

¿Para mi implementación es mejor una GPU o una FPGA?

Las GPU son más comerciales y no requieren un desarrollo previo para implementar modelos de inteligencia artificial, pues entre desarrolladores y fabricantes trabajan para facilitar el trabajo de los usuarios, el desempeño es óptimo y se han solucionado inconvenientes a lo largo de los años.

El uso de FPGA actualmente se limita a investigaciones o aplicaciones puntuales en donde la baja latencia es un factor importante, por lo tanto, la decisión de que dispositivo usar para una implementación de inteligencia artificial radica en el tiempo y costo de desarrollo dispuesto a invertir, buscando no solo una buena solución, sino la mejor solución posible para cada aplicación.

El desarrollo de herramientas de refuerzo da mayor capacidad de computo por lo tanto permite dar soporte a modelos más complejos y ejecutarlos de manera más ágil, si se desea buscar una GPU que soporte cualquier modelo que este implementando, NVIDIA tiene hoy la batalla ganada en este mercado, por otro lado si le interesa el mundo de las FPGA la solución la tiene Intel, esta compañía trabaja en cerrar la brecha entre estos dispositivos y regresar a la pelea por el mercado del desarrollo de inteligencia artificial.

Las GPU son dispositivos especializados, aunque cumplen con distintas funciones, todas ellas dentro del procesamiento de matrices, es decir, imágenes, video, modelos de IA, entre otros, todos ellos de fácil uso. No es posible modificar la arquitectura interna del dispositivo, por lo tanto, si se requiere una arquitectura más veloz se debe comprar un nuevo dispositivo.

La FPGA permite cualquier tipo de aplicación, obteniendo los mejores resultados posibles, en contra parte se deberá desarrollar por completo cualquier funcionalidad. En caso de desear modificar la aplicación o cambiarla es posible, también modificar la arquitectura interna del dispositivo, por lo cual no requiere una nueva inversión en equipo.

Recomendaciones finales

Actualmente solo es recomendable realizar un desarrollo en FPGA cuando la aplicación requiere capacidad computacional extremadamente elevada y tiempos de respuesta muy cortos, pues solo cumpliendo con estos requisitos la aplicación sacaría el mayor provecho a una FPGA respecto a una GPU en términos de tiempo y costos. En el resto de situaciones el uso de una GPU es muy apropiado pues reduce los costos respecto a un FPGA y otorga un rendimiento muy superior al prestado por una CPU.

Blogs