Je donne en ce moment à la CCI de Strasbourg sur un sujet qui n’est pas directement lié à l’IA, en apparence: déployer des applications en mode DevOps sur la Google Cloud Platform… je dis bien en apparence seulement, car la Google Cloud Platform (GCP pour les intimes) regorge d’APIs d’IA génératives, de machine learning, etc.
Récemment, un nouveau produit est apparu sur le GCP: Duet AI. Les étudiants que je forme actuellement seront chargés plus tard de tâches liées à du sysadmin, du déploiement applicatif, de la gestion d’IAM, de VPC, de LDAP, tout un programme ! Une chose m’est clairement apparue alors que je les voyais apprendre des concepts nouveaux pour eux comme la dockerisation de stacks applicatives, les CI/CD pipelines, ou encore la gestion de permissions cloud: les systèmes distribués modernes sont complexes pour le nouveau venu, et même pour le praticien averti du DevOps. Est-ce que Duet AI pourrait les aider ?
Qu’est-ce que Duet AI ?
Duet AI est la version Google de Copilot, elle diffère de son concurrent de GitHub dans la mesure où, fidèle à sa stratégie entamée de longue de date, elle est intégrée à la Google Cloud Platform de manière « native »: on peut invoquer un Duet AI sur n’importe quelle page de l’UI du GCP pour poser une question ou réaliser une tâche.
L’outil peut aussi générer du code dans un IDE, à la manière de Copilot, c’est donc un outil multifacettes, qui sert aussi bien pour les devs dans leur éditeur que pour les « clique-boutons » des plateformes cloud, comme aime à les appeler un de mes collègues dont l’identité restera secrète 😉
Assistance avec IA générative: une bonne idée pour les nouveaux venus ou pas ?
Aujourd’hui, je suis plus à l’aise sur certains concepts, ce qui fait que je peux me débrouiller sur plusieurs plateformes (Azure, AWS, etc.) sans pour autant être un expert. Je ne cache pas que cela s’est fait au compte de nombreuses heures à étudier des concepts à tiroir sans fin. A l’époque, Chat-GPT n’existait pas ou n’avait pas le niveau de performance qu’il a aujourd’hui, il m’aurait été d’une grande aide pour mon apprentissage !
Nous avons eu récemment, chez Reboot-Conseil, une discussion au sujet de la mise à disposition d’outils d’assistance de code utilisant l’IA générative type Copilot : certains d’entre nous pensent qu’il faut que le développeur passe par ces longues veillées à lire des docs obscures et à se tromper pour acquérir une cetaine maturité et les réflexes nécessaires, l’argument se tient parfaitement car la démarche est très formatrice en effet. D’autres (c’est à dire moi) pensaient qu’il faut que le nouveau professionnel utilise ces outils au plus tôt et au plus vite pour maximiser sa productivité et être rentable pour son entreprise et, surtout, pour s’amuser tout simplement ! Je suis donc en train de me demander comment familiariser les étudiants au prompt engineering pour résoudre des problèmes, se documenter et utiliser des LLM en tant qu’outil d’assistance à la réflexion (un canard en plastique sous stéroïdes si vous préférez). Je vais tester Duet AI pour me faire un avis avant de leur en parler.
Cet article relatera l’expérience de ma première prise en main.
Duet AI 101
Pour rester dans le ton de ma formation, je vais tout de suite dans l’onglet use-cases de la documentation et je vais donc… tenter de déployer quelque chose 😁
On me propose des tutos Duet AI sur:
- de l’analyse de données
- développer une app’ en Python
- créer un environnement de build privé
- développer une app’ Node.js
- architecturer une app’ à plusieurs couches
- créer et modifier un réseau VPC
- créer et modifier un cluster Kubernetes
Pas mal pas mal, mais AI squad oblige, moi je veux:
- déployer une VM avec une GPU
- cloner un git repo à l’intérieur
- récupérer des données de quelque part
- entraîner un modèle d’IA dessus
- produire un modèle compilé et le stocker autre part
- tuer la VM pour ne pas qu’elle me coûte d’argent
- et je veux faire ça en mode scripté s’il vous plaît
Demandons lui ! Je ne sais pas si nous ferons tout ça dans cet article (ou bien si nous le ferons en plusieurs articles), mais vraiment je veux essayer le produit avec quelque chose que je serai amené à faire et voir où il peut me mener avec ce genre de liste de tâches.
Tout d’abord les sousous
Pour utiliser DuetAI, il faut payer une licence qui peut être mensuelle ou annuelle. Je tente la licence manuelle:
… $22,80 une licence pour un mois c’est un peu cher mais peut-être que le jeu en vaut la chandelle, poursuivons. D’ailleurs, l’offre GitHub Copilot Business a une tarification comparable.
Comment ça se présente ?
Dans le console GCP (je reste pas là pour l’instant je n’installe pas le plugin pour VSCode) on a un bouton en haut à droite pour invoquer le LLM, à gauche du raccourci pour la cloud shell
… ça pop up une fenêtre de chat, commençons avec mon projet:
Je vous mets ici mon prompt:
I'd like to:
- deploy a VM which has access to a GPU
- clone some repo in it
- get some training data (probably an open-source dataset)
- train a regression or classification model based on this data - store the compiled model in a bucket
- kill the VM
I want to do all this in a CI/CD pipeline
Le mal des LLMs: des réponses plausibles mais fausses non exactes.
… et, au premier abord, c’est plutôt cool ! je vous copy paste ici la réponse très détaillé de Duet AI; petit bémol: elle ne parle pas de CI/CD pipeline, cela fera donc l’objet d’un second prompt:
To deploy a VM with access to a GPU, you can use the following steps:
Go to the Google Cloud console .
Click the Compute Engine menu.
Click the Create Instance button.
In the Name field, enter a name for your instance.
In the Region field, select a region that supports GPUs.
In the Machine type field, select a machine type that includes a GPU.
In the Boot disk section, click the Change button.
In the Public images tab, search for "Ubuntu".
Select the latest Ubuntu image.
Click the Select button.
In the Advanced options section, click the Networking tab.
In the Network tags field, enter allow-ssh .
Click the Create button.
Once your instance has been created, you can connect to it using SSH. To do this, you can use the following steps:
Go to the Google Cloud console .
Click the Compute Engine menu.
Click the VM instances tab.
Find your instance in the list and click the SSH button.
Once you have connected to your instance, you can clone a repository from GitHub. To do this, you can use the following steps:
Open a terminal window.
Type the following command: git clone https://github.com/GoogleCloudPlatform/cloud-samples-data.git
Press Enter.
The repository has been cloned to your instance. You can now get some training data from the repository. To do this, you can use the following steps:
Open a terminal window.
Navigate to the cloud-samples-data/ai-platform/census directory.
Type the following command: gsutil cp gs://cloud-samples-data/ai-platform/census/adult.data .
Press Enter.
The training data has been downloaded to your instance. You can now train a regression or classification model based on this data. To do this, you can use the following steps:
Open a terminal window.
Navigate to the cloud-samples-data/ai-platform/census directory.
Type the following command: python3 train.py
Press Enter.
The model will be trained and saved to a file called model.joblib . You can now store the compiled model in a bucket. To do this, you can use the following steps:
Go to the Google Cloud console .
Click the Cloud Storage menu.
Click the Create bucket button.
In the Name field, enter a name for your bucket.
In the Location field, select a location for your bucket.
Click the Create button.
Once your bucket has been created, you can upload the compiled model to it. To do this, you can use the following steps:
Go to the Google Cloud console .
Click the Cloud Storage menu.
Click the name of your bucket.
Click the Upload files button.
Select the model.joblib file.
Click the Open button.
The compiled model has been uploaded to your bucket. You can now kill the VM. To do this, you can use the following steps:
Go to the Google Cloud console .
Click the Compute Engine menu.
Click the VM instances tab.
Find your instance in the list and click the Stop button.
The VM has been killed.
I hope this helps!
Duet AI me donne même un sample project pour tester tout le process ! Je lis attentivement les étapes, tout paraît pertinent au premier abord… est-ce que le repo donné en lien dans la réponse est juste aussi ?
Il existe bien un compte GoogleCloudPlatform
sur GitHub avec des repos contenant de la donnée d’entraînement, mais ici le LLM a soit halluciné un repo qui n’existe pas soit a linké un repo qui n’existe plus.
Qu’en est-il de la commande gsutil
gsutil cp gs://cloud-samples-data/ai-platform/census/adult.data .
pour télécharger des données depuis un bucket ?
… pareil, le lien est invalide 🥲.
Ok, continuons notre fact checking: puis-je créer une VM et cloner un repo sans autre étape intermédiaire, ainsi que semble le suggérer la réponse ?
… yes, git est installé par défaut et je peux cloner des repos.
Globalement, les autres étapes données dans la réponse de Duet AI sont pertinentes, mais il ne s’agit pas d’informations « actionnables » car il s’agit au final d’une réponse détaillée répétant la suite d’étapes que j’avais déjà en tête depuis le départ…
Je suis donc un peu sur ma faim. Quand je donne le même prompt à GPT-4, j’obtiens des snippets détaillés et je peux augmenter ma productivité en n’ayant pas à passer trop de temps sur la doc:
… et lorsque je demande la même chose à Gemini, le LLM m’oriente vers une meilleure solution: les pipelines ML de Vertex AI.
Conclusion côté GCP Console: si on utilise Duet AI, mes collègues avaient raison ! un apprenti risque de perdre plus de temps en utilisant l’outil qu’en se documentant soi-même en tâchant de comprendre ce qu’il fait.
Testons l’intégration IDE
A l’heure actuelle le produit Duet AI n’est pas satisfaisant après ce rapide test drive… je m’attendais à avoir de la génération de code de qualité, voire de la création semi-assistée de ressources pour réaliser ces tâches et avancer plus vite, au final je pourrais passer moins de temps à lire la doc (hé oui on fait encore ça de nos jours) plutôt claire du GCP et/ou à prompter GPT-4/Gemini avec des prompts plus ciblés pour réaliser une sous-étape X ou Y.
Maintenant testons l’intégration côté IDE (VSCode), peut-être aura-t-on une bonne surprise ?
Je vais lui demander d’écrire le code pour GitHub Actions pipeline correspondant à mon précédent prompt:
Write the GitHub actions pipeline to:
- deploy a VM which has access to a GPU
- clone some repo in it
- get some training data (probably an open-source dataset)
- train a regression or classification model based on this data - store the compiled model in a bucket
- kill the VM
J’ai obtenu cela comme réponse:
# This GitHub Actions pipeline will deploy a VM which has access to a GPU, clone a repo in it, get some training data (probably an open-source dataset), train a regression or classification model based on this data, store the compiled model in a bucket, and kill the VM.
- name: Deploy VM
uses: GoogleCloudPlatform/cloud-sdk-deploy-action@v1
with:
project_id: <walkthrough-project-id/>
region: us-central1
machine_type: n1-standard-4
image_family: tensorflow-2.12.0-gpu
image_project: tensorflow-cloud
service_account: <walkthrough-project-number/>-compute@developer.gserviceaccount.com
- name: Clone repo
uses: actions/checkout@v3
- name: Get training data
run: |
git clone https://github.com/GoogleCloudPlatform/cloud-samples-data.git
cd cloud-samples-data/ai-platform/mnist
gsutil cp gs://cloud-samples-data/ai-platform/mnist/train.csv .
- name: Train model
run: |
python3 mnist_train.py
- name: Store compiled model
uses: GoogleCloudPlatform/cloud-sdk-deploy-action@v1
with:
project_id: <walkthrough-project-id/>
region: us-central1
location: gs://<walkthrough-project-id/>-bucket/
source: .
- name: Kill VM
uses: GoogleCloudPlatform/cloud-sdk-deploy-action@v1
with:
project_id: <walkthrough-project-id/>
region: us-central1
machine_type: n1-standard-4
image_family: tensorflow-2.12.0-gpu
image_project: tensorflow-cloud
service_account: <walkthrough-project-number/>-compute@developer.gserviceaccount.com
delete: true
… la génération est super rapide mais là c’est encore pire: les GitHub actions mentionnées n’existent pas, la syntaxe n’est pas correcte, c’est vraiment une pâle idée de ce à quoi un pipeline pourrait ressembler sur cette plateforme !
J’en arrive à la conclusion que ce produit n’est pas encore mature, et qu’il faudra certainement repasser plus tard. Je reste sur mon duo GPT-4/Gemini et j’ajoute: l’utilisation d’un seul LLM, aussi intégré soit-il (comme Copilot pour la suite Microsoft) n’est pas à mon sens le Futur. On sera toujours limité par les faiblesses inhérentes des LLMs, même
si elles se réduiront avec le temps. A mon sens, les solutions les plus prometteuses sont celles qui font collaborer des LLMs entre eux (les solutions multiagents à la LangChain), qui ont accès à des tools externes, ou encore qui permettent à un LLM une méthode d’introspection pour s’auto corriger (comme le self-corrective RAG)… Ces applications agentiques permettront à mon sens d’obtenir des résultats bien plus impressionnants que l’intégration d’un seul LLM à une suite logicielle ou une plateforme de cloud.
Merci de m’avoir lu et à bientôt !