Comment choisir son modèle d'IA pour le code ?

Comment choisir son modèle d'IA pour le code ? Les LLM spécialisés en génération et compréhension de code se sont multipliés ces derniers mois. Langage de programmation, taille, cas d'usage… On vous aide à y voir un peu plus clair.

Depuis l'avènement de ChatGPT, il se passe rarement une semaine sans qu'un nouveau modèle spécialisé en code ne fasse son apparition sur Hugging Face. Command R+, Qwen1.5-72B-Chat, Mixtral… Face à une telle profusion, il peut être compliqué de choisir le modèle adapté à son cas d'usage. Il est malheureusement impossible de dresser ici un comparatif exhaustif de l'ensemble des modèles de code disponibles sur le marché. D'une part du fait de cette profusion, d'autre part car le choix du modèle peut varier du tout au tout selon le langage concerné. Dans cet article, nous vous donnons en revanche les clés principales pour orienter votre choix.

De multiples cas d'usage

Les LLM spécialisés ou non en code n'ont pas pour unique but de générer du code. Ils peuvent être utilisés pour générer de manière automatisée la documentation d'une fonction de code ou d'une API, ou encore générer les commentaires explicatifs autour du code, pour maximiser son temps, ou également pour du testing automatisé en générant, par exemple, des tests unitaires. Avec une compréhension globale du code, le modèle peut aussi aider à générer directement certaines fonctions du code ou appels à API.

Un autre cas d'usage intéressant reste sans doute le débogage. Plus besoin de passer des heures à chercher où se situe une erreur de syntaxe dans un fichier de 1 000 lignes. L'analyse de code pour l'identification de bugs et autres problèmes est sans doute l'utilisation la plus productive de ces modèles. Sans parler de la revue de code sécuritaire qui peut permettre dans certains cas d'identifier des vulnérabilités qu'un développeur humain n'aurait pu voir. De manière plus générale, la discussion avec un LLM permet souvent d'optimiser son code et d'élargir ses perspectives voire de réorganiser sa manière de développer, notamment dans l'applicatif.

Modèle générique ou spécialisé ?

Dans la théorie, tous les LLM sont capables de produire du code. Dans la pratique, certains sont meilleurs que d'autres. Les modèles généralistes (GPT-4, Claude 3, Llama) de très grandes tailles sont ainsi très bons lorsqu'il s'agit de générer du code à partir de langage naturel. "Leur principal atout réside non seulement dans leurs capacités de génération de code, mais aussi dans leur excellente compréhension du langage naturel. Cela les distingue de certains autres modèles de langage spécialisés dans le code, qui peuvent avoir du mal à saisir correctement les requêtes exprimées en langage naturel", illustre Xavier Lioneton, COO et lead data scientist chez datacraft.

Une situation qui tend progressivement à changer avec le fine-tuning des LLM générique sur de gros datasets de code. "C'est notamment le cas avec le Code Llama développé par Meta, qui permet d'obtenir de très bonnes performances. On voit apparaître des modèles open source qui sont presque aussi performants que GPT-4. C'est le cas par exemple de Phind (Phind-CodeLlama-34B-v2, ndlr), qui affiche de très bons résultats tout en nécessitant relativement peu de paramètres, et qui est accessible en ligne", note Marc de Vaugiraud, data scientist spécialiste de l'IA générative chez datacraft.

Open source ou propriétaire ?

C'est l'une des questions principales : open source ou propriétaire ? Le choix d'un modèle de code open source et propriétaire est en réalité assez simple. Trois facteurs sont à prendre en compte : le besoin de confidentialité / sécurité, le coût, et enfin la nécessité de fine-tuning. Choisir un modèle propriétaire, c'est, souvent, faire le choix d'une moindre confidentialité. OpenAI, Google, Microsoft… Les prompts et le code source transiteront obligatoirement par un ou plusieurs serveurs externes à votre entreprise. Choisir l'open source, c'est s'assurer de maitriser l'ensemble du processus, en cloud ou on premise.

Pour le coût, la balance penche encore du côté de l'open source. "Les grands modèles de langage qui ne sont pas open source sont généralement assez coûteux. Avec des modèles open source, il est possible d'obtenir des modèles avec moins de paramètres qui peuvent parfois réaliser les mêmes tâches à moindre coût", rappelle Marc de Vaugiraud.

Enfin si le fine-tuning est envisagé, pour assurer une meilleure efficacité du modèle sur un langage ou une tâche donnée, l'open source sera, encore, incontournable. Il est tout à fait possible d'affiner un GPT-3.5, mais selon le dataset, le coût sera très important (8 dollars le million de tokens). "De nos jours, il est possible de spécialiser des modèles de taille raisonnable grâce aux nombreuses techniques de réduction et de compression des modèles développées récemment. La méthode consiste à partir d'un très grand modèle généraliste, puis à le spécialiser et le compresser. On obtient au final un modèle assez spécialisé, performant, générant de bonnes réponses, sans pour autant être trop lourd et coûteux", rappelle Xavier Lioneton.

Les modèles propriétaires (Gemini Code Assist, GitHub Copilot) offrent toutefois un très bon compromis pour les entreprises qui souhaitent démarrer rapidement. Ces derniers sont facilement intégrables dans la majorité des IDE du marché. Leur utilisation est assez simple. De plus, les modèles propriétaires supportent plus régulièrement une grande variété de langages, de par la richesse de leur dataset.

Le cas des langages rares

Tout le monde ne code pas en Java. La majorité des datasets utilisés par les LLM spécialisés ou non sont constitués des langages de programmation les plus populaires. Plus un langage est représenté dans le datataset, plus le modèle sera compétent pour générer et comprendre du code. Certains modèles peuvent ainsi, sous performer dans les langages les moins usités. "En réalité, il suffit de jeter un coup d'œil aux cartes et aux diagrammes circulaires qui indiquent l'utilisation de chaque langage au sein du dataset. Donc pour certains langages un peu spécialisés, il peut être intéressant de vérifier s'il n'existe pas des modèles de langage de grande taille qui ont été spécifiquement pour ce langage", préconise Xavier Lioneton.

Exemple avec le SQL. "Si je veux générer des requêtes SQL assez poussées, avec un modèle spécialisé à 7 milliards de paramètres, on arrive à avoir de meilleures performances que Code Llama avec 70 milliards de paramètres", précise encore Marc de Vaugiraud.

Tester et itérer

Pour choisir le modèle de langage le plus adapté à ses besoins en génération de code, plusieurs paramètres sont à considérer. Au-delà des benchmarks qui donnent une première indication, "il est essentiel de se tenir au courant des retours d'expérience partagés par la communauté sur les forums et les réseaux sociaux, car les avancées sont très rapides dans ce domaine", souligne Marc de Vaugiraud.

D'autres critères sont aussi à évaluer selon les experts, tels que la rapidité d'exécution, la qualité de la documentation et la facilité d'intégration dans la chaîne d'outils existante. En définitive, "la meilleure approche consiste à tester directement quelques modèles présélectionnés sur ses propres cas d'usage et à analyser les résultats", recommande le spécialiste.