est-il possible de donner une estimation empirique de la taille des réseaux de neurones qui peuvent être entraînés sur des GPU courants de qualité grand public ? Par exemple:
Le papier Emergence of Locomotion (Reinforcement) forme un réseau utilisant l'activation tanh des neurones. Ils ont un NN à 3 couches avec 300 200 100 unités pour le Planar Walker . Mais ils ne signalent pas le matériel et l'heure ...
Mais une règle d'or pourrait-elle être élaborée? Également basé sur les résultats empiriques actuels, par exemple:
Les unités X utilisant l'activation sigmoïde peuvent exécuter Y itérations d'apprentissage par heure sur un 1060.
Ou l'utilisation de la fonction d'activation a au lieu de b entraîne une diminution des performances.
Si un étudiant / chercheur / curieux va acheter un GPU pour jouer avec ces réseaux, comment décidez-vous de ce que vous obtenez? Un 1060 est apparemment l'option de budget d'entrée de gamme, mais comment pouvez-vous évaluer s'il n'est pas plus intelligent d'obtenir simplement un netbook merdique au lieu de construire un bureau haute puissance et de dépenser les dollars économisés sur l'infrastructure cloud à la demande.
Motivation pour la question: je viens d'acheter un 1060 et (intelligent, pour poser la question ensuite hein) je me demande si j'aurais juste dû garder les $ et créé un compte Google Cloud. Et si je peux exécuter ma simulation de mémoire sur le GPU.
la source
À titre de mise en garde, je suggère qu'à moins que vous ne poussiez contre des limites technologiques fondamentales, la vitesse de calcul et les ressources devraient être secondaires par rapport à la logique de conception lors du développement d'une architecture de réseau neuronal.
Cela dit, plus tôt cette année, j'ai terminé ma thèse sur la SEP qui impliquait des pipelines d'analyse bioinformatique avec des données de séquençage du génome entier - ce projet a pris plus de 100000 heures de temps de calcul à développer selon notre gestionnaire de tâches de grappes. Lorsque vous êtes dans un délai, les ressources peuvent être une véritable contrainte et la vitesse peut être critique.
Donc, pour répondre à vos questions telles que je les comprends:
Aurais-je préféré utiliser l'argent pour gagner du temps dans le cloud?
Probablement. Les quelques centaines de dollars que vous avez dépensés pour le 1060 vous amèneraient loin à entraîner vos modèles dans le cloud. De plus, pour autant que je sache, vous n'avez pas besoin que le GPU démarre 100% du temps (vous le feriez si vous étiez, disons, en train d'extraire des crypto-monnaies). Enfin, avec des instances cloud, vous pouvez évoluer, en entraînant plusieurs modèles à la fois, ce qui peut accélérer l'exploration et la validation de toute architecture sur laquelle vous vous installez.
Existe-t-il un moyen de mesurer le temps de calcul d'un réseau neuronal sur un GPU donné
Eh bien, Big O est un estimateur, mais il semble que vous souhaitiez une méthode plus précise. Je suis sûr qu'ils existent, mais je dirais que vous pouvez faire votre estimation avec un simple calcul des enveloppes qui tiennent compte des threads, de la mémoire, des itérations de code, etc. Voulez-vous vraiment creuser dans le pipeline de traitement GPU sur le 1060? Vous pourrez peut-être arriver à une très bonne estimation en comprenant tout ce qui se passe entre votre code et le métal, mais en fin de compte, cela ne vaut probablement pas le temps et l'effort; cela confirmera probablement que la notation Big O (le modèle simple, si vous voulez) capture la majeure partie de la variation du temps de calcul. Une chose que vous pouvez faire si vous constatez des goulots d'étranglement est le profilage des performances.
la source
Cela dépend de ce dont vous avez besoin. Vous pouvez former n'importe quelle taille de réseau sur n'importe quelle ressource. Le problème est le temps de formation. Si vous souhaitez former Inception sur un processeur moyen, il faudra des mois pour converger. Tout dépend donc du temps que vous pouvez attendre pour voir vos résultats en fonction de votre réseau. Comme dans les réseaux neuronaux, nous n'avons pas qu'une seule opération mais plusieurs (comme la concaténation, la mise en commun maximale, le remplissage, etc.), il est impossible de faire une estimation comme vous le recherchez. Commencez simplement à former des réseaux infâmes et mesurez le temps. Ensuite, vous pouvez interpoler le temps qu'il faudra pour former les réseaux que vous recherchez.
la source