DeepFreeze est l'outil utilisé pour modéliser PPA et générer RTL pour le projet Fixynn . Les scripts sont inclus pour générer RTL à partir d'un graphique TensorFlow et pour synthétiser / simuler cette conception. Pour travailler avec un graphique non-TensorFlow, vous devez écrire votre propre structure de données de couche pour se nourrir à un objet VeriloGenerator (voir la fin de gen_verliog.py
par exemple l'utilisation).
Pour plus d'informations sur Fixynn , y compris une description de DeepFreeze dans son contexte, consultez l'article suivant: Fixynn: matériel efficace pour la vision de l'ordinateur mobile via l'apprentissage du transfert.
Cet outil a été construit et testé à l'aide de Python 2.7.15 et TensorFlow 1.10.1.
Les packages Python requis sont Numpy et TensorFlow. Pour installer:
pip install numpy tensorflow
cd deep_freeze/
bash run.sh
Pour ajouter un modèle pour la génération ou la modélisation RTL, vous devez fournir:
mobilenet_base
revient dans https://github.com/tenserflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py)Chaque couche d'un réseau fixe est définie par un module Verilog généré ou une instanciation paramétrée d'un module manuscrit. Toute couche avec des variables entraînables est générée et toutes les autres sont instanciées. Les variables formables sont codées en dur dans le RTL avec une précision variable et sont implémentées dans une conception synthétisée sous forme de scalaires fixes. Ce qui serait traditionnellement implémenté dans une unité Mac dans un accélérateur programmable est plutôt composé de scalaires fixes suivis d'un arbre additionneur de transport dans une conception de poids fixe. Ceci est très efficace en énergie, mais nécessite une grande zone de silicium. La zone du silicium pousse à peu près linéairement avec la nuque des variables fixes.
Pour réaliser une utilisation élevée des données fixes, nous avons entièrement pipeline les couches. Cela nécessite des activations tampon entre les couches. Nous pouvons éviter tamponner l'activation entière d'une couche en utilisant un tampon de ligne. Cet article fournit une explication fondamentale quels tampons de ligne et et comment ils sont utilisés.
Notre implémentation d'un tampon de ligne est composée de deux parties: un tampon SRAM et un tampon de registre. Le SRAM stocke les activations pour autant de lignes que nécessaire à être couronnées à la fois (égale à la hauteur du noyau suivant). Le tampon de registre suit le tampon SRAM et stocke les activations MXN pour les noyaux MXN suivants. Cela élimine les lectures inutiles du tampon SRAM.
La taille SRAM requise pour un calque est IM_HEIGHT * IM_WIDTH * NCHANNELS * NBITS
. Ceci est divisé en IM_HEIGHT * IM_WIDTH
mots de taille NCHANNELS * NBITS
. La taille du tampon de registre est K_HEIGHT * K_WIDTH * NCHANNELS * NBITS
.
La fixation des couches dans le matériel offre une opportunité pour une variété d'optimisations agressives (à la fois les optimisations matérielles et les optimisations dans la conception du modèle).
Des améliorations de l'architecture réseau peuvent entraîner des améliorations du matériel APP. Par exemple, les couches séparables dans le sens de la profondeur sont capables d'atteindre une précision similaire à celle des couches convolutionnelles traditionnelles avec 8 à 9x moins de poids. Ces couches fonctionnent très bien dans Fixynn en raison des coûts de zone réduits. Toutes les autres techniques qui réduisent la taille du modèle ou améliorent la précision peuvent profiter à Fixynn.
La fixation des poids dans le silicium nous permet de bénéficier d'une complexité réduite de certaines valeurs. Les poids de valeur zéro sont un exemple: ils peuvent être explicitement supprimés du matériel sans frais généraux. Cela rend l'élagage particulièrement puissant et attrayant.
En outre, les valeurs avec des poids à faible émission, c'est-à-dire le nombre de bits non nuls dans leur représentation binaire, sont bon marché à implémenter dans le matériel fixe. En effet, les scalaires fixes sont implémentés en tant que série de changements et ajoutent. Moins des bits non nuls de la multiplicande fixe, moins les changements et les ajouts sont nécessaires. L'outil de synthèse est également en mesure de profiter des valeurs avec un poids de Hamming élevé par rapport au nombre total de bits requis pour représenter le nombre. Par exemple, un scalaire x * 239
(poids hamming = 7, nbits = 8) peut être implémenté comme x << 8 - x << 5
dans le matériel.
Pour les images haute résolution, chaque rangée d'un tampon de ligne nécessite une zone importante de SRAM. Nous pouvons éliminer une partie de ce SRAM en tampon uniquement les fractions d'une ligne à la fois et en faisant plusieurs passes sur l'image. Cela se produit au prix d'une augmentation du matériel de contrôle et d'un calcul redondant des activations sur la limite de la plage de tampon de ligne. Ce calcul redondant entraîne un coût minimal de l'énergie et de la latence car le matériel fixe est très efficace.
Tout noyau 1x1 ne nécessite pas de tampon le précédant car il peut consommer directement les activations générées par la couche précédente. Il en résulte des couches séparables dans le sens de la profondeur sans nécessiter de tampon entre les convolutions de profondeur et de point ponctuel. Par conséquent, nous pouvons fusionner ces deux opérations en un seul bloc cambinational.
Les couches CONV2D sont efficaces dans cette conception car elles présentent une réutilisation de poids élevée, ce qui entraîne un coût de surface relativement faible. Les couches denses ne présentent aucune réutilisation de poids. Par conséquent, les couches denses entraînent une utilisation très inefficace de la zone. De plus, les couches denses ne permettent pas la mise en mémoire tampon des lignes, ce qui se traduit par de assez grandes zones de registre.
Notre travail pour SYSML 2019 (voir sysml_2019/
) explore les extracteurs de fonctionnalités CNN entièrement fixés. Le PPA de cet extracteur de fonctionnalités est excellent car il ne contient que des couches CONV2D. Les réseaux entiers implémentés dans le matériel fixe doivent payer le coût de la zone que les couches denses exigent. Cela peut être acceptable pour les petits modèles IoT.
Les CNN présentent généralement le comportement où les couches frontales ont de nombreux pixels d'entrée et un petit nombre de grains, tandis que les couches arrière ont moins de pixels d'entrée et un grand nombre de noyaux. Il en résulte que la zone SRAM se concentre vers l'avant du pipeline de réseau, tandis que la zone combinatoire est concentrée vers l'arrière du pipeline de réseau.
Toute couche avec une foulée supérieure à 1x1 produit moins de pixels d'activation qu'il ne consomme par image. Par exemple, une couche Pool2D qui marche 2x2 sur une image 100x100 produit une image 50x50, qui est une réduction 4x des pixels. Il en résulte des couches suivantes ayant 1 / 4x le nombre de cycles actifs (chaque pixel de sortie par couche nécessite 1 cycle). Cela signifie que les pipelines de réseau très profonds avec beaucoup d'échantillonnage à la baisse seront considérablement étouffés par les couches frontales, ce qui entraîne une faible utilisation des couches backend.
Cet aperçu nous aide à sélectionner des modèles qui se traduiront bien dans le matériel. Certaines architectures effectuent une réduction des activations précoces pour réduire la latence sur un CPU en réduisant le nombre total de Mac (au coût de la taille du modèle) (voir FD-Mobilenet). Les modèles implémentés dans Fixynn souhaitent faire le compromis opposé: réduire le nombre de paramètres au coût du calcul (car la zone est la principale limitation des performances dans un système réel).
La réparation d'une partie d'un CNN dans le matériel rend difficile la réutilisation de ce matériel à d'autres fins. Notre travail pour SYSML 2019 explore ce compromis et démontre qu'une certaine quantité de matériel fixe est capable de généraliser à de nombreux modèles différents. Les travaux futurs se concentreront sur l'amélioration de la généralisation du matériel fixe en ajoutant une certaine programmabilité (tout en bénéficiant de l'efficacité du matériel de poids fixe).
SAME
rembourrage en modifiant sram_controller.sv
flatten.sv
pour activer les réseaux de classification d'images entièrement fixés en aplatir une image des couches 2D aux couches denses.ker_size
des données est écrit au SRAM.Des œuvres publiées qui ont utilisé cet outil ont été présentées au SYSML 2019 et à l'atelier ML sur les Neirips 2018. Le papier complet se trouve sur ArXIV chez Fixynn: matériel efficace pour la vision des ordinateurs mobiles via l'apprentissage du transfert.
Si vous trouvez cette profondefreeze utile pour vos recherches, veuillez utiliser le bibtex suivant pour nous citer,
@article{fixynn,
title={FixyNN: Efficient Hardware for Mobile Computer Vision via Transfer Learning},
author={Whatmough, Paul and Zhou, Chuteng and Hansen, Patrick and Venkataramanaiah, Shreyas Kolala and Seo, Jae-Sun and Mattina, Matthew},
journal={SysML},
year={2019}
}
Patrick Hansen, ARM ML Research Lab, Boston, MA
Shreyas Kolala Venkataramanais, Arizona State University
Paul Whatmough, ARM ML Research Lab, Boston, MA
Ce projet est autorisé en vertu de la licence MIT - voir le fichier de licence pour plus de détails.