Calcul
Des ressources de calcul performantes et évolutives pour vos charges de travail critiques. Orchestrez vos applications cloud-native avec nos solutions conteneurs modernes.
Découvrez l'offre Calcul
Machines virtuelles
VM Instances
Une solution de machines virtuelles à la demande, flexible et sécurisée, sur une infrastructure mutualisée.
Serveurs dédiés
IaaS OpenSource
Infrastructure virtualisée open source dans un environnement cloud de confiance qualifié SecNumCloud pour une souveraineté technologique complète.
IaaS VMWare
Vos machines virtuelles VMware dans un environnement cloud de confiance qualifié SecNumCloud et certifié HDS.
Bare Metal
Des serveurs dédiés et entièrement personnalisables pour une autonomie totale sur votre infrastructure souveraine.
Containers
PaaS OpenShift
La plateforme unifiée pour créer, moderniser et déployer vos applications à grande échelle dans un cloud souverain.
Managed Kubernetes
Solution d’orchestration de conteneurs managée offrant sécurité, résilience et automatisation avancée sur infrastructure souveraine.
Stockage
Des solutions de stockage adaptables et performantes pour tous vos besoins. Optimisez vos données avec nos solutions bloc et objet hautement disponibles.
Découvrez l'offre Stockage
Stockage
Stockage bloc
La solution de stockage en bloc adaptable pour des performances de stockage optimales dans un cloud souverain.
Stockage objet
La solution de stockage évolutive et économique pour vos données non structurées dans un cloud souverain.
Sauvegarde
Solutions de sauvegarde
Des solutions de sauvegarde différenciées, adaptées à vos enjeux et à vos environnements
Réseau
Des solutions réseau avancées pour connecter et sécuriser vos infrastructures. Déployez vos réseaux privés de manière automatisée et sécurisée.
Découvrez l'offre Réseau
Réseau
Virtual Private Cloud
Déployez et gérez vos réseaux privés de manière 100% automatisée et sécurisée.
Private Backbone
Prenez le contrôle total de votre réseau avec une connectivité de niveau 2 étendue, conçue pour les architectures hybrides et les configurations sur mesure.
Firewall
Managed Firewall
Des solutions de sécurité avancées, pour une isolation complète et une protection renforcée
Hébergement Sec
Housing – Espace Dédié
Un hébergement sécurisé pour vos équipements dans un environnement dédié ou partagé, selon vos besoins.
Sécurité
Des solutions de sécurité avancées pour protéger vos infrastructures critiques. Contrôlez l'accès et défendez-vous contre les menaces en ligne.
Découvrez l'offre Sécurité
Détection
Managed SIEM
Une plateforme centralisée de collecte et de corrélation de logs de sécurité, alliant l'automatisation par IA et des règles de détection avancées (MITRE ATT&CK).
Sovereign SOC
Une offre SOC souveraine opérée 24/7, déployable depuis notre marketplace, sur infrastructure qualifiée SecNumCloud.
Protection
Anti DDoS
Le bouclier contre les attaques en ligne
Bastion
Le contrôle d’accès centralisé et transparent pour une protection robuste de vos infrastructures
Managed KMS
La gestion des clés cryptographiques souveraine, avec racine de confiance matérielle HSM, pour protéger vos données les plus sensibles sur infrastructure SecNumCloud.
IA
Des solutions d'intelligence artificielle pour transformer vos données en insights et accélérer vos processus métier.
Découvrez l'offre IA
IA
LLMaaS
Accédez à des modèles de langage de pointe sur une infrastructure souveraine, qualifiée SecNumCloud et certifiée HDS, pour des applications d’IA performantes et sécurisées.
GPU
Instances GPU NVIDIA pour accélérer vos calculs d’intelligence artificielle et de calcul haute performance dans un cloud souverain.
Data
Des solutions de données pour gérer, analyser et exploiter vos données critiques.
Découvrez l'offre Data
Bases de données
Managed MariaDB
Une base de données relationnelle MariaDB entièrement managée et sauvegarde PITR sur infrastructure souveraine SecNumCloud.
Managed PostGreSQL
La solution de base de données relationnelle entièrement managée sur infrastructure souveraine SecNumCloud
Big Data
Managed Kafka
La plateforme distribuée open-source pour la diffusion de données en continu et en temps réel
Managed File System
Un système de fichiers distribué managé, souverain et haute disponibilité, accessible en NFS et SMB sur infrastructure SecNumCloud.
Management & Gouvernance
Des services d'accompagnement et de support pour vous aider dans votre transformation cloud.
Découvrez l'offre d'accompagnement
Accompagnement
Niveaux de support
Découvrez les 3 niveaux de support pour vous accompagner au mieux selon vos enjeux.
Professional services
De la conception à l’optimisation, Cloud Temple vous accompagne à chaque étape de votre projet.
Gouvernance
Console – API – Provider Terraform
Une interface unique pour visualiser et gérer vos produits et services
Observability
Les métriques de votre infrastructure disponibles dans les standards du marché
Devenir partenaire
Le magazine > « Les LLM savent coder mieux que toi » : vrai ou faux ? | Episode 1
Publié le 04/07/2024 par Kevin Séjourné, ingénieur R&D senior chez Cloud Temple

Plongée dans l’IA : Une série de 3 épisodes

Bonjour, je suis Kevin Séjourné, docteur en informatique et ingénieur R&D senior chez Cloud Temple. Comme vous pouvez l’imaginer, depuis 20 ans, j’ai beaucoup écrit de code. Explorateur passionné des LLM, je constate qu’ils peuvent maintenant écrire du code à ma place. Tant mieux ! Mais comme j’ai l’habitude de m’appuyer sur des observations scientifiques, j’ai décidé de tester la qualité de leur travail.

Kevin Séjourné


Retrouvez les 3 épisodes de mon étude :

Épisode 1 : J’automatise mon travail avec les LLM

Les LLM peuvent désormais écrire du code à ma place. Je vais vous montrer comment. Commençons par une tâche simple et fréquente : réécrire tout ou partie d’une application.

Il faut souvent réécrire du code pour :

  • Adresser les obsolescences
  • Corriger une architecture devenue inadaptée
  • Augmenter les performances
  • Changer un comportement
  • Passer à un autre langage de programmation

Par où on commence ?

Nous choisissons un petit programme, seulement 31 Ko tout compris, environ 1000 lignes, en Python. Nous allons adresser des obsolescences, et supprimer une portion d’un programme devenu inutile. Suite à une évolution des besoins, ce programme a eu deux tâches possibles à réaliser au lieu d’une. Progressivement, la nouvelle tâche a remplacé entièrement l’ancienne, qu’il est souhaitable de retirer pour réduire la surface d’attaque. Nous revoyons légèrement l’architecture et recherchons accessoirement un gain de performances et de la modernité sur les dépendances. La vénérable bibliothèque “request” a fait son temps.

Rust est un bon candidat pour réécrire un programme Python. Le typage fort à la compilation est le premier avantage pour une réécriture par LLM. Il va forcer une détection précoce des problèmes de génération du LLM, l’obligeant à une génération plus logique. Cela permet d’attirer l’attention du LLM sur une dimension supplémentaire. Par ailleurs, Rust est un langage moderne traitant convenablement la concurrence, là où Python est limité par son global interpreter lock (GIL).

Nous disposons d’un accès no-limit à GPT 4o via le portail d’IA développé par Cloud Temple. En cas de doute sur une réponse, nous pouvons utiliser groq.com avec Llama3 70b et Mixtral 8x7b. Un Llama3-8b_q4 en local fonctionnant sur jan.ai et un RTX est disponible pour les parties confidentielles.

Les capacités des modèles utilisés guident la taille de programme à convertir. Mixtral traite des contextes jusqu’à 32 Ko, et même si GPT/Gemmini traite des contextes plus grands, ils sont exposés au “lost in the middle”, ils n’arrivent pas forcément à faire attention aux informations présentes au milieu de leur contexte. À l’heure actuelle, un programme plus lourd empêche le LLM de focaliser son attention sur la totalité des parties du code.

Nous utilisons VSCode pour copier-coller le code généré. C’est là que nous agglutinons toutes les parties du code.

Et maintenant, on fait quoi ?

Comment dire au LLM de convertir mon code ? Comment lui donner le code à convertir ?

Construire un prompt, c’est faire simple. Et faire simple, c’est compliqué. Voici le prompt : En faisant attention aux commentaires et aux types de données, et au Cargo.toml, convertissons en Rust le programme Python suivant :

[Ici vient la concaténation de tout le code de l’application] Et oui, faut oser faire un copier-coller de 31 Ko dans la boîte de saisie de texte. Mais c’est ce qu’il y a de plus simple.

Nous avons réalisé des expériences précédentes dans lesquelles on copie le code par morceaux. Mais il y a quelques questions épineuses :

  • Quelle taille des morceaux ? Fichier ? Fonction ? Classe ? Combien de Ko ? Combien de lignes ?
  • Dans quel ordre intégrer les morceaux ? Ordre alphabétique ? Tri topologique ? Tri fonctionnel ? Quid des dépendances croisées ?

Plus simple : tout dans un seul coup. Pour cela, nous avons parcouru tous les fichiers du programme et les avons concaténés en un seul gros fichier. Dans ce gros fichier, ils sont séparés par une commande de la forme FILE main.py :

[suivi du corps du fichier]

Indiquer les fichiers d’origine est indispensable en Python car le nom de fichier est utilisé pour la résolution des dépendances dans ce langage. Ceci forme également des marqueurs utiles pour plus tard afin d’attirer l’attention du modèle sur une partie précise.

Le prompt a alors cet aspect :

Et alors, cette génération de code, elle commence quand ?

Très bien, voici ce qui se passe quand nous appuyons sur [entrée] :

Nous pouvons constater que GPT4o est incapable de générer le résultat complet. La longueur maximale de l’output est atteinte. Nous avons obtenu quelques fonctions des premiers fichiers, mais il manque encore beaucoup de code. Par ailleurs, la génération de code qui est faite par GPT4o est souvent plus verbeuse que le code initial, dans un rapport de 3 pour 2. Ceci ne dépend pas spécifiquement du couple Python / Rust, mais c’est plus un artifact de la génération de code par LLM. Comme pour les réponses humaines, les LLM semblent avoir du mal à donner des réponses courtes.

Il est possible de demander simplement au LLM de continuer :

Le problème est qu’il finit par se perdre dans ce qu’il a déjà traité et n’a pas encore traité… 31 Ko de code + 31 Ko * 1,5 attendu de code à générer + les décorateurs Markdown, nous atteignons déjà à 64 Ko de contexte dans le meilleur des cas. Malheureusement, en lui demandant de continuer sans vrai point de repère, il finit par reconvertir des fichiers déjà traités. Les 64 Ko dérapent et finissent par dépasser la fenêtre des 128 Ko de GPT4o, ce qui entraîne une perte de contexte.

Recommençons depuis le début. Mais cette fois, indiquons dans le prompt de ne convertir que le premier fichier. Puis, une fois le résultat obtenu, nous demandons ensuite le second fichier, ainsi de suite. Le LLM garde ainsi bien en contexte la totalité du programme pour traiter les références, mais ne focalise son attention que sur une transformation à la fois.

Petit à petit, nous pouvons copier-coller l’intégralité de notre nouveau programme dans VSCode. Si le LLM est verbeux, l’humain se doit d’être concis.

En demandant gentiment, j’obtiens également le Cargo.toml qui est le fichier qui gère les dépendances et la compilation en Rust. Ce n’est pas un fichier très compliqué, mais sa principale caractéristique est de ne pas du tout exister dans le programme d’origine en Python. C’est un petit ajout nécessitant une synthèse du programme précédent, à l’image des résumés souvent faits par les LLM. Il est important de demander la génération de ce fichier Cargo.toml après que la génération des fichiers de code Rust est réalisée, sinon le LLM risque d’omettre des bibliothèques. Au début, le LLM n’a pas encore fait attention à tout ce dont il aura besoin.

Ô miracle, le programme copier-coller semble prêt à travailler avec la confiance traditionnelle des LLM qui nous assure avoir la vérité. Ce n’est pas tout à fait le cas, car, entre autres, le programme ne compile pas. Pour corriger cela, nous allons commencer à apprendre… dans un prochain article.

Bilan de première étape

Vous l’aurez remarqué, avec le LLM, nous avons passé plus de temps à planifier ce que nous allons faire, pourquoi nous allons le faire et moins à effectivement générer du code. À ce stade, le temps passé sur le projet est d’environ 8h, dont deux pour la génération.

Le magazine
Politique en matière de cookies

Nous utilisons des cookies pour vous offrir la meilleure expérience possible sur notre site mais nous ne prélevons aucune donnée à caractère personnel.

Les services de mesure d’audience, nécessaires au fonctionnement et à l’amélioration de notre site, ne permettent pas de vous identifier personnellement. Vous avez cependant la possibilité de vous opposer à leur usage.

Pour plus d’informations, consultez notre politique de confidentialité.