Procesadores dedicados para IA, ¿cuáles son y cómo funcionan?

Procesadores dedicados para IA, ¿cuáles son y cómo funcionan?

Josep Roca

Los procesadores o CPU dedicados a la inteligencia artificial o IA se han ido haciendo un hueco en los últimos años, aunque con diferentes nombres. Los hemos visto aparecer en forma de la Tensor Processor Unit o TPU de Google, los Tensor Cores de las GPUs de NVIDIA, o las diferentes Neural Processor Units o NPUs de varias marcas. Pero todos ellos tienen un punto en común: son arrays sistólicos. En este artículo te vamos a explicar cómo funcionan estos procesadores tan específicos.

Con la llegada de la inteligencia artificial, en los últimos años hemos visto como los diferentes fabricantes y diseñadores de CPU nos han hablado de diferentes tipos de unidades para realizar dicha función. ¿Qué ocurriría si os dijéramos que todos esos nombres son realmente diferentes nomenclaturas comerciales para un mismo tipo de unidad?

La CPU básica para la IA: el array sistólico

Los arrays sistólicos, son la base para entender cómo funcionan las CPU para la IA; consisten en una cadena o array de elementos de procesamiento, y cada una de estos se encuentra conectado a otros elementos de procesamiento de manera directa a través de una interfaz que los comunica de manera ordenada entre sí.

El primer elemento de la cadena es el que recibe el primer dato y por tanto tiene contacto con la interfaz de E/S; dicha interfaz puede ser una memoria, otro procesador del que el array sistólico es un coprocesador u otro array sistólico. En el otro extremo, el último elemento del array será el que se comunique con el elemento con el que está conectado el array sistólico y escriba de vuelta el resultado de toda la operación conjunta.

IA Array Sistólico

Al contrario que en los procesadores no sistólicos donde los datos no se transmiten entre los diferentes elementos sino que siempre pasan por los registros, en un sistema sistólico los datos son transmitidos de manera directa de un elemento de procesamiento o célula a los elementos de procesamiento o células más cercanos.

La ventaja de todos los sistemas sistólicos es que la comunicación entre los elementos de procesamiento es más rápida que la comunicación elemento de procesamiento → registro → elemento de procesamiento → registro, etc.

Son llamados sistólicos por el hecho de que cada elemento que se encuentra interconectado, realiza su operación correspondiente en un ciclo de reloj y «bombea» el resultado a las células o elementos de procesamiento colindantes.

Matrices Sistólicas y Tensores

De la misma manera también podemos conectar los elementos de procesamiento de manera matricial y llegar a tener una matriz sistólica, cuyo diagrama es el que veis a continuación:

IA Matriz Sistólica

Incluso podemos tener una configuración tridimensional a la que llamamos Tensor.

IA Tensor Processor

El funcionamiento en todos ellos es igual, la diferencia es que en los sistemas matriciales y tensoriales podemos mover los datos no solo horizontalmente sino también verticalmente e incluso en diagonal con tal de poder realizar diferentes tipos de operaciones en paralelo.

¿De donde viene el nombre Tensor?

Tensor Core

Se le llama tensor a las matrices tridimensionales regulares, aunque se utiliza en todo tipo de procesadores tensoriales, ya sean del tipo matricial  o tensorial.

El elemento de procesamiento (PE)

Los elementos de procesamiento habitualmente son ALUs con la capacidad de hacer sumas y multiplicaciones en paralelo y de manera simultánea, pero podemos utilizar otros elementos como elementos de procesamiento, hasta núcleos completos e incluso colocar un procesador sistólico dentro de otro.

Utilidad de los sistemas sistólicos

Pese a que se han hecho famosos por el uso de este tipo de procesadores con tal de acelerar los algoritmos de inteligencia artificial, tienen otras utilidades como:

  • Filtros de Imagen (Interpolación).
  • Búsqueda de patrones.
  • Correlación.
  • Evaluación Polinómica.
  • Transformaciones de Fourier.
  • Multiplicación de Matrices.
  • etc.

Por ejemplo, las unidades de texturas de las GPUs pese a que son unidades de función fija realmente están configuradas como un array sistólico, eso sí, no son programables ya que su funcionalidad esta micro-cableada, pero es para que veáis que su utilidad no se reduce a la IA solamente.

En cuanto a la IA su implementación se debe a que la multiplicación de matrices es muy lenta incluso en las unidades SIMD utilizadas en las GPUs o dentro de las CPUs mismas (AVX, SSE…) por lo que se necesita un tipo de unidad especial para realizar dicha operación lo más rápido posible y de ahí la adopción de los arrays sistólicos dentro de los diferentes CPU para acelerar la IA.