Étude des performances de code généré par IA

Plénière DISTILLER Avril 2023

 

Tristan COIGNION

Progrès en IA

Progrès en IA

GitHub Copilot

AI + Green = 💔

Demande beaucoup de ressources à l'entraînement et à la génération

(ex: BLOOM : $2-5M equivalent in cloud computing)

Désolé, j'ai pas eu le temps de trouver mes sources, mais j'ai vu des gens plus intelligents en parler

Est-ce que le gain de temps en vaut la peine ?

Études sur les modèles de génération de code
(ex : Copilot)

Aucune étude sur la performance énergétique des modèles de génération de code (et très peu sur la performance en temps)

Il existe de la recherche sur la consommation énergétique des IAs en général

Est-ce qu'un modèle qui génère plus souvent du code valide, génère du code plus performant ?

Est-ce que certains modèles sont meilleurs que d'autres seulement pour des tâches spécifiques ?

Étude du code généré par les IAs

Quels facteurs vont affecter la performance du code généré ?

On fait générer quoi comme code ?

Des algorithmes

  • assurent un temps d'exécution plus long avec une charge plus haute
  • courts et faciles à faire générer de manière non supervisée en grande quantité

Un exemple de problème sur Leetcode

Avec quelles modèles d'IA ?

  • GitHub Copilot
  • Codex - OpenAI
  • Codegen (350M, 2B, 6B, 16B) - Salesforce
  • Santacoder - Community
  • CodeT5 - Salesforce
  • Incoder (1B, 6B) - Community & MetaAI
  • Codeparrot - Community

Modèles fermés

Modèles ouverts

Aparté sur la configuration d'un modèle

Température = Nombre entre 0 et 1.
Température haute -> Modèle "plus créatif"

Pour utiliser les modèles, on les utilises aux températures 0, 0.2, 0.4, 0.6, 0.8 et 1.0.

 

Il existe d'autres paramètres, mais je ne les fais pas varier.

Procédé

Pour chaque modèle, température et problème

  1. Génération de 10 solutions potentielles
  2. Validation de ces solutions auprès de Leetcode. On garde que les solutions qui ont passé tous les tests ou qui ont dépassé la limite de temps
  3. On bench avec pytest-benchmark chacune des solutions valides

300 problèmes de Leetcode, chacun avec une solution exemple et trois test cases

Résultats

Mini-étude bonus sur le taux de succès des modèles

Taux de générations valides par modèle

Les modèles entraînés avec du texte anglais en plus du code réussissent beaucoup mieux que ceux entraînés juste sur du code !

Relation entre la taille du modèle et son taux de succès

Plus la difficulté des problèmes augmente, plus c'est difficile pour les modèles de générer une solution valide !

Mais aussi, plus c'est difficile, plus la solution attendue est longue.

Certains modèles sont-ils meilleurs que d'autres sur des tâches spécifiques ?

Non.

 

Il semblerait que l'évolution du taux de réussite d'un modèle à travers des catégories de tâches n'évolue pas à travers les modèles.

Analyse des performances du code généré

Comparaison par difficulté

Analyse des performances du code généré

Comment comparer les modèles entre eux ?

Un seul problème,
une génération par modèle

 

On compare simplement le temps en secondes des  runs du problème

Un seul problème,
plusieurs générations par modèle

 

Même chose qu'avant, mais on fait la moyenne des runs d'un même modèle

Mais, et si on a plusieurs problèmes, avec chacun des échelles de temps différentes ?

Plusieurs problèmes,
plusieurs générations par modèle

Même méthode qu'avant, on va normaliser les temps au sein de chacun des problèmes

On ne peut pas faire comme avant et simplement faire la moyenne de tous les problèmes

=> En faisant la moyenne, on va perdre l'information de classement de nos modèles

La normalisation garde les informations de classement et de distance entre les problèmes

Si on faisait une moyenne de chaque modèle ici, le classement final serait très sûrement le même que celui du premier problème.

Comparaison générale des modèles

(Toutes températures comprises)

Plus c'est bas, plus c'est rapide !

Plus c'est à droite, plus c'est souvent valide !

Comparaison générale des modèles, décomposés par température

Comparaison générale des modèles, décomposés par température.

Avec les deux plus basses températures

Comparaison générale des modèles, décomposés par température

Plus la température augmente, plus les performances générales sont dégradées

Dans les trois meilleurs modèles (english-trained), le taux de succès n'est pas corrélé avec la performance du code

Les meilleurs modèles produisent du code beaucoup plus lent à haute température que des modèles moins bon à basse température

Comparaison générale des températures (Bonus)

Plus la température augmente, plus les performances générales sont dégradées

Performances de Copilot

Comparaison générale des températures (Bonus)

Plus la température augmente, plus les performances générales sont dégradées

Exemple sur un seul problème

A de plus hautes températures, des solutions moins efficaces vont voir le jour

Comparaison générale des températures (Bonus)

Plus la température augmente, plus les performances générales sont dégradées

Il peut arriver que de meilleures solutions soient générées, mais c'est rare

Conclusion

  • Les modèles entraînés sur de l'anglais sont meilleurs avec des exercices de programmation
  • Plus la température est haute, moins le modèle est bon, et plus il va produire du code non-performant, voire parfois nul (boucle infinie, complexité exponentielle etc.)
  • Passé un certain stade, améliorer le taux de succès du modèle n'améliore pas la performance de son code

Et après ?

  • Étude du gain de temps avec un assistant de code (Copilot)
  • Étude de la consommation d'un modèle lorsqu'il est utilisé
  • Étude de la consommation du code généré.
  • Comparer avec GPT4.
  • Utiliser du prompt engineering pour améliorer la performance.
  • Étudier l'usage et la consommation d'un assistant de code lorsqu'il est utilisé par un dev (avec FauxPilot)

Merci de m'avoir écouté !

Made with Slides.com