Deep Learning sur le MO5
Modérateurs : Papy.G, fneck, Carl
Deep Learning sur le MO5
Bonjour,
Je suis le fils de Daniel qui est bien connu ici, et je travaille dans le domaine de l'intelligence artificielle. Ces derniers temps, je me suis amusé à faire fonctionner un réseau de neurones à convolutions pour jouer au Go sur le MO5. C'est le même algorithme qu'AlphaGo, pour ceux qui en auraient entendu parler.
J'ai écrit un article sur le sujet que je vais présenter au Game Programming Workshop au Japon dans deux semaines. Je ne peux pas le diffuser pour des raisons de copyright, mais il devrait être mis en ligne publiquement dans quelques temps sur cette page: https://ipsj.ixsq.nii.ac.jp/ej/index.ph ... block_id=8
J'ai aussi préparé un poster dont je n'ai pas cédé les droits, que je partage là: https://www.kayufu.com/files/crazy_ston ... poster.pdf
Je serais content d'en discuter si vous avez des questions.
En bref, le programme marche bien, joue un coup en 12 secondes environ sur un plateau 9x9, et peut battre un humain pas trop fort. Il a un niveau similaire à GNU Go, et est considérablement plus fort que tout ce qui existait à l'époque. L'apprentissage s'est fait sur un PC moderne.
Je ne peux pas diffuser le programme pour des raisons juridiques.
Je remercie les membres du forum que j'ai spammés avant mon départ pour leur généreuse offre d'aide. J'avais cassé mon SDDRIVE juste avant de partir, et j'ai pu en récupérer un in extremis. J'ai vu qu'une personne a laissé un message sur mon répondeur, mais j'étais déjà dans l'avion et je n'ai pas pu répondre, désolé. Merci beaucoup à cette personne et aux autres à qui j'ai répondu aussi.
Je suis le fils de Daniel qui est bien connu ici, et je travaille dans le domaine de l'intelligence artificielle. Ces derniers temps, je me suis amusé à faire fonctionner un réseau de neurones à convolutions pour jouer au Go sur le MO5. C'est le même algorithme qu'AlphaGo, pour ceux qui en auraient entendu parler.
J'ai écrit un article sur le sujet que je vais présenter au Game Programming Workshop au Japon dans deux semaines. Je ne peux pas le diffuser pour des raisons de copyright, mais il devrait être mis en ligne publiquement dans quelques temps sur cette page: https://ipsj.ixsq.nii.ac.jp/ej/index.ph ... block_id=8
J'ai aussi préparé un poster dont je n'ai pas cédé les droits, que je partage là: https://www.kayufu.com/files/crazy_ston ... poster.pdf
Je serais content d'en discuter si vous avez des questions.
En bref, le programme marche bien, joue un coup en 12 secondes environ sur un plateau 9x9, et peut battre un humain pas trop fort. Il a un niveau similaire à GNU Go, et est considérablement plus fort que tout ce qui existait à l'époque. L'apprentissage s'est fait sur un PC moderne.
Je ne peux pas diffuser le programme pour des raisons juridiques.
Je remercie les membres du forum que j'ai spammés avant mon départ pour leur généreuse offre d'aide. J'avais cassé mon SDDRIVE juste avant de partir, et j'ai pu en récupérer un in extremis. J'ai vu qu'une personne a laissé un message sur mon répondeur, mais j'étais déjà dans l'avion et je n'ai pas pu répondre, désolé. Merci beaucoup à cette personne et aux autres à qui j'ai répondu aussi.
Re: Deep Learning sur le MO5
Bonjour Remi,
C'est sympa de mixer techniques modernes avec ordinateurs anciens. Les réseaux neuronaux existaient déjà dans les années 80/90 (on a une machine dédiée du CEA à l'Aconit, la MIND-1024), mais sous une forme plus simple que les réseaux modernes à convolution qui eux consomment beaucoup de puissance de calcul.
Peux-tu en dire plus sur la complexité du modèle que tu infères sur le MO5 ? Pour l'apprentissage du réseau, tu as utilisé un dataset existant, ou tu as dû le créer ?
EDIT: en fait, il y a pas mal de réponses dans la présentation partagée.
C'est sympa de mixer techniques modernes avec ordinateurs anciens. Les réseaux neuronaux existaient déjà dans les années 80/90 (on a une machine dédiée du CEA à l'Aconit, la MIND-1024), mais sous une forme plus simple que les réseaux modernes à convolution qui eux consomment beaucoup de puissance de calcul.
Peux-tu en dire plus sur la complexité du modèle que tu infères sur le MO5 ? Pour l'apprentissage du réseau, tu as utilisé un dataset existant, ou tu as dû le créer ?
EDIT: en fait, il y a pas mal de réponses dans la présentation partagée.
Amstrad CPC et Goupil power
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Re: Deep Learning sur le MO5
C'est un réseau de convolutions 3x3, 8 canaux en entrée, 2 en sortie, 8 couches cachées de 8 canaux. Le nombre de poids est 3*3*8*(8*8 + 2) = 4752. J'ai un schéma de calcul à 26 cycles d'horloge par multiplication, ce qui fait 4752*9*9*26=10007712, soit 10 secondes pour les convolutions. Chaque convolution est compilée "just-in-time" avant d'être exécutée 81 fois. Il y a aussi des multiplications à chaque couche pour remettre les entrées de la couche suivante à l'échelle, et d'autres petits calculs additionnels, pour un total d'environ 12 secondes pour un calcul complet du réseau.
J'ai créé mes données moi-même avec une méthode de type Alpha Zero (le programme joue plein de parties contre lui-même avec une recherche arborescente) sur mon PC.
J'ai créé mes données moi-même avec une méthode de type Alpha Zero (le programme joue plein de parties contre lui-même avec une recherche arborescente) sur mon PC.
Re: Deep Learning sur le MO5
Tu compiles 'just-in-time' sur le MO5 ? Peux-tu développer ?
Pourquoi ne pas compiler 'offline' étant donné que la dimension de tous les tenseurs est connue statiquement ?
Est-ce pour économiser de la mémoire étant donné j'imagine que les boucles des convolutions sont 'unrollées' ?
Pourquoi ne pas compiler 'offline' étant donné que la dimension de tous les tenseurs est connue statiquement ?
Est-ce pour économiser de la mémoire étant donné j'imagine que les boucles des convolutions sont 'unrollées' ?
Amstrad CPC et Goupil power
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Re: Deep Learning sur le MO5
C'est par manque de place. Au début, j'avais essayé de générer le code de tout le réseau (avec les constantes en dur), mais ça faisait plus de 30 kB. Du coup je stocke les 4752 poids, et c'est rentable de les copier une fois dans le code de la convolution avant de l'exécuter 81 fois.
Une autre solution, sans compilation just-in-time, serait de lire dynamiquement les valeurs des poids dans un tableau au moment où on en a besoin. Mais c'est beaucoup plus rapide de pré-compiler en mettant les constantes en dur. En particulier, le MUL du 6809 est non-signé, et les poids du réseau sont signés. Donc j'accumule dans X ou dans Y selon le signe du poids, puis je calcule X - Y tout à la fin. C'est beaucoup plus rapide de pré-compiler dans quel registre on fait l'accumulation plutôt que de faire le test du signe à chaque fois.
Il y a d'ailleurs beaucoup de possibilités d'optimisation que je n'exploite pas encore. En particulier, je pourrais éliminer les multiplications par zéro et par 1, utiliser des décalages, ou des ABX au lieu de LEAX D, X quand je sais que le produit tient sur 8 bits, etc.
Une autre solution, sans compilation just-in-time, serait de lire dynamiquement les valeurs des poids dans un tableau au moment où on en a besoin. Mais c'est beaucoup plus rapide de pré-compiler en mettant les constantes en dur. En particulier, le MUL du 6809 est non-signé, et les poids du réseau sont signés. Donc j'accumule dans X ou dans Y selon le signe du poids, puis je calcule X - Y tout à la fin. C'est beaucoup plus rapide de pré-compiler dans quel registre on fait l'accumulation plutôt que de faire le test du signe à chaque fois.
Il y a d'ailleurs beaucoup de possibilités d'optimisation que je n'exploite pas encore. En particulier, je pourrais éliminer les multiplications par zéro et par 1, utiliser des décalages, ou des ABX au lieu de LEAX D, X quand je sais que le produit tient sur 8 bits, etc.
- Carl
- Modérateur
- Messages : 13545
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
Re: Deep Learning sur le MO5
Bonjour Rémi et bienvenue sur le forum…
Sur l’autre fil de discussion, j’avais supposé que Daniel était au Japon…finalement, je n’étais pas très loin…
Carl
Sur l’autre fil de discussion, j’avais supposé que Daniel était au Japon…finalement, je n’étais pas très loin…
Carl
- sporniket
- Messages : 478
- Inscription : 22 mars 2022 20:23
- Localisation : Pas trop loin au sud de Paris
Re: Deep Learning sur le MO5
Chouette, un peu de lecture pour plus tard, merci.
La prochaine étape, c'est exploiter les nouvelles extensions de mémoire, et n'oublions pas l'IA collective avec le nanoréseau (bon par contre à transporter au japon, ça serait un peu plus la galère...)Rémi C. a écrit : ↑06 nov. 2023 11:10 C'est par manque de place. Au début, j'avais essayé de générer le code de tout le réseau (avec les constantes en dur), mais ça faisait plus de 30 kB. Du coup je stocke les 4752 poids, et c'est rentable de les copier une fois dans le code de la convolution avant de l'exécuter 81 fois.
Re: Deep Learning sur le MO5
Je n'avais pas vu l'autre fil. Désolé pour le doublon. Je mets le lien ici: viewtopic.php?f=17&t=14873&p=238566&hilit=Japon#p238566
Re: Deep Learning sur le MO5
Une autre piste d'optimisation est le remplacement du processeur 6809 par un 6309. En mode natif les instructions ont presque toutes un cycle de moins, mais surtout il y a plus de registres et de nouvelles instructions qui peuvent faire gagner du temps.
Dans beaucoup de MO5 le processeur est sur support, il n'est pas difficile de le changer. Pour les autres c'est plus compliqué, il faut dessouder.
Dans beaucoup de MO5 le processeur est sur support, il n'est pas difficile de le changer. Pour les autres c'est plus compliqué, il faut dessouder.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Deep Learning sur le MO5
Merci pour toutes ces informations, le sujet est très intéressant.
ça fait plaisir de croiser d'autres personnes qui développent pour le 6809.
ça fait plaisir de croiser d'autres personnes qui développent pour le 6809.
Re: Deep Learning sur le MO5
L'article est maintenant en ligne sur le site de l'IPSJ:
https://ipsj.ixsq.nii.ac.jp/ej/?action= ... block_id=8
https://ipsj.ixsq.nii.ac.jp/ej/?action= ... block_id=8
-
- Messages : 8388
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Deep Learning sur le MO5
Intéressant ! Je mets ici le lien direct sur le PDF car la page est en Japonais et qu'il n'est pas facile de trouver le bon lien en clickant au hasard.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos