Un simulateur de réseau neuronal dans la FPGA?

pour apprendre la programmation FPGA, je prévois de coder un simple réseau neuronal dans FPGA (puisqu'il est massivement parallèle; c'est l'une des rares choses où une implémentation FPGA pourrait avoir une chance d'être plus rapide qu'une implémentation CPU).

bien que je sois familier avec la programmation C (10+ ans). Je ne suis pas sûr avec le développement de FPGA. Pouvez-vous fournir une liste de ce que je devrais faire / apprendre / acheter?

Merci!

25
demandé sur anon 2010-02-03 11:01:55

8 réponses

Necroposting, mais pour d'autres comme moi qui viennent à travers cette question, il est en profondeur, bien que l'ancien, le traitement de la mise en œuvre des réseaux de neurones à l'aide de Fpga

Cela fait trois ans que j'ai posté ceci, mais il est toujours vu donc j'ai pensé que je voudrais ajouter deux autres documents de l'année dernière que j'ai récemment trouvé.

Le premier parle de FPGA Accélération de Réseaux de Neurones à Convolution. Nallatech a effectué le travail. C'est plus marketing qu'un papier académique, mais encore une lecture intéressante, et pourrait être un point de départ pour quelqu'un intéressant dans l'expérimentation. Je ne suis pas connecté à Nallatech en aucune façon.

le deuxième article est sorti de L'Université de Birmingham, Royaume-Uni, écrit par Yufeng Hao. Il présente Général du Réseau Neuronal de l'Architecture Matérielle sur FPGA.

17
répondu Bill Barnhill 2018-05-16 14:57:37

la plupart des tentatives de construire un réseau neuronal "littéral" sur un FPGA atteignent les limites de routage très rapidement, vous pourriez obtenir quelques centaines de cellules avant p&r tire prend plus de temps à terminer que votre problème vaut la peine d'attendre. La plupart des recherches sur les NN et les FPGA adoptent cette approche, en se concentrant sur une mise en œuvre minimale du "noeud" et en suggérant que la mise à l'échelle est maintenant triviale.

la façon de faire fonctionner un réseau neuronal de taille raisonnable est d'utiliser la FPGA pour construire un réseau machine à calculer neuronale. Obtenez vos valeurs initiales de noeud dans une puce mémoire, avoir une deuxième puce mémoire pour vos résultats timestamp prochaine, et une troisième zone pour stocker vos poids de connectivité. Pomper les valeurs des noeuds et les données de connexion en utilisant des techniques pour maintenir les bus mémoire saturés (ordre des charges des noeuds par ligne CAS, lecture à l'avance en utilisant des pipelines). Il faudra un grand nombre de passes au-dessus de l'ensemble de données précédent que vous jumelez des poids avec des valeurs précédentes, les exécuter par DSP MAC unités pour évaluer les nouveaux poids de noeud, puis poussez à la zone de mémoire de résultat une fois toutes les connexions évaluées. Une fois que vous avez terminé un pas de temps entier, inversez la direction du flux de sorte que le prochain pas de temps renvoie à la zone de stockage originale.

16
répondu shuckc 2012-10-05 13:30:49

je veux souligner un problème potentiel avec la mise en place d'un réseau neuronal dans la FPGA. Les apgf disposent de ressources limitées en matière de routage. Contrairement aux ressources logiques (flops, tables de recherche, mémoires), les ressources de routage sont difficiles à quantifier. Peut-être qu'un simple réseau neuronal fonctionnera, mais un réseau "massivement parallèle" avec des interconnexions maillées pourrait ne pas fonctionner.

je suggère de commencer par un simple noyau de OpenCores.org juste pour se familiariser avec le flux FPGA, puis passer à la prototypage d'un Réseau De Neurones. Télécharger gratuitement Xilinx WebPack, qui comprend simulateur ISIM, est un bon début. Plus tard, vous pouvez acheter un dev bon marché. panneau avec un petit FPGA (par exemple Xilinx Spartan 3) pour exécuter vos dessins sur.

10
répondu OutputLogic 2010-02-12 01:49:06

un réseau neuronal peut ne pas être le meilleur point de départ pour apprendre à programmer un FPGA. Je voudrais d'abord essayer quelque chose de plus simple comme un compteur de conduite LEDs ou un affichage numérique et construire à partir de là. Les Sites qui peuvent être utiles:

vous pouvez également envisager d'utiliser un processeur souple dans la FPGA pour faciliter votre transition de C vers VHDL ou Verilog. Cela vous permettrait de déplacer de petits modules de code de l'un à l'autre pour voir les différences dans le matériel. Le choix de la langue est quelque peu arbitraire - code I en VHDL (syntaxiquement similaire à ADA) la plupart du temps, mais certains de mes collègues préfèrent Verilog (syntaxiquement similaire à C). Nous avons le débat de temps en temps mais c'est vraiment personnel choix.

en ce qui concerne le guide acheteurs / apprenants, vous devez:

  1. Patience:) - Le cycle de conception pour FPGAs est beaucoup plus long que pour les logiciels en raison du nombre de "paramètres libres" supplémentaires dans la construction, donc ne soyez pas surpris si cela prend un certain temps pour obtenir des conceptions fonctionnant exactement comme vous voulez.

  2. Un conseil de développement - pour l'apprentissage, j'en achèterais un à L'un des trois plus gros FPGA vendeurs: Xilinx, Altera ou Lattice. Ma préférence est Xilinx pour le moment, mais tous les trois sont bons. Pour l'apprentissage, n'achetez pas un produit basé sur les pièces haut de gamme-vous n'en avez pas besoin lorsque vous commencez à utiliser les FPGAs. Pour Xilinx, faites-en une basée sur la série Spartan comme la SP601 (j'en ai une moi-même). Pour Altera, achetez un Cyclone un. Les cartes de développement seront nettement moins chères que celles des pièces haut de gamme.

  3. Un câble de programmation - la Plupart des entreprises produire un câble de programmation USB avec un connecteur spécial pour programmer les appareils sur la carte (souvent en utilisant JTAG). Certaines cartes ont l'interface de programmation intégrée (comme la SP601 de Xilinx) donc vous n'avez pas besoin de dépenser de l'argent supplémentaire pour cela.

  4. construire des outils

    le logiciel comprend des étapes que vous ne connaissez peut-être pas et qui proviennent du monde du logiciel. Les caractéristiques du flux d'outils changent constamment, mais tout outil que vous utilisez devrait pouvoir passer de votre code à votre périphérique spécifique. La dernière partie de ce flux de conception est normalement fournie par le fournisseur de la FPGA parce qu'elle est spécifique au matériel et exclusive. Pour vous donner un bref exemple, le logiciel dont vous avez besoin devrait prendre votre code VHDL et Verilog et (c'est le Xilinx version):

    • 'Synthétisez' cela en constructions qui correspondent aux blocs de construction disponibles à l'intérieur de votre FPGA particulière.
    • 'Translate & carte' de la conception dans la partie.
    • "placer & route" la logique dans le périphérique spécifique afin qu'elle réponde à vos exigences de synchronisation (par exemple la vitesse d'horloge à laquelle vous voulez que la conception s'exécute).
9
répondu Jxj 2012-02-17 02:30:39

peu importe ce que dit Charles Stewart, Verilog est un bon point de départ. Ça me rappelle C, tout comme VHDL me rappelle ADA. Personne n'utilise L'Occam dans l'industrie et ce n'est pas courant dans les universités.

pour un livre de Verilog, je recommande ceux-ci surtout Verilog HDL. Verilog fait un travail parallèle trivial, contrairement à C.

pour acheter, procurez-vous une planche eval Cyclone III relativement bon marché de [Altera] ou D'Altera 3 (par exemple, ce Cyclone III one with NIOS pour $449 ou pour 199$) ou Xilinx.

7
répondu Brian Carlton 2010-02-04 21:00:58

je vais vous donner encore une troisième recommandation: utilisez VHDL. Oui, à première vue, on dirait ADA. Alors que Verilog a une ressemblance passagère avec C. Cependant, avec Verilog vous n'obtenez que les types qui viennent avec elle hors de la boîte. Avec VHDL vous pouvez définir vos propres nouveaux types qui vous permettent de programmer à un niveau plus élevé (encore RTL, bien sûr). Je suis presque sûr que les outils libres de Xilinx et D'Altera prennent en charge VHDL et Verilog. "A Designers Guide to VHDL" par Ashenden est un bon VHDL livre.

VHDL a un paquet mathématique fixe standard qui peut faciliter la mise en œuvre de NN.

7
répondu aneccodeal 2017-06-15 16:22:39

Il est vieux, parce que je n'ai pas beaucoup réfléchi à des Fpga dans près de 20 ans, et il utilise un tel langage de programmation qui est assez obscure, mais la Page & Luk, 1991, la Compilation d'Occam dans les Fpga couvre certains sujets cruciaux d'une manière agréable, assez, je pense, pour vos buts. Deux liens pour essayer des trucs:

  1. KRoC est un compilateur Occam, basé sur linux, qui est maintenu activement, et je sais qu'il a une base d'utilisateurs active.
  2. Roger Peel a une page de synthèse logique

Occam->FPGA n'est pas là où l'action est, mais il peut être un endroit beaucoup mieux pour commencer que, disons, Verilog.

2
répondu Charles Stewart 2010-02-03 09:46:20

je recommande de regarder dans , surtout si vous venez d'un contexte C. Il supprime les détails techniques lors de l'utilisation d'un hdl afin que le concepteur puisse se concentrer sur l'implémentation algorithmique.

la restriction sont dans le type de code C que vous pouvez écrire. Par exemple, vous ne pouvez pas utiliser des structures de données de taille dynamique, car cela déduirait du matériel de taille dynamique.

0
répondu iyop45 2017-12-04 23:48:29