❌

Vue lecture

Unvanquished 0.55, enfin là !

AprĂšs une longue attente la version 0.55 du jeu Unvanquished a Ă©tĂ© publiĂ©e le 20 octobre 2024. Deux mises Ă  jour mineures se sont succĂ©dĂ©es le 3 novembre et le 15 dĂ©cembre pour peaufiner cette version, juste Ă  temps pour ĂȘtre dĂ©posĂ©e sous le sapin de NoĂ«l !

Unvanquished est un jeu vidĂ©o libre et gratuit mĂȘlant stratĂ©gie en temps rĂ©el et actions Ă  la premiĂšre personne dans un univers futuristique oĂč deux factions (humains, aliens) combattent pour leur survie.

S’inscrivant dans la continuitĂ© de Tremulous (rĂ©vĂ©lĂ© en 2006) et basĂ© sur ce dernier, Unvanquished dĂ©veloppe cette expĂ©rience de jeu nerveuse et exigeante depuis 2013, en amĂ©liorant continuellement le moteur et explorant des variantes et ajustements de jouabilitĂ©.

Un Tyrant Laisse-moi goĂ»ter Ă  cette version !

Sommaire

Cette version avait Ă©tĂ© promise dans le dernier article Des nouvelles de Unvanquished, et 10 mois aprĂšs la version 0.54, voici la version 0.55.

Pendant cette annĂ©e 2024, le jeu a fait l’objet d’un dĂ©veloppement soutenu et vu l’arrivĂ©e de nouveaux contributeurs.

Gameplay

  • La portĂ©e du « rocket pod » a Ă©tĂ© rĂ©duite: 2000qu → 1300qu (62m → 40m).
  • Il n’est plus possible de dĂ©sĂ©voluer vers la mĂȘme classe, ce qui permettait de recharger ses projectiles sans attendre.

Bots

  • Les bots aliens savent dĂ©sormais Ă©teindre les bases en feu.
  • Ils peuvent aussi utiliser le granger avancĂ© pour atteindre des plate-formes Ă©levĂ©es et y construire.
  • Les classes sachant marcher sur les murs le font de maniĂšre plus fiable, et le saut de mur du maraudeur est plus prĂ©cis lorsqu’il escalade des murs.

D’autres amĂ©liorations sont plus subtiles, les bots peuvent naviguer dans les cartes de façon plus efficace depuis que la taille des tuiles du maillage de navigation est configurable. Les mappers (ceux qui crĂ©ent ou modifient des cartes) peuvent aussi configurer d’autres aspects de la navigation.

Un déséquilibre qui rendait les bots aliens moins bons que les bots humains a été retravaillé.

La navigation dans la carte perseus a Ă©tĂ© amĂ©liorĂ©e. C’est un des patchs de la mise Ă  jour mineure 0.55.1, c’était dĂ©jĂ  prĂȘt pour la 0.55 mais avait Ă©tĂ© oubliĂ© (oups !).

La 0.55.2 a donné aux bots la capacité de voler et la capacité de danser autour des ravins sans tomber.

Interface utilisateur

Il est dĂ©sormais possible de se dĂ©placer et d’utiliser certaines touches d’action alors que certains menus circulaires sont ouverts : Ă©volution, construction, balises (beacons). Cela permet d’ouvrir le menu de construction en tant que granger avancĂ© sans tomber. On peut aussi Ă©voluer tout en courant ou en sautant, etc.

Les nouveaux menus Les nouveaux menus avec les options de réticules.

Traductions

La version 0.55 est la premiĂšre version majeure d’Unvanquished Ă  distribuer de nouveau des traductions ! Nous avions dĂ©jĂ  distribuĂ© quelques traductions avec la version de correction 0.54.1, elles Ă©taient en quelques sorte en prĂ©visualisation. Cette version apporte les traductions pour le Français, l’Allemand, l’Italien, l’Espagnol, le Finlandais, deux variantes de Portugais, et trois variantes de Chinois.

Dans les premiers jours d’Unvanquished nous avions des traductions, mais il y a longtemps nous avons changĂ© la technologie utilisĂ©e pour implĂ©menter l’interface utilisateur et la prise en charge des traductions a dĂ» ĂȘtre rĂ©implĂ©mentĂ©e. Les voici de retour et nous sommes heureux de vous les distribuer de nouveau. Pour contribuer plus de traductions et les affiner, le mieux est de le faire sur Weblate.

Nouveaux visuels

De nouveaux modĂšles sont là : la « painsaw » d’Alex Tikkoiev et le Chaingun d’extreazz. Ils ont Ă©tĂ© intĂ©grĂ©s au jeu par Ishq. Cela semble simple Ă  faire mais nous n’avons pas de modeleur ni d’animateur actif et cela nous freine beaucoup, vous pouvez nous rejoindre.

Le chaingun Le nouveau chaingun d’extreazz.

La painsaw produit désormais des étincelles quand elle impacte des surfaces dures, agissant comme le Grand Communicateur de vos désirs de disperser des tripes extra-terrestres.

La painsaw La nouvelle painsaw d’Alex Tikkoiev.

Il y a dix ans nous avons reçu une fonctionnalitĂ© bien sympathique appelĂ©e particules douces (soft particles). Cela empĂȘche certains effets comme le brouillard ou les nuages d’acides d’ĂȘtre affichĂ©s de maniĂšre disgracieuse lorsqu’ils touchent des murs. Initialement l’effet n’était configurĂ© que pour une poignĂ©e de shaders. Rapidement des programmeurs paresseux se sont dits : « configurer les shaders est ennuyeux, et si nous activions la fonctionnalitĂ© pour toutes les particules ? ». Malheureusement, cela rend certaines particules invisibles, spĂ©cialement les effets d’impacts qui sont trĂšs proches de murs ou de sols. Apparemment personne n’a remarquĂ© ça pendant 9 ans, jusqu’à ce que nous retournions Ă  la configuration manuelle de shaders Ă  cause de changements architecturaux liĂ©s Ă  autosprite2. AprĂšs une revue mĂ©ticuleuse de tous les systĂšmes de particules du jeu, nous avons corrigĂ©, retirĂ© ou amĂ©liorĂ© certains effets graphiques. Par exemple le souffle du canon lucifer produit dĂ©sormais une onde de choc, causant une distorsion visuelle. Un tel effet Ă©tait dĂ©jĂ  prĂ©sent dans les donnĂ©es, mais il ne fonctionnait pas Ă  cause d’un problĂšme de tri des shaders. Le tir secondaire produit aussi un flash violacĂ© Ă  l’impact, effet qui Ă©tait souvent invisible Ă  cause des particules douces automatiques.

Un humain en cours de soin sur la médistation Le nouvel effet de soin de la médistation.

Reaper a repensĂ© l’effet de soin de la medistation et l’a rendue plus transparente, pour que les joueurs en cours de soin puissent voir Ă  travers.

Sweet a ajoutĂ© un nouvel effet visuel au champ de force de la carte plat23. Cela utilise l’effet de mirage de chaleur (heat haze) qui Ă©tait initialement conçu pour les armes et les effets de feu, mais il se trouve que ça peut Ă©galement produire des effets trĂšs sympathiques dans les cartes. Nous remercions Masmblr pour la maniĂšre dont il nous fait avancer en dĂ©montrant dans ses propres cartes communautaires comment il est possible d’exploiter de façon crĂ©ative et nouvelle des fonctionnalitĂ©s que nous proposons dĂ©jà !

Fichier d’entitĂ©

Le moteur prend dĂ©sormais en charge les fichiers d’entitĂ©. Cela est particuliĂšrement utile pour les cartes (niveaux de jeu) sans source (il y en a des centaines !). Un fichier d’entitĂ© permet certaines personnalisations de comment certaines entitĂ©s fonctionnent (portes, ascenseurs, tĂ©lĂ©porteurs
). Il est possible d’extraire une description d’entitĂ©s avec q3map2 et le fichier extrait peut ĂȘtre Ă©ditĂ© avec un Ă©diteur de texte et lu par le moteur lorsqu’il charge une carte. Le fichier d’entitĂ© peut aussi ĂȘtre utilisĂ© pour modifier comment la lumiĂšre d’une carte sera appliquĂ©e (il est possible d’y renseigner des variables qui configurent le moteur de rendu pour cette carte).

Le futur est lumineux

Comparaison de rendu de lumiÚre Une vidéo démontrant la compatibilité des lumiÚres de diverses cartes historiques (voir la vidéo complÚte).

Un effort aux long cours est fait pour que le moteur affiche de meilleures lumiĂšres en jeu. Les investigations ont commencĂ© Ă  livrer des rĂ©sultats significatifs en 2020 avec l’affinage du procĂ©dĂ© de compilation des lumiĂšres. Cet effort est multi-facettes et touche Ă  de multiples aspects de la chaĂźne de production et de rendu. Ces derniĂšres annĂ©es, Illwieckz s’est assurĂ© que diffĂ©rents types d’éclairage soient pris en charge. L’éclairage par vertex (vertex lighting) a Ă©tĂ© ajoutĂ© en plus de l’éclairage par grille (grid lighting) et de l’éclairage par texture (lightmap). Ainsi les cartes qui mĂ©langent Ă©clairage par vertex et Ă©clairage par texture sont dĂ©sormais correctement affichĂ©es. Illwieckz a aussi dĂ©bugguĂ© les styles de lumiĂšres, une sorte de lumiĂšre dynamique prĂ©-calculĂ©e qui fusionne plusieurs textures de lumiĂšre (lightmap) au moment du rendu.

Comparaison de suréclairage Comparaison entre l'ancien suréclairage (à gauche) et le nouveau suréclairage (à droite). Comparer avec un curseur.

AprĂšs cela Illwieckz a rĂ©implĂ©mentĂ© le mĂ©canisme de surĂ©clairage (overbright) pour Ă©viter la troncature des lumiĂšres (light clamping). Il se trouve que le moteur de rendu de Quake 3 souffrait d’une limitation qui attĂ©nuait les lumiĂšres autant qu’il les Ă©claircissait
 Le nouveau code non-buggĂ© est dĂ©sormais activĂ© par dĂ©faut. Cela a suscitĂ© des dĂ©bats puisque comme le moteur id Tech 3 avait un surĂ©clairage buggĂ© depuis plus de 20 ans, utiliser un moteur de rendu non-buggĂ© peut rĂ©vĂ©ler des bugs que les crĂ©ateurs de niveaux n’ont jamais vu avant, et il Ă©tait mĂȘme possible d’introduire des bugs dans certains logiciels de production sans que les gens ne s’en rendent compte ! Certaines personnes peuvent argumenter que l’affichage buggĂ© est la façon dont le crĂ©ateur du niveau s’attend Ă  ce que son niveau soit vu
 Cette histoire va si loin que cela mĂ©riterait un article dĂ©dié !

La prochaine Ă©tape sur ce chemin vers un meilleur Ă©clairage sera de faire de la colorimĂ©trie correctement et de faire de la fusion linĂ©aire de lumiĂšre (quelque chose qu’id Tech 3 n’a jamais fait), mais cette tĂąche est pour le futur.

Corrections du moteur de rendu

Un battlesuit se regardant dans des miroirs Une vidéo montrant la récursion de miroirs et de portails et leur fusion (voir la vidéo complÚte).

  • Sprites : Les surfaces utilisant le mot clĂ© de shader autosprite2 sont correctement affichĂ©es, c’est parfois utilisĂ© pour afficher des effets de symĂ©trie axiale, par exemple pour une flamme de bougie. Ce travail a Ă©tĂ© rĂ©alisĂ© par Slipher.
  • Portails et miroirs : Reaper a terminĂ© l’implĂ©mentation de la rĂ©cursion de portail et de miroir, a implĂ©mentĂ© la fusion de portails et la fusion alphaGen (une technique qui permet d’obscurcir un portail selon la distance Ă  celui-ci), et a rendu possible d’avoir des portails mobiles. Il a corrigĂ© la rotation de portail ainsi que des bugs de portails liĂ©s aux lumiĂšres, et s’est assurĂ© que du creep extra-terrestre de taille 10 millions de fois la taille de l’univers observable n’apparaissent pas dans les portails

  • VidĂ©o : Nous pouvons Ă  nouveau jouer des vidĂ©os sur les surfaces. Avec le temps le code s’était gĂątĂ© (rotten code), Ă©tait devenu cassĂ© et avait mĂȘme Ă©tĂ© enlevĂ© tandis qu’il Ă©tait cassĂ©. Il fut ressuscitĂ© et a fait l’objet d’une profonde rĂ©Ă©criture par Slipher, et la fonctionnalitĂ© fonctionne de nouveau — et mĂȘme mieux qu’avant (avec moins de limites arbitraires) ! Cette nouvelle implĂ©mentation Ă©tait dĂ©jĂ  visible dans la version 0.54.1, la voici dĂ©sormais dans une version majeure. Le seul format pris en charge est l’antique format RoQ utilisĂ© par Quake 3 qui, par mesure de compatibilitĂ© avec les donnĂ©es de jeu existantes, est le codec que nous devons prendre en charge avant tout autre codec. Nous ne fermons pas la porte au fait de prendre en charge d’autres codecs, mais pour cela il faudrait que la fonctionnalitĂ© soit utilisĂ©e plus souvent pour justifier cet effort supplĂ©mentaire.
  • Brouillard : Reaper a corrigĂ© l’effet de brouillard, qui Ă©tait cassĂ© dans la version 0.45. Oups !
  • LumiĂšres : Les lumiĂšres dynamiques sont dĂ©sormais moins pixelisĂ©es, quand bien mĂȘme ce problĂšme n’est pas encore complĂštement corrigĂ©.
  • PBR : La prise en charge de textures prĂ©tendues « basĂ©es sur la physique » est dĂ©sormais dans un Ă©tat viable grĂące Ă  Ishq (plus d’artefacts noirs). C’est dĂ©jĂ  utilisĂ© avec un nouveau modĂšle de chaingun. Pour le rendre bon, nous avons besoin de le faire fonctionner avec les rĂ©flexions spĂ©culaires (rĂ©flexions statiques).

Un dretch regardant Big Buck Bunny Une vidéo montrant la lecture de vidéo sur les surfaces du jeu (voir la vidéo complÚte).

En corrigeant le shader autosprite2, la fusion de portails et la lecture de vidĂ©os, nous avons corrigĂ© 3 rĂ©gressions du moteur original de Quake 3 et qui Ă©taient liĂ©es Ă  la prise en charge de format de fichiers anciens et de techniques tout aussi anciennes. Parce que notre moteur de rendu n’est plus celui de Quake 3, corriger certaines de ces rĂ©gressions requiert parfois d’écrire du code neuf plutĂŽt que de corriger un code existant, et c’est exactement ce qui s’est produit pour les portails.

Performance améliorées

Un granger Ă  NoĂ«l Unvanquished 0.55.2 a Ă©tĂ© publiĂ©e pour NoĂ«l !

Le moteur et le jeu sont plus rapides que jamais !

  • Simplification du ciel : Reaper a purifiĂ© par le feu le code de rendu du ciel qui Ă©tait archaĂŻque et
 Ă©trange. Ce code pouvait gĂ©nĂ©rer plus de 1000 triangles par trame rien que pour dessiner le ciel. Une skybox n’a pas besoin d’une gĂ©omĂ©trie aussi fine, elle est simplement modĂ©lisĂ©e comme l’intĂ©rieur d’un cube. En plus le code faisait des allers-retours mĂ©moire entre la mĂ©moire principale et la mĂ©moire graphique
 đŸ€Šâ€â™‚ïžïž Nous dessinons donc le ciel maintenant avec seulement 12 triangles. Inutile de dire que les performances sont significativement amĂ©liorĂ©es, et ça aurait toujours dĂ» ĂȘtre comme ça.
  • Culling : Il s’agit du procĂ©dĂ© qui Ă©lague les surfaces non-visibles pour Ă©viter de les dessiner. Illwieckz a optimisĂ© l’implĂ©mentation gĂ©nĂ©rique pour processeur central (CPU), Slipher a ciselĂ© Ă  la main un code SSE pour les processeurs x86, et Reaper a permis d’utiliser la carte graphique (GPU) quand le pilote et le matĂ©riel sont compatibles.
  • RĂ©duction des dĂ©lais IPC par du traitement par lots et de la mise en cache : Ces travaux accĂ©lĂšrent des choses comme les particules, les marques d’impact, et les ombres. Illwieckz a rĂ©duit le temps d’attente pour ces communications interprocessus en ajoutant des alternatives Ă  nos interfaces de programmation (API) qui fonctionnent par lot. L’IPC est comme un service postal qui transporte les messages entre le processus du jeu Unvanquished et le moteur DĂŠmon. Pour un facteur, l’important n’est pas le nombre de pages que vous Ă©crivez mais le nombre d’enveloppes Ă  livrer. Vous pouvez donc allĂ©ger sa charge de travail en mettant toutes vos lettres dans une seule grande enveloppe. Pour un cas d’utilisation (dĂ©jĂ  livrĂ©e dans la version 0.54.1), Slipher a implĂ©mentĂ© une mise en cache cĂŽtĂ© code de jeu. Pour filer la mĂ©taphore, il n’est pas nĂ©cessaire de rĂ©-envoyer le mĂȘme courrier si le contenu est dĂ©jĂ  connu. Sur du matĂ©riel actuel, ces optimisations peuvent augmenter le taux de trame (framerate) de plusieurs centaines de FPS quand il y a de nombreuses particules et autres choses de ce genre Ă  l’écran (spam de grenade incendiaires, par exemple !).
  • Code de vertex flottant plus rapide : L’implĂ©mentation de vertex plein-flottant Ă©crite par Slipher pour Ă©tendre la compatibilitĂ© Ă  du matĂ©riel plus ancien ou de plus basse gamme qui ne prennent pas en charge les demi-flottants a aussi doublĂ© le taux de rafraĂŻchissement sur du matĂ©riel qui fonctionnait dĂ©jà ! La rĂ©Ă©criture a aussi apportĂ© de menues optimisations dans le code de modĂšles.
  • Placage de relief : Reaper a corrigĂ© un bug dans le code des cartes de relief (relief mapping), ce qui a dĂ©bloquĂ© quelques centaines de FPS sur des cartes graphiques de gĂ©nĂ©ration actuelle.
  • Usage mĂ©moire des images : Illwieckz a implĂ©mentĂ© le mĂ©canisme fitScreen pour les textures d’interfaces utilisateur : c’est une alternative Ă  l’antique implĂ©mentation noPicMip de Quake 3 : noPicMip instruisait le moteur de ne jamais rĂ©duire la taille d’une image, fitScreen s’assure qu’elle soit rĂ©duite d’une façon qu’elle ne devienne jamais plus large que l’écran. Par exemple une capture d’écran d’une carte (niveau) utilisĂ©e dans la liste des cartes et au chargement d’une carte ne sera plus jamais chargĂ©e en pleine rĂ©solution dans la mĂ©moire graphique si elle doit ĂȘtre affichĂ©e sur un Ă©cran 640×480 (pour donner un exemple extrĂȘme)
 CombinĂ© avec le mĂ©canisme r_maxImageDimension que nous avons ajoutĂ© en version 0.52 pour les textures qui ne sont pas utilisĂ©es pour les interfaces utilisateurs comme alternative Ă  r_picmip, ce nouveau mĂ©canisme donne au jeu une empreinte mĂ©moire en VRAM trĂšs trĂšs faible quand on utilise un Ă©cran avec une rĂ©solution toute petite.
  • Plus de prĂ©-calcul : De nombreuses dĂ©cisions Ă©taient prĂ©alablement prises Ă  chaque trame en rendant telle ou telle surface, Illwieckz s’est assurĂ© que ces dĂ©cisions soient dĂ©sormais prises une fois pour toute lorsque le shader est parsĂ©. Ce que nous appelons « shader » ici est un format de dĂ©finition de matĂ©riaux utilisĂ© par id Tech 3 et ses dĂ©rivĂ©s, ainsi que de nombreux outils d’édition de cartes. Ne pas confondre avec un « shader GLSL » qui est un programme exĂ©cutĂ© sur la carte graphique.
  • SSAO : Le shader GLSL SSAO (Screen Space Ambient Occlusion) a Ă©tĂ© rendu un peu plus rapide par Reaper.

Le moteur et le jeu ont Ă©tĂ© profilĂ©s intensivement par Illwieckz en utilisant Orbit. Cet effort a permis d’identifier des goulots d’étranglement (bottleneck) et du code non-optimal. Au final cela nous a aidĂ© Ă  implĂ©menter de nombreuses optimisations Ă  de nombreux endroits dans le code.

Le chargement de carte a aussi Ă©tĂ© amĂ©liorĂ© de plusieurs façons :

  • Le moteur ne calcule plus la somme de contrĂŽle des images CRN au chargement.
  • Le moteur ne compile plus certains shaders GLSL qui sont dĂ©tectĂ©s comme inutilisĂ©s.
  • De la mĂȘme façon nous avons rĂ©duit le nombre de permutations de shader GLSL Ă  compiler.
  • Les joueurs qui aiment jouer seul apprĂ©cieront notre gĂ©nĂ©ration « multithread » de maillage de navigation de bot (bot navigation mesh), grĂące Ă  Ishq et Slipher. Cela fait partie de la phase de chargement lorsque vous jouez une carte pour la premiĂšre fois dans un jeu local. Cette gĂ©nĂ©ration n’utilisait avant qu’un seul fil d’exĂ©cution (thread), dĂ©sormais toute la puissante de votre processeur est exploitĂ©e en mettant tous les cƓurs Ă  contribution. Les hĂ©bergeurs de serveurs peuvent Ă©galement en profiter et peuvent configurer cette fonctionnalitĂ© avec la variable g_bot_navgenMaxThreads (utiliser moins de fils utilise moins de mĂ©moire, ce qui peut ĂȘtre prĂ©fĂ©rĂ© sur certains serveurs).

Il y a aussi tout un ensemble de choses qui n’ont pas de lien avec le moteur de rendu qui rendent le jeu plus rapide :

  • Le prĂ©rĂ©glage « le plus bas » (lowest) pour les appareils de trĂšs bas de gamme a Ă©tĂ© optimisĂ© encore plus.
  • Nous distribuons des modĂšles optionnels en faible qualitĂ© – pour le moment seulement pour les constructions, avec la seule diffĂ©rence que ces modĂšles ont moins d’articulations. Cela permet de traiter l’animation de ces modĂšles sur des GPUs plus bas de gamme (au lieu de basculer sur le code CPUs quand le GPU est trop bas de gamme).
  • Il a Ă©tĂ© dĂ©couvert que certaines variables de configuration (cvar) Ă©taient utilisĂ©es par le code de jeu pour envoyer des informations Ă  l’interface du code du jeu dans le but de les afficher Ă  l’écran. Cela signifie que le jeu s’envoyait une lettre Ă  lui-mĂȘme Ă  travers le moteur Ă  chaque trame
 En fait cela demandait mĂȘme deux lettres : une pour envoyer la donnĂ©e au moteur, une pour la rĂ©cupĂ©rer depuis le moteur, tout ça pour une donnĂ©e dĂ©jĂ  connue ! Cette horreur a Ă©tĂ© atomisĂ©e avec un prĂ©judice extrĂȘme.
  • L’accĂšs Ă  une cvar de jeu par son nom depuis le jeu utilise dĂ©sormais un cache local, rĂ©duisant encore le nombre de messages que le jeu et le moteur doivent Ă©changer, accĂ©lĂ©rant de beaucoup l’interface utilisateur.

Ceux qui aiment faire tourner des benchmarks seront heureux d’apprendre que le taux de trame de la fonctionnalitĂ© timedemo n’est plus plafonnĂ© Ă  999 fps.

De plus, l’interface Curses peut dĂ©sormais afficher les FPS.

Bien entendu que ça fait tourner Unvanquished !

Toujours du cĂŽtĂ© du moteur de rendu, l’exigence minimale est dĂ©sormais OpenGL 2.1 sans extension spĂ©ciale. Cela signifie que le matĂ©riel le plus limitĂ© qui puisse faire tourner Unvanquished inclue les ATI R300, les Intel GMA 3 et 4 (sous Linux) et les Nvidia NV40. Parfois mĂȘme un OpenGL 2.1 incomplet pourrait suffire !

Votre carte graphique est prise en charge. Si cela ne fonctionne pas alors qu’elle est censĂ©e prendre en charge OpenGL 2.1 (ou plus), c’est trĂšs probablement un bug de pilote.

Par exemple mĂȘme le VC4 du Raspberry Pi 3B+ peut soutenir 60 fps avec la prĂ©configuration la plus basse (lowest) et une rĂ©solution faible. Cependant le pilote a encore besoin d’ĂȘtre amĂ©liorĂ© pour ĂȘtre compatible avec tous les niveaux jouables.

La carte plat23 Un Raspberry Pi 3B+ dessinant la carte plat23 Ă  60 fps avec le prĂ©rĂ©glage « le plus bas Â»â€Š

Jouer Ă  Unvanquished sur un RPI3 n’est vraiment pas recommandĂ© (la mĂ©moire vive disponible sera aussi trĂšs limitante), mais si un RPI3 arrive Ă  tenir le rang, c’est que le jeu tourne sur vraiment n’importe quoi, y compris sur un topinambour (parce que mĂȘme une patate ça serait du luxe đŸ€­ïž).

Voici quelques optimisations qui ont Ă©tĂ© faites pour Ă©tendre la compatibilitĂ© du moteur :

  • L’extension GL_ARB_half_float_vertex n’est plus requise. Cela s’ajoute au fait que l’extension GL_ARB_framebuffer_object n’est plus non-plus requise depuis la version 0.54 pour ĂȘtre compatible avec plus de matĂ©riel. La rĂ©Ă©criture faite par Slipher pour prendre en charge Ă  la fois les vertex demi-flottants ou les vertex plein-flottants a mĂȘme amĂ©liorĂ© les performances du moteur (code plus concis, code plus performant, et qui permet plus de chose
 tout ça Ă  la fois) !
  • Les textures 3D ne sont plus requises. C’est quelque chose qui est obligatoire en OpenGL 2.1, mais le moteur peut faire sans lorsque l’implĂ©mentation est incomplĂšte. De telles implĂ©mentations incomplĂštes peuvent ĂȘtre trouvĂ©es avec certaines puces graphiques embarquĂ©es conçues pour OpenGL ES, et Mesa se permet de fournir « autant qu’il peut » d’OpenGL pour faire fonctionner les compositeur de bureau. Le moteur DĂŠmon sait dĂ©sormais se satisfaire lui-aussi d’une telle implĂ©mentation incomplĂšte.
  • Une collection de codes de dĂ©tection a Ă©tĂ© implĂ©mentĂ©e pour identifier des pilotes buggĂ©s ou lent, ainsi que des matĂ©riels lents. Quand c’est possible, un code moins buggĂ© ou plus rapide est activĂ© lors de l’exĂ©cution. Par exemple lors de ce cycle de dĂ©veloppement nous avons mis le pied dans ce que les dĂ©veloppeurs Intel caractĂ©risent comme un dĂ©faut matĂ©riel de l’architecture Iris (l’actuelle
), et ont suggĂ©rĂ© un contournement qui limite les dĂ©fauts visuels la plupart du temps. Il y a quelques annĂ©es nous avions identifiĂ© que le dernier pilote Nvidia pour toute une gĂ©nĂ©ration de carte donnĂ©e ment sur la prĂ©sence d’une extension, et plante si on tente de s’en servir, et ne sera jamais mis Ă  jour
 donc depuis un moment dĂ©jĂ  on le dĂ©tecte pour corriger ses prĂ©tentions. Il y a aussi une gĂ©nĂ©ration de vieilles cartes ATI qui sont plus rapides en flottants qu’en demi-flottant (la prise en charge annoncĂ©e par le pilote est trĂšs probablement une Ă©mulation pour permettre de faire fonctionner d’autres logiciels qui n’ont pas d’implĂ©mentation alternative), donc on dĂ©tecte et on utilise le code le plus adaptĂ© Ă  cette architecture. Il y a d’autres types de contournements mais ces trois-lĂ  sont reprĂ©sentatifs. Nous avions dĂ©jĂ  quelques-uns de ces contournements implĂ©mentĂ©s (comme celui pour certaines Nvidia), mais dĂ©sormais nous avons un procĂ©dĂ© standardisĂ© pour implĂ©menter de tels contournements et pour pouvoir les dĂ©sactiver (pour que les fabricants de matĂ©riel et/ou dĂ©veloppeurs de pilotes puissent reproduire les bugs, par exemple).

Bien sĂ»r toutes les amĂ©liorations de la vitesse d’exĂ©cution ont Ă©tendu la compatibilitĂ© en transformant des Ă©quipements « capable de faire le rendu » en « quelque chose avec lequel on peut jouer ».

Nous avons aussi ajoutĂ© la possibilitĂ© de compiler et exĂ©cuter un moteur DĂŠmon natif sur FreeBSD. Les binaires NaCl exĂ©cutĂ©s dans le bac Ă  sable tournent toujours dans le mode de compatibilitĂ© Linux, mais le moteur peut dĂ©sormais ĂȘtre natif FreeBSD. Une telle astuce doit probablement ĂȘtre utilisable sur d’autres systĂšmes qui ont une compatibilitĂ© Linux intĂ©grĂ©e (NetBSD par exemple, mais nous n’avons pas testĂ©), en utilisant un binaire natif pour le moteur et la compatibilitĂ© Linux pour la machine virtuelle du code du jeu.

Un point que nous aimerions amĂ©liorer dans le futur au niveau du moteur est l’utilisation mĂ©moire.

Nouveaux joujoux

Reflets sur des tuyaux dans la carte Chasm Remarquez les reflets sur les tuyaux !

Placage de reflet (trĂšs expĂ©rimental) : Tandis que notre moteur de rendu progresse, les reflets statiques qui Ă©taient complĂštement cassĂ©s sont dĂ©sormais en meilleur Ă©tat. Une fois activĂ©s, vous pourrez apercevoir votre environnement dans les matĂ©riaux rĂ©flĂ©chissants, comme des tuyaux mĂ©talliques, des plastiques brillants, et des surfaces excessivement polies
 Puisque cela est statique, seule la gĂ©omĂ©trie stationnaire de la carte est pour le moment reflĂ©tĂ©e, bien que cela soit suffisamment subtil pour que les diffĂ©rences ne soient pas trop Ă©videntes, surtout au beau milieu de l’action. En outre, les donnĂ©es de reflets sont enregistrĂ©es et chargĂ©es depuis le disque quand vous activez la mise en cache dans les options. Le code du moteur en charge de sĂ©lectionner les reflets pour chaque surface a aussi Ă©tĂ© amĂ©liorĂ©, apportant des reflets plus corrects et de grandes amĂ©liorations de performance.

SystĂšme de matĂ©riaux (trĂšs expĂ©rimental) : Une autre Ă©tape vers la modernisation du moteur est l’ajout d’un systĂšme de matĂ©riaux. Lorsque le matĂ©riel et les pilotes sont compatibles, cela dĂ©place de nombreuses tĂąches de rendu depuis le CPU vers le GPU, produisant ainsi un flux de travail centrĂ© sur le GPU. Bien que cela ajoute un peu plus de travail au GPU, cela Ă©limine une forte pression mise sur le CPU, ainsi que de nombreux aller-retours entre le moteur et le pilote et entre le CPU et le GPU. Sur les cartes les plus exigeantes pour le CPU (en particulier celles avec un “vis” mauvais, le vis est une reprĂ©sentation de la carte gĂ©nĂ©rĂ©e par le compilateur de carte qui dĂ©termine quelle partie devrait ĂȘtre visible selon le point de vue) cela peut doubler le taux de trame comparĂ© au moteur de base. Ce systĂšme est encore incomplet et de nombreuses amĂ©liorations sont Ă  venir.

Reaper est celui qui se cache derriÚre la réalisation de ces chantiers impressionnants.

Pour pouvoir en profiter il vous sera nĂ©cessaire d’avoir OpenGL 4.6 et (en plus) l’extension GL_ARB_bindless_texture. Il reste cependant des problĂšmes avec certains matĂ©riels et pilotes : tout devrait fonctionner avec Nvidia, le systĂšme de matĂ©riaux et le « frustum culling » devraient fonctionner avec Mesa (radeonsi pour AMD, etc.) quand la derniĂšre version de Mesa est utilisĂ©e (l’ « occlusion culling » ne fonctionne pas encore et pourrait planter avec un Mesa qui ne vient pas de la branche de dĂ©veloppement main
). Cela ne fonctionne pas avec le pilote propriĂ©taire AMD Ă  cause de bugs. Des contournements pour ces problĂšmes sont planifiĂ©s, mais tous n’ont pas Ă©tĂ© implĂ©mentĂ©s Ă  temps pour la sortie de cette version.

À venir

Parmis les dĂ©veloppements qui sont dĂ©jĂ  testables sur certains serveurs et qui seront disponibles dans la prochaine version, il y a le mode « vampire », qui est un mode alternatif de gestion des ressources : plutĂŽt que de miner du point de construction, chaque Ă©quipe se voit dotĂ©e d’un lot dĂ©terminĂ© de points en dĂ©but de partie et lorsqu’une Ă©quipe dĂ©truit une construction adverse elle s’approprie les points de construction associĂ©es. Ce mode « vampire » est Ă©valuĂ© comme une solution potentielle au problĂšme de certaines parties qui sont trop longues ou semblent bloquĂ©es avec des Ă©quipes trop bien fortifiĂ©es de chaque cĂŽtĂ©. Ce mode de jeu peut ĂȘtre testĂ© en avant-premiĂšre sur des serveurs comme Map&Bot Testing, Der Bunker, ou Bug Squash Central.

Il est temps de jouer !

Le jeu Unvanquished se tĂ©lĂ©charge ici et les parties en cours sont listĂ©es ici !

Commentaires : voir le flux Atom ouvrir dans le navigateur

  •  

Une intelligence artificielle libre est-elle possible ?

Ces derniers temps, on a beaucoup parlĂ© d’intelligence artificielle sur LinuxFr.org. D’IA propriĂ©taires, et d’IA libres. Mais peut-on vraiment faire une IA libre ? La notion n’est pas sans poser quelques difficultĂ©s. Une (pas si) courte discussion du problĂšme.

    Sommaire

    On appellera IA un rĂ©seau de neurones artificiels

    Commençons par dĂ©finir notre objet d’étude : qu’est-ce qu’une IA ? Par « intelligence artificielle Â», on pourrait entendre tout dispositif capable de faire rĂ©aliser par un ordinateur une opĂ©ration rĂ©putĂ©e requĂ©rir une tĂąche cognitive. Dans cette acception, un systĂšme expert qui prend des dĂ©cisions mĂ©dicales en implĂ©mentant les recommandations d’une sociĂ©tĂ© savante est une IA. Le pilote automatique d’un avion de ligne est une IA.

    Cependant, ce n’est pas la dĂ©finition la plus couramment employĂ©e ces derniers temps. Une IA a battu Lee Sedol au go, mais ça fait des annĂ©es que des ordinateurs battent les humains aux Ă©checs et personne ne prĂ©tend que c’est une IA. Des IA sont employĂ©es pour reconnaĂźtre des images alors que reconnaĂźtre un chien nous semble absolument Ă©lĂ©mentaire, mais l’algorithme de Youtube qui te suggĂšre des vidĂ©os pouvant te plaire parmi les milliards hĂ©bergĂ©es fait preuve d’une certaine intelligence et personne ne l’appelle IA. Il semble donc que le terme « IA Â» s’applique donc Ă  une technique pour effectuer une tĂąche plus qu’à la tĂąche en elle-mĂȘme, ou plutĂŽt Ă  un ensemble de techniques partageant un point commun : le rĂ©seau de neurones artificiels.

    Dans la suite de cette dĂ©pĂȘche, j’utiliserai donc indiffĂ©remment les termes d’IA et de rĂ©seau de neurones1.

    Pour comprendre le réseau de neurones, il est nécessaire de disposer de bases statistiques

    Les statistiques (ou la statistique, on peut dire les deux, comme en Alexandrie), c’est la branche des mathĂ©matiques qui s’intĂ©resse aux moyens, Ă  partir de donnĂ©es observĂ©es et fondamentalement probabilistes, d’en tirer des conclusions gĂ©nĂ©ralisables (et idĂ©alement, de prĂ©dire l’avenir Ă  partir du passĂ©).

    La data science, c’est la branche de l’informatique qui s’intĂ©resse aux moyens, Ă  partir de donnĂ©es emmagasinĂ©es sur lesquelles on ne fait pas d’hypothĂšse de mode de gĂ©nĂ©ration, d’en tirer des conclusions gĂ©nĂ©ralisables (et idĂ©alement, de prĂ©dire les donnĂ©es futures).

    Ça vous semble similaire ? Ça l’est. Les deux champs vont avoir des divergences de vocabulaire, de langages (les stateux prĂ©fĂšreront R, les data scientists Python), de formation (les stateux sont plutĂŽt des universitaires, les data scientists plutĂŽt des informaticiens au niveau licence, mais ils ont les mĂȘmes masters et doctorats), mais fondamentalement, et surtout mathĂ©matiquement, c’est la mĂȘme chose. Les connaissances en infĂ©rence statistique (notamment bayĂ©sienne, pour ceux Ă  qui ça parle) se gĂ©nĂ©ralisent trĂšs bien Ă  la data science.

    Pour faire court, un statisticien est un data scientist qui se la pĂšte, alors qu’un data scientist est un informaticien qui, n’étant pas assez bon pour survivre Ă  la rude concurrence universitaire, a multipliĂ© son salaire par 10 ou 20 en allant vendre ses compĂ©tences statistiques Ă  Facebook.

    Les statistiques reposent sur la modélisation

    En statistique, la maniĂšre la plus courante de rĂ©pondre Ă  une question est de construire un modĂšle. Prenons une question simple : je dispose d’un jeu de donnĂ©es oĂč j’ai enregistrĂ©, pour 1000 personnes, leur IMC et leur taux de cholestĂ©rol. Je souhaite savoir s’il y a un lien entre les deux. On souhaiterait, dans ce cas simple, rechercher une relation monotone, sans faire d’hypothĂšse sur le type de relation.

    Un exemple : la rĂ©gression linĂ©aire

    Une maniĂšre de rĂ©pondre Ă  ma question est d’écrire CholestĂ©rol = A\times IMC + B et de trouver les meilleurs A et B pour que la droite « colle » le mieux possible au nuage de points. On dĂ©montre que la meilleure droite est celle qui minimise un certain critĂšre, la somme des carrĂ©s des erreurs. Une fois qu’on a la meilleure droite possible, on peut faire plein de choses avec :

    • On peut rĂ©tro-prĂ©dire le taux de cholestĂ©rol des personnes dĂ©jĂ  observĂ©es et voir de combien la prĂ©diction s’écarte du rĂ©el, ce qui fournit une erreur moyenne de prĂ©diction ;
    • On peut faire de mĂȘme en prĂ©disant juste le taux de cholestĂ©rol moyen pour tous les individus et comparer les erreurs moyennes de prĂ©diction, ce qui permet de voir de combien le modĂšle amĂ©liore la prĂ©diction (et donc de quantifier la quantitĂ© d’info apportĂ©e par la donnĂ©e IMC sur la variable cholestĂ©rol) ;
    • On peut Ă©tudier le signe de A : si A est nĂ©gatif, prendre du poids fait baisser le cholestĂ©rol : si A est positif, prendre du poids augmente le cholestĂ©rol : si A est nul, le poids n’apporte pas d’info sur le cholestĂ©rol.
    • Par contre, on ne peut rien dire de la causalitĂ©. Tout ce qu’on a observĂ©, ce sont des personnes qui, au mĂȘme moment, avaient un IMC et un taux de cholestĂ©rol donnĂ©s. Impossible de dire s’ils ont ce cholestĂ©rol parce qu’ils ont cet IMC, s’ils ont cet IMC parce qu’ils ont ce cholestĂ©rol, ou s’ils ont ce cholestĂ©rol et cet IMC parce qu’ils ont une troisiĂšme exposition.
    • On peut enfin faire effectuer de la prĂ©diction Ă  notre modĂšle : en lui passant une personne dont on ne connaĂźt que l’IMC, on peut estimer son taux de cholestĂ©rol et assortir cette prĂ©diction d’un niveau de certitude (ça demande un peu plus de maths, mais c’est l’idĂ©e).

    On peut vouloir ajouter une troisiĂšme variable, mettons le tabagisme. On Ă©crira alors :

    Avec la variable tabac codĂ©e Ă  0 (non fumeur) ou 1 (fumeur). Noter que notre modĂšle est alors passĂ© en dimension 3 : on ne cherche plus Ă  faire passer la meilleure droite par rapport au nuage de points en 2D, mais Ă  faire passer le meilleur plan par rapport au nuage de points en 3D. Noter aussi qu’on peut facilement inclure des variables qualitatives : il suffit de les coder 0 ou 1. On peut d’ailleurs inclure des variables Ă  n modalitĂ©s : il suffit de les recoder en n-1 sous-variables en 0-1 (la modalitĂ© de rĂ©fĂ©rence Ă©tant celle pour laquelle toutes les sous-variables sont Ă  0).

    Les \beta sont appelĂ©s des paramĂštres : c’est en les faisant varier qu’on ajuste le modĂšle aux donnĂ©es.

    On peut ainsi ajouter un nombre quelconque de variables
 Ou peut-ĂȘtre pas. En effet, on va finir par atteindre un seuil oĂč le meilleur hyperplan est tout simplement celui qui passe par tous les points ! Si j’ai 50 individus et 50 paramĂštres, il est facile de choisir un plan qui passe par tous les individus. C’est ce qu’on appelle le surapprentissage : le modĂšle a tout simplement appris le jeu de donnĂ©es par cƓur ! Le surapprentissage est un Ă©cueil des modĂšles trop complexes et un rĂ©seau de neurones est tout Ă  fait capable de surapprendre.

    Le réseau de neurones

    Le neurone naturel

    Les neurones sont les cellules du systĂšme nerveux. Elles sont spĂ©cialisĂ©es dans la transmission d’information.

    Neurone naturel

    Comme tu peux le voir sur cette image issue de Wikimedia (source), un neurone comprend un nombre quelconque de dendrites, un corps cellulaire, et un axone. Point crucial : l’axone est unique. Il peut lui-mĂȘme transmettre de l’information Ă  diffĂ©rents neurones en aval, mais il transmet la mĂȘme information. Or l’information, dans un neurone, peut entrer par les dendrites et par le corps cellulaire, mais elle ne peut ressortir que par l’axone (on peut faire abstraction de la gaine de myĂ©line et des nƓuds de Ranvier, qui ont un rĂŽle central dans la vitesse de conduction de l’information mais qui ne changent rien aux calculs effectuĂ©s). Autrement dit, un neurone transmet la mĂȘme information Ă  tous les neurones d’aval, et si ceux-ci en font un usage diffĂ©rent, c’est uniquement liĂ© Ă  leurs propres calculs en interne.

    Le neurone formel

    On peut modĂ©liser un neurone, par analogie avec le neurone naturel. Notre neurone formel pourra donc prendre un nombre quelconque d’entrĂ©es, mais comme un neurone naturel, il ne produira qu’une seule sortie. Notre neurone est donc une fonction de ses entrĂ©es :

    En pratique (mais ça n’a rien d’obligatoire), on prend souvent une fonction d’une combinaison linĂ©aire des entrĂ©es :

    Avec une contrainte : la fonction f (qu’on appelle fonction d’activation) doit ĂȘtre monotone (idĂ©alement strictement monotone), dĂ©rivable presque partout (c’est nĂ©cessaire Ă  l’optimisation du rĂ©seau, qu’on verra plus tard), dĂ©finie sur un intervalle suffisamment large pour qu’on soit toujours dedans, et non linĂ©aire (sinon mettre les neurones en rĂ©seau n’a aucun intĂ©rĂȘt, autant faire directement une unique rĂ©gression linĂ©aire).

    En pratique, on prend donc quelques fonctions classiques :

    • La fonction binaire : f(x) = 0 si x < 0, 1 sinon
    • La fonction logistique, une amĂ©lioration de la fonction binaire : f(x) = \frac{1}{1 + e^{-x}}. Avantage : elle est strictement monotone, dĂ©rivable partout, et elle prend quand mĂȘme ses valeurs entre 0 et 1.
    • La fonction Rectified Linear Unit (ReLU, qu’on peut prononcer « relou ») : f(x) = 0 si x<0, x sinon. Avantage : elle est trĂšs facile (donc rapide) Ă  calculer et Ă  dĂ©river. On peut la rendre strictement monotone en la modifiant Ă  la marge : f(x) = \epsilon\times x si x<0, x sinon, avec 0<\epsilon << 1.

    La mise en réseau

    Tout l’intĂ©rĂȘt du neurone formel rĂ©side dans sa mise en rĂ©seau. Un unique neurone ne fait pas mieux qu’une rĂ©gression linĂ©aire. On construit donc un rĂ©seau de neurones. Pour ce faire, on va donc gĂ©nĂ©rer plusieurs neurones, chacun prenant en entrĂ©e la sortie de plusieurs neurones et produisant une sortie unique, qui sera Ă  son tour utilisĂ©e en entrĂ©e par d’autres neurones. On ajoute un ensemble de neurones qu’on pourrait qualifier de « sensitifs Â», au sens oĂč ils prennent en entrĂ©e non pas la sortie d’un neurone antĂ©rieur, mais directement l’input de l’utilisateur, ou plutĂŽt une partie de l’input : un pixel, un mot
 Enfin, une sortie est ajoutĂ©e : elle produit le rĂ©sultat final.

    Étant donnĂ© que les neurones sont virtuels et n’ont pas d’emplacement gĂ©ographique, il est assez logique de les reprĂ©senter en couches : la couche 0 est constituĂ©e des neurones sensitifs, la couche 1 prend en entrĂ©e les rĂ©sultats de la couche 0, et ainsi de suite. Classiquement, tous les neurones de la couche n+1 prennent en entrĂ©e les sorties de tous les neurones de la couche n.

    Se pose alors la question : combien de neurones par couche, et combien de couches au total ?
    On peut considĂ©rer deux types de topologies : soit il y a plus de neurones par couche que de couches : le rĂ©seau est plus large que long, on parlera de rĂ©seau large. Soit il y a plus de couches que de neurones par couche, auquel cas le rĂ©seau est plus long que large, mais on ne va pas parler de rĂ©seau long parce que ça pourrait se comprendre « rĂ©seau lent Â». On parlera de rĂ©seau profond. C’est de lĂ  que viennent les Deep et les Large qu’on voit un peu partout dans le marketing des IA. Un Large Language Model, c’est un modĂšle, au sens statistique, de langage large, autrement dit un rĂ©seau de neurones avec plus de neurones par couche que de couches, entraĂźnĂ© Ă  traiter du langage naturel. On constate empiriquement que certaines topologies de rĂ©seau sont plus efficaces pour certaines tĂąches. Par exemple, Ă  nombre de neurones constant, un modĂšle large fera mieux pour du langage. À l’inverse, un modĂšle profond fera mieux pour de la reconnaissance d’images.

    Le réseau de neurones est Turing-complet

    Un rĂ©sultat thĂ©orique important est que les rĂ©seaux de neurones sont Turing-complets. C’est-Ă -dire que, pour tout programme que l’on peut coder et qui sorte une rĂ©ponse algorithmique, il existe un rĂ©seau de neurones qui donne le mĂȘme rĂ©sultat. La rĂ©ciproque est vraie aussi : ce qui est faisable avec un rĂ©seau de neurones est faisable en C ou dans un autre langage, au pire en recodant le rĂ©seau dans ce langage.

    Le réseau de neurones présente un effet boßte noire important

    Prenons maintenant un Ă©lĂ©ment d’information et essayons de suivre son trajet dans le modĂšle jusqu’à la sortie. Dans une rĂ©gression linĂ©aire, c’est assez facile : le poids de l’IMC va peser pour \beta_{IMC} dans le rĂ©sultat final. Dans une forĂȘt alĂ©atoire, on peut toujours isoler les arbres oĂč apparaĂźt une donnĂ©e et essayer de regarder combien elle pĂšse. C’est fastidieux mais ça reste faisable. Dans un rĂ©seau de neurones, c’est impossible. Chaque neurone de la couche 1 va passer un rĂ©sultat agrĂ©gĂ© Ă  la couche 2, oĂč chaque donnĂ©e de la couche 0 ne compte plus que comme partie d’un tout. De mĂȘme, chaque neurone de la couche 2 va agrĂ©ger tous les rĂ©sultats de la couche 1. Il devient impossible d’individualiser l’effet d’une donnĂ©e ou mĂȘme celui d’un neurone.

    Ainsi, mĂȘme si je connais l’intĂ©gralitĂ© du contenu du modĂšle, il m’est impossible de donner du sens Ă  une partie du modĂšle, prise isolĂ©ment. Le modĂšle se comporte comme un bloc monolithique, et la seule maniĂšre d’étudier un nouvel exemple est de lui appliquer tout le modĂšle et de voir ce qui sort. C’est ce qu’on nomme l’effet boĂźte noire.

    Attention : l’effet boĂźte noire n’est pas liĂ© au nombre de paramĂštres du modĂšle. Si je fais de la gĂ©nĂ©tique, et que j’étudie 2000 mutations gĂ©nĂ©tiques individuelles (des SNP, pour single nucleotide polymorphism), je peux assez facilement ajuster un modĂšle de rĂ©gression logistique (qui est une variante de la rĂ©gression linĂ©aire oĂč on fait prĂ©dire non pas une variable quantitative, mais une probabilitĂ©) Ă  2000 paramĂštres (un \beta pour chaque SNP). Chaque paramĂštre sera parfaitement comprĂ©hensible et il n’y aura pas d’effet boĂźte noire.

    Il n’est pas non plus liĂ© Ă  ta mĂ©connaissance des mathĂ©matiques, cher lectorat. Des statisticiens chevronnĂ©s se cassent les dents sur l’effet boĂźte noire. Il est intĂ©gralement liĂ© Ă  la structure du modĂšle. Certains types de modĂšles en ont, d’autres n’en ont pas. Les rĂ©seaux de neurones en ont.

    Cet effet a une consĂ©quence perturbante : mĂȘme si on sait ce que fait un rĂ©seau de neurones, il est impossible de savoir comment il le fait ! On pourrait argumenter que ce n’est pas forcĂ©ment diffĂ©rent de ce que nous faisons : si on montre Ă  un enfant de 3 ans une photo de chien, il saura dire que c’est un chien, mais il ne saura pas dire pourquoi c’est un chien. Cependant, on demande rarement Ă  un programme d’ĂȘtre rĂ©flexif, mais on demande toujours Ă  son auteur de savoir comment il tourne. C’est un peu la base de la programmation.

    Le réseau de neurones est un modÚle statistique

    Reprenons : on a un paradigme (le rĂ©seau de neurones) capable d’effectuer n’importe quelle tĂąche pour laquelle il existe une solution algorithmique, Ă  condition de le programmer correctement
 Mais on ne sait pas le programmer ! Heureusement, il existe un contournement : on ne va pas le programmer, on va l’ajuster, comme un modĂšle statistique. Ou l’entraĂźner, si on prĂ©fĂšre le terme de « machine learning Â».

    Tu t’en souviens, cher lecteur, un rĂ©seau de neurones est un ensemble de fonctions dont chacune prend en entrĂ©e diffĂ©rentes donnĂ©es avec des coefficients (les fameux \beta_i). On va commencer par initialiser l’apprentissage en donnant des valeurs alĂ©atoires Ă  ces coefficients. Ensuite, on va soumettre Ă  notre rĂ©seau de neurones des tas et des tas de donnĂ©es correctes, et qu’on va comparer ce qu’il prĂ©dit Ă  ce qu’on attend. La diffĂ©rence s’appelle l’erreur. Et Ă  chaque itĂ©ration, on va identifier les neurones les plus gĂ©nĂ©rateurs d’erreur et les pĂ©naliser (rĂ©duire leur poids, ou plutĂŽt rĂ©duire leur poids dans les neurones oĂč c’est nĂ©cessaire), tout en favorisant les meilleurs neurones. Les dĂ©tails de la technique (qui s’appelle la rĂ©tropropagation de l’erreur) dĂ©passent largement le cadre de cette courte introduction, mais l’essentiel est qu’à la fin, on obtient un rĂ©seau capable de donner des rĂ©ponses proches de ce qui existait dans l’ensemble des donnĂ©es correctes qu’on lui a passĂ© et de gĂ©nĂ©raliser quand la demande est diffĂ©rente d’une donnĂ©e de l’ensemble d’apprentissage. Avantage : en pratique, un rĂ©seau de neurones est capable de prendre en entrĂ©e n’importe quel type de structure de donnĂ©es : image, texte, son
 Tant que les neurones d’entrĂ©e sont adaptĂ©s et qu’il existe un ensemble d’apprentissage suffisamment grand, c’est bon.

    Tous les modĂšles sont faux, certains sont utiles, et c’est vrai aussi pour le rĂ©seau de neurones

    Bien sĂ»r, il y a des limites. La premiĂšre est la complexitĂ© algorithmique. Un rĂ©seau de neurones nĂ©cessite de rĂ©aliser un nombre astronomique d’opĂ©rations simples : pour chaque couche, il faut, pour chaque neurone, calculer la somme des produits des coefficients avec toutes les sorties de la couche antĂ©rieure, soit c\times n^2 multiplications, oĂč n est le nombre de neurones par couche et c le nombre de couches. Par exemple, pour un petit rĂ©seau de 10 couches de 20 neurones, plus une couche d’entrĂ©e, on rĂ©aliserait Ă  chaque itĂ©ration 10\times 20^2 = 4000 multiplications en virgule flottante, et encore, c’est ici un tout petit rĂ©seau : un rĂ©seau comme ChatGPT a des neurones qui se comptent par millions, voire dizaines de millions !

    Une autre limite est la prĂ©cision des rĂ©ponses. Le rĂ©seau de neurones Ă©tant un modĂšle statistique, il n’est capable que d’interpoler, c’est-Ă -dire trouver une rĂ©ponse Ă  partir de cas similaires. Cette interpolation est rarement aussi prĂ©cise que celle que donnerait une rĂ©ponse formelle si elle existait : si Newton avait eu accĂšs Ă  des rĂ©seaux de neurones, nous aurions une prĂ©diction du mouvement des planĂštes qui ne baserait sur aucune thĂ©orie, qui serait Ă  peu prĂšs exacte mais insuffisamment prĂ©cise pour envoyer des sondes sur Mars. Quant Ă  s’interroger sur la prĂ©cession du pĂ©rihĂ©lie de Mercure, on oublie.

    De maniĂšre gĂ©nĂ©rale, on peut s’interroger sur ce qui amĂšne un rĂ©seau de neurones Ă  se planter. On peut diviser les erreurs en plusieurs catĂ©gories :

    • La question posĂ©e n’a aucun rapport avec les donnĂ©es passĂ©es en entrĂ©e. Par exemple : « Sachant que la derniĂšre personne que j’ai croisĂ©e dans la rue avait 42 ans, indique-moi son genre Â». Le modĂšle n’a pas assez d’information pour rĂ©pondre.
    • La question posĂ©e n’a aucun rapport avec l’ensemble d’apprentissage. Par exemple, demander Ă  un modĂšle entraĂźnĂ© Ă  reconnaĂźtre des photos de chien de reconnaĂźtre une voiture. En gĂ©nĂ©ral, ce problĂšme est rĂ©solu en contraignant le format des questions ; dans cet exemple, il suffirait de ne pas permettre Ă  l’utilisateur de poser une question, juste de poster une photo et de recevoir une rĂ©ponse. D’ailleurs, on ne voit pas trĂšs bien pourquoi entraĂźner un tel modĂšle Ă  traiter du langage.
    • L’ensemble d’apprentissage est trop restreint/biaisĂ©. L’exemple typique est le modĂšle qui prĂ©tendait reconnaĂźtre les dĂ©linquants Ă  une simple photo et identifiait en fait tous les noirs : ben oui, ils Ă©taient majoritaires dans les dĂ©linquants de l’ensemble d’apprentissage. Noter qu’il existe des problĂšmes oĂč l’ensemble d’apprentissage sera toujours trop restreint pour un certain niveau de prĂ©cision exigĂ©. Si on demande Ă  un rĂ©seau de dire si un point donnĂ© est Ă  l’intĂ©rieur ou Ă  l’extĂ©rieur d’un flocon de Koch, il va falloir lui passer une infinitĂ© de donnĂ©es d’apprentissage pour qu’il apprenne les cas limites juste par interpolation (alors qu’avec un modĂšle formel, ça serait assez facile).
    • Le modĂšle est parasitĂ© par une donnĂ©e annexe : c’est une problĂ©matique assez spĂ©cifique du rĂ©seau de neurones. L’exemple le plus classique est celui des images de mains : aprĂšs tout, le voisin le plus probable d’un doigt, c’est un autre doigt. L’amusant, c’est que ce problĂšme serait rĂ©solu assez facilement en demandant au modĂšle de compter 4 doigts et un pouce. Mais comme on ne peut pas programmer directement un rĂ©seau de neurones

    • Enfin, si les motifs prĂ©cĂ©dents ont Ă©tĂ© Ă©cartĂ©s, je dois me demander si mon modĂšle n’est pas inadaptĂ© : soit qu’il n’a pas assez de neurones, soit que la topologie n’est pas bonne. Plus de neurones permettent de traiter des donnĂ©es plus complexes et leur disposition permet d’augmenter leur efficacitĂ©.

    En dĂ©finitive, on peut voir le rĂ©seau de neurones comme un outil qui rĂ©sout approximativement un problĂšme mal posĂ©. S’il existe une solution formelle, et qu’on sait la coder en un temps acceptable, il faut le faire. Sinon, le rĂ©seau de neurones fera un taf acceptable.

    Le but du logiciel libre est de rendre le pouvoir à l’utilisateur

    On a beaucoup glosĂ©, et on continuera de le faire longtemps, sur la philosophie du Libre. Free Software Foundation d’un cĂŽtĂ©, Open Source Initiative de l’autre, les sujets de discorde ne manquent pas. Mais il faut au moins crĂ©diter l’OSI sur un point : avoir clarifiĂ© le fait que le Libre est avant tout un mouvement politique, au sens noble du terme : il vise Ă  peser sur la vie de la citĂ©, alors que l’Open Source vise avant tout Ă  disposer de logiciels de qualitĂ©.

    La premiÚre des libertés est celle de savoir ce que je fais

    Ça paraĂźt Ă©vident dans la vie de tous les jours : je sais ce que je fais. Si je dĂ©cide de prendre une pelle et de planter un arbre dans mon jardin, je sais que je suis en train de prendre une pelle et de planter un arbre dans mon jardin. Si je dĂ©cide de prendre un couteau et de le planter dans le thorax de mon voisin, je sais ce que je fais. C’est une libertĂ© fondamentale, au sens oĂč elle fonde toutes les autres. Si je ne sais pas ce que je fais, je ne peux signer un contrat, par exemple (c’est d’ailleurs le principe qui sous-tend le rĂ©gime de la tutelle en droit). D’ailleurs, comme toute libertĂ©, elle fonde une responsabilitĂ©. Si je ne savais pas ce que je faisais (et que je peux le prouver), je peux plaider l’abolition du discernement et Ă©chapper Ă  ma responsabilitĂ© pĂ©nale, quelle que soit l’infraction commise, mĂȘme les plus graves2

    Dans la vie de tous les jours, donc, il est Ă©vident que je sais ce que je fais. Mais avec un ordinateur, c’est beaucoup moins Ă©vident. Quand j’exĂ©cute Windows, je ne sais pas ce que je fais. Pas seulement parce que je ne connais pas la sĂ©quence de boot, mais de façon beaucoup plus fondamentale : parce que n’ayant pas accĂšs au code source, je ne sais pas ce que fait le programme que j’exĂ©cute. Ce qui pose un problĂšme majeur de confiance dans le logiciel exĂ©cutĂ© :

    • Confiance dans le fait que le programme fait bien ce que son programmeur a voulu qu’il fasse (absence de bugs)
    • Confiance dans le fait que le programmeur avait bien mon intĂ©rĂȘt en tĂȘte et pas seulement le sien (sincĂ©ritĂ© du programmeur, frĂ©quemment prise en dĂ©faut dans le logiciel non libre)

    Dans le systĂšme des 4 libertĂ©s du logiciel libre, cette libertĂ© est la libertĂ© 1. Elle passe aprĂšs la libertĂ© 0 (libertĂ© d’exĂ©cuter le programme) et avant la libertĂ© 2 (libertĂ© de redistribuer le programme). On pourrait lĂ©gitimement discuter de sa prioritĂ© par rapport Ă  la libertĂ© 0 (est-il raisonnable d’exĂ©cuter un programme dont on ne sait pas ce qu’il fait ?) mais ça dĂ©passerait l’objet de cette dĂ©pĂȘche.

    Si je sais ce que je fais, je dois pouvoir modifier ce que je fais

    ConsĂ©quence logique de la libertĂ© prĂ©cĂ©dente : si je n’aime pas ce que fait un programme, je dois pouvoir l’amĂ©liorer. Si je ne sais pas le faire moi-mĂȘme, je dois pouvoir payer quelqu’un pour l’amĂ©liorer. LĂ  encore, ça suppose l’accĂšs au code source, ne serait-ce que pour savoir ce que fait le programme. Il s’agit de la libertĂ© 3 du logiciel libre.

    Le réseau de neurones est difficilement compatible avec le libre

    Personne ne sait vraiment ce que fait un réseau de neurones

    On l’a vu, les rĂ©seaux de neurones prĂ©sentent un effet boĂźte noire important. DĂ©jĂ , la plupart des IA commerciales ne sont accessibles qu’au travers d’une interface ou une API. Elles n’exposent que rarement les neurones. Mais mĂȘme pour une personne disposant de tous les neurones, autrement dit de la description complĂšte du rĂ©seau, l’effet boĂźte noire est tel que le fonctionnement du rĂ©seau de neurones est inintelligible. D’ailleurs, s’il Ă©tait intelligible, il serait trĂšs vite simplifiĂ© !

    En effet, on peut recoder tout rĂ©seau de neurones dans un langage plus rapide, dĂšs lors qu’on comprend ce qu’il fait (puisqu’il est Turing-complet). Vu la consommation astronomique d’énergie des rĂ©seaux de neurones, s’il existait un moyen de comprendre ce que fait un rĂ©seau de neurones et de le traduire dans un autre langage, on le ferait trĂšs vite. Ce qui fournirait d’ailleurs des rĂ©ponses Ă  des questions thĂ©oriques ouvertes comme : qu’est-ce que comprendre une phrase ? Comment reconnaĂźt-on un chien, un visage, un avion ?

    Disposer de la description complĂšte d’un rĂ©seau de neurones ne permet pas de l’amĂ©liorer

    On l’a vu : si je dispose de la totalitĂ© des neurones, je dispose de la totalitĂ© de la description du rĂ©seau de neurones. Mais comme je suis incapable de savoir ce qu’il fait, je ne suis pas plus avancĂ© pour l’amĂ©liorer, qu’il s’agisse de retirer un dĂ©faut ou d’ajouter une fonctionnalitĂ©. Noter d’ailleurs que ceci n’est pas forcĂ©ment impactant de la mĂȘme maniĂšre pour tous les aspects du rĂ©seau de neurones : si je n’ai aucun moyen d’ĂȘtre sĂ»r de l’absence de bugs (c’est mĂȘme le contraire ! Il y a forcĂ©ment des bugs, c’est juste que je ne les ai pas trouvĂ©s ou qu’ils ne sont pas corrigeables), j’ai en revanche peu d’inquiĂ©tude Ă  avoir concernant la sincĂ©ritĂ© du programmeur : comme lui non plus ne maĂźtrise pas sa bestiole, pas de risque qu’il soit insincĂšre3.

    La dĂ©finition du code source d’un rĂ©seau de neurones est ambiguĂ«

    Posons-nous un instant la question : qu’est-ce que le code source d’un rĂ©seau de neurones ? Est-ce la liste des neurones ? Comme on l’a vu, ils ne permettent ni de comprendre ce que fait le rĂ©seau, ni de le modifier. Ce sont donc de mauvais candidats. La GPL fournit une dĂ©finition : le code source est la forme de l’Ɠuvre privilĂ©giĂ©e pour effectuer des modifications. Dans cette acception, le code source d’un rĂ©seau de neurones serait l’algorithme d’entraĂźnement, le rĂ©seau de neurones de dĂ©part et le corpus sur lequel le rĂ©seau a Ă©tĂ© entraĂźnĂ©.

    Cette ambiguïté fait courir un risque juridique sous certaines licences libres

    Tu devines alors, cher lecteur, lĂ  oĂč je veux en venir
 Si le corpus comprend des Ɠuvres non libres, tu n’as tout simplement pas le droit de le diffuser sous une licence libre ! Et si tu t’es limitĂ© Ă  des Ɠuvres libres pour entraĂźner ton modĂšle, tu risques fort d’avoir un ensemble d’apprentissage trop restreint, donc un rĂ©seau de neurones sans intĂ©rĂȘt.

    Alors il y a quatre moyens de tricher.
    Le premier, c’est de t’asseoir sur la GPL et de considĂ©rer qu’en distribuant les neurones, tu as fait le taf. La ficelle est grossiĂšre. Je viens de passer une dĂ©pĂȘche Ă  te dĂ©montrer que c’est faux, tu pourrais au moins me montrer un peu plus de respect.

    Le deuxiĂšme, c’est de distribuer sous une licence non copyleft, genre BSD ou WTFPL. Une licence qui ne nĂ©cessite pas de distribuer le code source. Certes, mais en fait tu ne fais pas du Libre.

    Le troisiĂšme, c’est de considĂ©rer le rĂ©seau de neurones comme une donnĂ©e, pas un exĂ©cutable. Donc pas de code source. La partie sous GPL serait alors l’interface graphique, et le rĂ©seau, une donnĂ©e. C’est assez limite. Une donnĂ©e exĂ©cutable, ça s’approche dangereusement d’un blob binaire.

    Le quatriĂšme, c’est de repenser complĂštement le paradigme du logiciel libre et de considĂ©rer qu’il vise avant tout Ă  rĂ©Ă©quilibrer les rapports de pouvoir entre programmeur et utilisateur, et qu’en redistribuant les neurones, tu as fait le job. Sur les rapports de pouvoir, tu n’as pas tort ! Mais d’une part, ça ne tiendra pas la route devant un tribunal. D’autre part, il persiste une asymĂ©trie de pouvoir : tu as accĂšs au corpus, pas l’utilisateur.

    Quand bien mĂȘme on admettrait que le code source est l’ensemble corpus + algorithme d’optimisation + rĂ©seau de neurones de dĂ©part, l’optimisation d’un rĂ©seau de neurones consomme autrement plus de ressources que la compilation d’un programme plus classique, des ressources qui sont loin d’ĂȘtre Ă  la portĂ©e du quidam classique. À quoi servirait un code source impossible Ă  compiler ?

    Enfin, mĂȘme cette dĂ©finition du code source pose problĂšme : elle n’est en fait pas beaucoup plus lisible que le rĂ©seau lui-mĂȘme. Ce n’est pas parce que j’ai accĂšs aux centaines (de milliers) de textes sur lesquels un rĂ©seau a Ă©tĂ© entraĂźnĂ© que je peux prĂ©dire comment il va se comporter face Ă  une nouvelle question.

    Comment les boĂźtes qui font de l’IA non libre rĂ©solvent-elles ce dilemme ? Elles ne le rĂ©solvent pas

    C’est presque enfoncer une porte ouverte que dire que l’IA pose de nombreuses questions de droit d’auteur, y compris dans le petit microcosme du non-libre. Cependant, les IA non-libres ont un avantage sur ce point : si le rĂ©seau de neurones ne permet pas de remonter au corpus initial (donc en l’absence de surapprentissage), alors elles peuvent tranquillement nier avoir plagiĂ© une Ɠuvre donnĂ©e. Tu ne me verras pas dĂ©fendre les pauvres auteurs spoliĂ©s, car j’ai toujours considĂ©rĂ© que la nature mĂȘme de l’information est de circuler sans barriĂšres (Information wants to be free, tout ça) et que le droit d’auteur en est une, et particuliĂšrement perverse.

    La dĂ©finition d’une IA open source ressemble furieusement Ă  un constat d’échec

    L’OSI a publiĂ© une dĂ©finition d’IA open source. Cette dĂ©finition mĂ©rite qu’on s’y attarde.

    Premier point intĂ©ressant : aprĂšs des annĂ©es Ă  tenter de se dĂ©marquer du Libre, notamment via la dĂ©finition de l’Open Source qui tente de reformuler les 4 libertĂ©s sans recopier les 4 libertĂ©rs, l’OSI baisse les bras : est open source une IA qui respecte les 4 libertĂ©s.

    DeuxiĂšme point intĂ©ressant : est open source une IA qui publie la liste des neurones, le corpus d’entraĂźnement et la mĂ©thode d’entraĂźnement. En fait, ça revient Ă  ne pas choisir entre les neurones et leur mĂ©thode d’entraĂźnement. Soit, mais ça ne rĂ©sout pas le problĂšme de l’effet boĂźte noire. Au mieux, ça revient Ă  admettre qu’il est le mĂȘme pour le programmeur et l’utilisateur.

    Conclusion : qu’attendre d’une IA libre ?

    Il ne fait aucun doute que dĂ©velopper des IA libres exigera de nouvelles licences. La GPL, on l’a vu, expose Ă  un risque juridique du fait de l’ambiguĂŻtĂ© de la dĂ©finition du code source.

    Il est Ă  noter, d’ailleurs, qu’une IA repose rarement exclusivement sur son rĂ©seau de neurones : il y a systĂ©matiquement au moins un logiciel classique pour recueillir les inputs de l’utilisateur et les passer au rĂ©seau de neurones, et un second en sortie pour prĂ©senter les outputs. Ces briques logicielles, elles, peuvent tout Ă  fait suivre le paradigme classique du logiciel libre.

    En dĂ©finitive, cher lecteur qui ne dĂ©veloppes pas d’IA, je t’invite surtout Ă  te demander : qu’attends-tu d’une IA ? Qu’entends-tu quand on te parle d’IA libre ? Plus fondamentalement, l’IA serait-elle un des rares domaines oĂč il existe une distinction pratique entre libre et Open Source ?

    Il n’y a pas de façon simple de faire une IA libre, il n’y a peut-ĂȘtre pas de façon du tout. Mais le principe du libre, c’est que c’est Ă  l’utilisateur in fine de prendre ses dĂ©cisions, et les responsabilitĂ©s qui vont avec. Je n’espĂšre pas t’avoir fait changer d’avis : j’espĂšre modestement t’avoir fourni quelques clĂ©s pour enrichir ta rĂ©flexion sur le sens Ă  donner au vocable IA open source qu’on voit fleurir ici et lĂ .


    1. Et je mettrai « artificiel Â» Ă  la poubelle parce que Implicit is better than explicit, rien que pour embĂȘter Guido). â†©

    2. Bon, certaines infractions complexes Ă  exĂ©cuter, comme le trafic de drogue ou le gĂ©nocide, requiĂšrent une certaine implication intellectuelle et sont donc peu compatibles avec l’altĂ©ration du discernement, mais c’est liĂ© au fait que l’infraction elle-mĂȘme requiert un certain discernement. â†©

    3. Du moins au niveau du rĂ©seau de neurones lui-mĂȘme. Les entrĂ©es et les sorties peuvent tout Ă  fait passer par une moulinette insincĂšre et codĂ©e dans un langage tout Ă  fait classique. â†©

    Commentaires : voir le flux Atom ouvrir dans le navigateur

    •