neural network - ¿Simulador de red neuronal en FPGA?
neural-network (8)
Es viejo, porque no he pensado mucho en los FPGA en casi 20 años, y utiliza un lenguaje de programación concurrente que es bastante oscuro, pero Page y Luk, 1991, compilar Occam en FPGA cubre algunos temas cruciales de una manera agradable, suficiente Creo que para tus propósitos. Dos enlaces para probar cosas:
- KRoC es un compilador Occam basado en linux con mantenimiento activo, que sé que tiene una base de usuarios activa.
- Roger Peel tiene una página de síntesis lógica que tiene cierta documentación de su flujo de trabajo basado en linux desde la síntesis de códigos Occam hasta FPGA I / O.
Occam-> FPGA no es donde está la acción, pero puede ser un lugar mucho mejor para comenzar que, por ejemplo, Verilog.
Para aprender a programar FPGA, planeo codificar una red neuronal simple en FPGA (ya que es masivamente paralela; es una de las pocas cosas en las que una implementación de FPGA puede tener la posibilidad de ser más rápida que una implementación de CPU).
Aunque estoy familiarizado con la programación en C (10+ años). No estoy tan seguro con el desarrollo de FPGA. ¿Puede proporcionar una lista guiada de lo que debería hacer / aprender / comprar?
¡Gracias!
Independientemente de lo que diga Charles Stewart, Verilog es un buen lugar para comenzar. Me recuerda a C, al igual que VHDL me recuerda a ADA. Nadie usa Occam en la industria y no es común en las universidades.
Para un libro de Verilog, recomiendo these especialmente Verilog HDL . Verilog hace trabajo paralelo de forma trivial, a diferencia de C.
Para comprar, obtenga un tablero de evaluación Cyclone III relativamente barato de [Altera] o Altera''s 3 (por ejemplo, este 3 por $ 449 o this por $ 199) o Xilinx.
La mayoría de los intentos de construir una red neuronal ''literal'' en un FPGA alcanzan los límites de enrutamiento muy rápidamente, es posible que obtenga unos cientos de celdas antes de que la extracción de P&R tarde más tiempo de lo que vale la pena esperar por su problema. La mayor parte de la investigación en NN y FPGA toma este enfoque, concentrándose en una implementación mínima de ''nodo'' y sugiriendo que la escala es ahora trivial.
La manera de hacer que una red neuronal de tamaño razonable realmente funcione es utilizar el FPGA para construir una máquina dedicada de procesamiento de números de redes neuronales. Obtenga los valores iniciales de los nodos en un chip de memoria, tenga un segundo chip de memoria para los resultados de su próxima marca de tiempo y una tercera área para almacenar sus pesos de conectividad. Bombee los valores de los nodos y los datos de conexión mediante el uso de técnicas para mantener los buses de memoria saturados (ordene las cargas de nodos por línea CAS, realice una lectura anticipada mediante tuberías). Tomará un gran número de pasadas sobre el conjunto de datos anterior a medida que se emparejan los pesos con los valores anteriores, ejecútelos a través de las unidades DSP MAC para evaluar los nuevos pesos de los nodos, luego presione hacia el área de memoria de resultados una vez que se hayan evaluado todas las conexiones. Una vez que haya terminado un paso de tiempo completo, invierta la dirección del flujo para que el siguiente paso de tiempo vuelva a escribir en el área de almacenamiento original.
Necroposting, pero para otros como yo que se encuentran con esta pregunta, existe un tratamiento profundo, aunque antiguo, de implementar redes neuronales utilizando FPGA.
Han pasado tres años desde que publiqué esto, pero aún se está viendo, así que pensé que agregaría otros dos documentos del año pasado que encontré recientemente.
El primero habla sobre la aceleración FPGA de las redes neuronales convolucionales . Nallatech realizó el trabajo. Es más marketing que un artículo académico, pero sigue siendo una lectura interesante, y podría ser un punto de partida para alguien interesante en la experimentación. No estoy conectado a Nallatech de ninguna manera.
El segundo artículo salió de la Universidad de Birmingham, Reino Unido, escrito por Yufeng Hao. Presenta una arquitectura de hardware de red neuronal general en FPGA .
Quiero señalar un problema potencial con la implementación de una red neuronal en FPGA. Los FPGA tienen una cantidad limitada de recursos de enrutamiento. A diferencia de los recursos lógicos (flops, tablas de consulta, memorias), los recursos de enrutamiento son difíciles de cuantificar. Tal vez una simple red neuronal funcione, pero una "masivamente paralela" con interconexiones de malla podría no hacerlo.
Yo sugeriría comenzar con un núcleo simple de OpenCores.org solo para familiarizarse con el flujo de FPGA, y luego pasar a la creación de un prototipo de una red neuronal. Descargar un paquete web gratuito de Xilinx, que incluye el simulador ISIM, es un buen comienzo. Más adelante puede comprar un dev barato. Tablero con un pequeño FPGA (por ejemplo, Xilinx Spartan 3) para ejecutar sus diseños.
Recomendaría buscar en la síntesis de alto nivel de xilinx , especialmente si viene de un fondo C. Extrae los detalles técnicos en el uso de un hdl para que el diseñador pueda centrarse en la implementación algorítmica.
Hay restricciones en el tipo de código C que puede escribir. Por ejemplo, no puede usar estructuras de datos de tamaño dinámico, ya que eso inferiría hardware de tamaño dinámico.
Te daré una tercera recomendación: usa VHDL. Sí, en la superficie parece ADA. Mientras que Verilog tiene un parecido pasajero con C. Sin embargo, con Verilog solo obtiene los tipos que vienen con él de la caja. Con VHDL puede definir sus propios nuevos tipos que le permiten programar a un nivel superior (aún RTL, por supuesto). Estoy bastante seguro de que las herramientas gratuitas de Xilinx y Altera son compatibles con VHDL y Verilog. "A Designers Guide to VHDL" de Ashenden es un buen libro sobre VHDL.
VHDL tiene un paquete matemático de punto fijo estándar que puede facilitar la implementación de NN.
Una red neuronal puede no ser el mejor punto de partida para aprender a programar un FPGA. Inicialmente, intentaría algo más simple como un contador que controla los LED o una pantalla numérica y se acumula desde allí. Los sitios que pueden ser de uso incluyen:
- http://www.fpga4fun.com/ - Excelentes ejemplos de proyectos simples y algunos tableros.
- http://opencores.org/ - Código de referencia muy útil para muchas interfaces, etc ...
También puede considerar usar un procesador de software en el FPGA para ayudarlo en su transición de C a VHDL o Verilog. Eso le permitiría mover pequeños módulos de código de uno a otro para ver las diferencias en el hardware. La elección del idioma es algo arbitraria: codifico VHDL (sintácticamente similar a ADA) la mayor parte del tiempo, pero algunos de mis colegas prefieren Verilog (sintácticamente similar a C). Lo debatimos de vez en cuando, pero en realidad es una elección personal.
En cuanto a la guía de compradores / aprendices, necesitas:
Paciencia :) - El ciclo de diseño para los FPGA es significativamente más largo que para el software debido a la cantidad de ''parámetros libres'' adicionales en la compilación, así que no se sorprenda si le toma un tiempo lograr que los diseños funcionen exactamente de la manera que desea.
Una placa de desarrollo : para aprender, compraría uno de uno de los tres proveedores de FPGA más grandes: Xilinx, Altera o Lattice. Mi preferencia es Xilinx en este momento, pero los tres son buenos. Para aprender, no compre uno basado en las partes de gama alta; no es necesario que lo haga al comenzar a usar FPGA. Para Xilinx, obtenga uno basado en la serie Spartan, como el SP601 (yo mismo tengo uno). Para Altera, compra un ciclón uno. Las placas de desarrollo serán significativamente más baratas que las de las partes de gama alta.
Un cable de programación : la mayoría de las compañías producen un cable de programación USB con un conector especial para programar los dispositivos en la placa (a menudo con JTAG). Algunas placas tienen la interfaz de programación incorporada (como el SP601 de Xilinx), por lo que no necesita gastar dinero extra en ello.
Herramientas de construcción : hay muchas variedades de estos, pero la mayoría de los grandes proveedores de FPGA ofrecen una solución propia. Tenga en cuenta que las herramientas solo son gratuitas para los FPGA más pequeños de menor rendimiento, por ejemplo, el Xilinx ISE Webpack.
El software comprende etapas con las que puede que no esté familiarizado, ya que provienen del mundo del software. Los detalles específicos del flujo de herramientas siempre están cambiando, pero cualquier herramienta que use debe poder obtener de su código a su dispositivo específico. La última parte de este flujo de diseño normalmente es proporcionada por el proveedor de FPGA porque es específico del hardware y es propietario. Para darle un breve ejemplo, el software que necesita debe tomar su VHDL y el código de Verilog y (esta es la versión Xilinx):
- ''Sintetízalo'' en construcciones que coincidan con los bloques de construcción disponibles dentro de tu FPGA particular.
- ''Traducir y mapear'' el diseño en la parte.
- "Coloque y enrute" la lógica en el dispositivo específico para que cumpla con sus requisitos de tiempo (por ejemplo, la velocidad de reloj a la que desea que se ejecute el diseño).