Vertex AI Workbench est un environnement très complet pour le développement de solution de machine learning proposé dans l'offre de service cloud de Google. Il permet notamment de créer des instances de notebooks complètement personnalisable en termes de ressource ce qui représente un réel avantage en fonction des modèles utilisés. Les instances sont pré-configurées et disponibles avec JupyterLab. Il est ainsi très facile et rapide d'obtenir un notebook avec un environnement adapté pour travailler, et ça directement dans son navigateur.

Cependant, il peut être nettement plus confortable de travailler directement dans son IDE qui est déjà complètement configuré et dans lequel chacun a ses habitudes. Nous allons donc voir dans cet article comment se connecter à une instance notebook sur Vertex AI Workbench depuis Visual Studio Code avec les petites subtilités qui en découle. Cette connexion se fera via SSH, il faudra ainsi s'assurer que vous disposez des droits suffisant au niveau de l'administration dans GCP.

Création du notebook

Première étape, la création de l'instance Vertex AI Workbench qui va héberger le notebook. Ici, nous allons créer un notebook géré par l'utilisateur.

Création d'un notebook géré par l'utilisateur sur Vertex AI

Bien évidemment, elle est entièrement configurable que ce soit au niveau de l'environnement avec des conteneurs pré-configurés pour TensorFlow ou PyTorch par exemple. Mais également au niveau de la machine avec le choix du nombre de CPU, la quantité de RAM et bien évidemment le nombre de GPU.

Une fois l'instance créée, il est possible d'accéder directement au notebook dans son navigateur web via JupyterLab 3 qui est pré-installé.

JupyterLab

Préparation de VScode

Avant de passer à la configuration de VScode, il faudra au préalable avoir installé Google Cloud CLI dans votre environnement de travail. Une fois l'installation du CLI terminé, il faut passer à l'installation des deux extensions VScode qui vont permettre la connexion à l'instance distante :

Une fois ces deux extensions installées, il faut dans un premier temps se connecter à GCP via VScode afin de récupérer les informations nécessaires pour établir la connexion SSH. Connectez-vous avec votre compte, la encore les configurations préalables des accès par l'administrateur GCP peut être nécessaire.

Connexion à GCP

Une fois connecté, vous pouvez sélectionner le projet GCP dans lequel vous avez créé votre instance. Vous pourrez ensuite retrouver votre instance dans la liste compute engine et récupérer sont adresse IP externe (ici 35.187.61.98). Attention, si vous éteignez votre instance, il y a de fortes chances pour que l'adresse IP de la machine change. Deux options s'offrent à vous :

  • soit récupérer à chaque fois la nouvelle adresse IP et modifier le fichier de configuration de connexion ssh que nous allons voir juste après ;
  • soit en rendant l'adresse IP externe de l'instance statique (via la configuration de la machine dans l'interface GCP).
Vue de l'instance GCP dans la liste des machines du projet

En cliquant sur l'icône terminal [>] à droite du nom de votre instance, vous pouvez tester à ce moment la connexion depuis votre machine à l'instance GCP.

======================================
Welcome to the Google Deep Learning VM
======================================
 
Version: tf2-gpu.2-8.m103
Based on: Debian GNU/Linux 10 (buster) (GNU/Linux 4.19.0-22-cloud-amd64 x86_64\n)
 
Resources:
 * Google Deep Learning Platform StackOverflow: https://stackoverflow.com/questions/tagged/google-dl-platform
 * Google Cloud Documentation: https://cloud.google.com/deep-learning-vm
 * Google Group: https://groups.google.com/forum/#!forum/google-dl-platform
 
To reinstall Nvidia driver (if needed) run:
sudo /opt/deeplearning/install-driver.sh
TensorFlow comes pre-installed with this image. To install TensorFlow binaries in a virtualenv (or conda env),
please use the binaries that are pre-built for this image. You can find the binaries at
/opt/deeplearning/binaries/tensorflow/
If you need to install a different version of Tensorflow manually, use the common Deep Learning image with the
right version of CUDA
 
Linux my-notebook 4.19.0-22-cloud-amd64 #1 SMP Debian 4.19.260-1 (2022-09-29) x86_64
 
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
 
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
 
sebastien_delecraz_gojob_com@my-notebook:~$

Vous pouvez ainsi récupérer le user à utiliser pour configurer la connexion ssh (ici sebastien_delecraz_gojob_com).

Configuration de la connection ssh

Avant de commencer la configuration comme nous l'avons vu juste avant, le user utilisé lors de la connexion ssh est sebastien_delecraz_gojob_com. La subtilité à prendre en compte ici, c'est que lorsque vous vous connectez au JupyterLab via votre navigateur internet, l'utilisateur avec lequel vous êtes connecté s'appelle jupyter. De ce fait, si vous souhaitez utiliser à la fois le navigateur et votre IDE, vous allez faire face à des problèmes de droits pour la lecture et l'écriture des fichiers.

Pour palier à ce problème, nous allons forcer lors de la connexion ssh à changer d'utiliser pour toujours travailler avec le user jupyter. Il faut dans un premier temps aller dans les paramètres de l'extension Remote-SSH (Ctrl+Shift+P et sélectionner Remote-SSH: Connect to Host). Ensuite, assurez-vous que l'option Remote.SSH: Enable Remote Command soit bien active (checkbox cochée).

Activation de l'option Remote Commande

Nous allons maintenant pouvoir renseigner les informations de connexion. Pour cela, utilisez Ctrl+Shift+P et sélectionnez Remote-SSH: Connect to Host... puis cliquer sur Configure SSH Hosts... et enfin sélectionnez votre fichier de configuration (dans mon cas, le chemin d'accès est /home/sebastien.delecraz/.ssh/config).

Fichier de configuration de connexion

Enregistrez le fichier de configuration. Vous pouvez maintenant vous connecter avec la commande Ctrl+Shift+P et sélectionnez Remote-SSH: Connect to Host. Vous devez maintenant voir apparaître votre instance dans la liste des machines disponibles.

Une nouvelle fenêtre VSCode s'ouvrira. Un prompt peut apparaitre vous demandant si vous voulez continuer ou non, il suffit d'accepter. Vous voilà maintenant connectés à votre machine distante. Ouvrez un dossier et sélectionnez le chemin /home/jupyter/. Vous aurez alors accès à l'arborescence de votre machine distante.

Ouverture de l'arborescence de la machine

Configuration de la machine distante

Il ne vous reste plus qu'à installer les extensions Python et Jupyter sur la machine distante. Pour ce faire, accédez au marketplace d'extensions (Ctrl+Shift+X) depuis la fenêtre VSCode de votre machine distante. Il vous suffit de chercher les extensions que vous voulez et de cliquer sur Install in SSH: my-notebook.

Installation de l'extension Python sur la machine distante

Vous voilà maintenant au commande d'un environnement de travail distant dans votre VSCode Local.

Instance Vertex AI distante dans VSCode

Davantage de détails disponibles ici.