Comment communiquer git avec google colab

Dans cet article, vous apprendrez un moyen très efficace d'utiliser Colab lorsque vous travaillez sur un projet qui vous permettra de contrôler les fichiers localement sur votre propre ordinateur.

Je vais vous montrer comment le faire lorsque le projet est maintenu dans un référentiel git, (même un référentiel git privé), afin que vous puissiez gérer toutes les actions git facilement depuis votre ordinateur comme vous en êtes déjà habitué.

Je partagerai avec vous le code et la structure de fichiers que j'utilise qui permettent une initialisation rapide du notebook Colab.

Les avantages que je vois en utilisant cette méthode proposée sont:

  1. Il permet une réinitialisation en un clic du notebook
  2. Cela simplifie le processus de travail en équipe avec colab et git
  3. Ce processus permet également d'exécuter le même notebook localement sans aucune modification

J'en connais beaucoup, y compris moi-même, qui auraient réfléchi à deux fois et renonceraient probablement à leur tentative d'apprendre le ML s'ils avaient dû payer pour acquérir la première expérience. L'exécution d'une formation GPU peut être coûteuse, et avoir la possibilité de l'exécuter gratuitement réduit la barrière pour les personnes qui ont des ambitions mais n'ont pas les ressources nécessaires pour faire les premiers pas.

Cela étant dit, travailler avec Google Colab a ses «ennuis», qui me hantent depuis un certain temps. Je ne sais pas pour vous, mais d'après mon expérience, lorsque vous travaillez sur un projet, il est très avantageux d'être organisé, donc travailler avec un contrôle de version comme git est très important.

Il existe de nombreux problèmes lorsque vous essayez de combiner Google Colab et Git.

  • Le premier est de savoir comment charger le référentiel de projet dans Colab (et si le dépôt est privé, comment le faire de manière sécurisée sans partager vos informations d'identification).
  • Sur Colab, où stockez-vous votre notebook par rapport à votre repo
  • Une fois que vous avez apporté des modifications à votre code, comment transférer ces modifications de votre bloc-notes hébergé par Colab dans votre dépôt.
  • Si vous (ou un autre membre de votre équipe / groupe) avez apporté des modifications à certains fichiers du dépôt et que vous souhaitez les utiliser dans votre bloc-notes, comment extraire les mises à jour du dépôt afin qu'elles soient disponibles dans votre bloc-notes ? Et pouvez-vous faire cela même sans recharger le portable?
  • Dans colab, chaque fois que nous ouvrons le cahier, il recommence à nouveau. Nous devons nous connecter aux fichiers stockés sur notre gdrive, et même comment exécuter le projet lorsque les fichiers sont stockés quelque part au fond du système de fichiers gdrive?

Le système Google Colab et Git:

La première étape de la solution consiste à utiliser Google Drive pour le bureau . Si vous n'avez pas vérifié celui-ci, allez-y et faites-le maintenant, car cette application vous offre la possibilité d'avoir un dossier local sur votre ordinateur qui est synchronisé avec votre lecteur Google.

Vous pouvez choisir les dossiers exacts de gdrive que vous souhaitez avoir sur votre disque dur local, de sorte que vous n'avez pas vraiment besoin d'avoir une sauvegarde pour l'ensemble de gdrive. Une fois que vous avez spécifié le dossier, la synchronisation des fichiers entre Colab et votre dossier local est très rapide. Toute modification que vous effectuez dans Colab est presque immédiatement transférée dans votre fichier local, et inversement. Ainsi, vous pouvez pratiquement travailler localement avec l'IDE que vous utilisez également, ce qui rend le flux de travail beaucoup plus pratique.

Cela résout également le problème de la façon dont vous obtenez le dépôt dans le dossier gdrive en premier lieu. Une fois que vous avez connecté gdrive à votre disque, créez un dossier qui contiendra votre projet. Vous pouvez le faire dans gdrive ou sur votre site local, peu importe car le dossier est suivi, et par conséquent, le processus de synchronisation s'assurera que cela existe à la fois sur votre ordinateur et dans le cloud. Ensuite, depuis votre machine locale, ouvrez votre shell / terminal dans ledit dossier, et simplement `git clone` le repo.

Étant donné que tout le dépôt est situé dans un dossier local sur votre machine, vous pouvez utiliser votre gestionnaire git préféré pour gérer le dépôt (personnellement, j'utilise SourceTree)

Voici la structure du dossier du projet que j'utilise:

myProject
    | —— notebooks
    | —— src
         | —— __init__.py 
                | —— other python files
    | __init__.py
    | credentials.sample.ini

Le notebook que nous exécutons dans colab est celui qui est stocké dans le dossier `notebooks` du dépôt. Cela signifie que toute modification que vous apportez au bloc-notes dans colab sera synchronisée avec votre dossier de lecteur google local, ce qui vous permettra de transmettre les modifications au serveur de dépôt à partir de votre ordinateur local.

Une chose importante à retenir: même si le notebook se trouve dans le dossier 'notebooks', le dossier de travail lors de l'exécution du notebook n'a pas à l'être!
En fait, utiliser le dossier racine du projet comme dossier de travail a beaucoup plus de sens, car il donne accès aux fichiers dans le dossier `src`. La raison des fichiers __init__.py est qu'ils définissent le `src` comme un module python, ce qui permet d'utiliser des importations python normales pour tous les fichiers qui se trouvent dans le dossier.

Afin de rationaliser le processus de changement du répertoire vers le dossier racine, je recommande d'utiliser un fichier de configuration (credentials.colab.ini). Je stocke ce fichier localement, et une fois que je me reconnecte à un nouveau bloc-notes colab, je télécharge manuellement le fichier de configuration dans le dossier `/ content / 'dans gdrive (il s'agit du dossier racine de l'instance de bloc-notes Colab, il suffit donc de glisser-déposer le fichier de votre dossier local vers l'interface utilisateur. Voir l'image ci-dessous.

Où télécharger le fichier d'identification sur Colab

Faites attention que le fichier credentials.colab.ini réel ne doit pas être poussé vers le dépôt git! En fonction de votre projet, vous pouvez utiliser ce fichier pour stocker toute autre configuration importante dont vous pourriez avoir besoin.

Une raison importante pour le fichier de configuration est de contenir le chemin racine du projet. J'utilise ensuite l'impressionnant module de configuration python pour lire le fichier de configuration, afin que nous puissions accéder aux paramètres de configuration n'importe où dans le notebook.

import configparser
import os.path
from os import path
from importlib import reload
WANDB_enable = False
creds_path_ar = ["../credentials.ini","credentials.colab.ini"]
root_path = ""
data_path = ""
for creds_path in creds_path_ar:
  if path.exists(creds_path):
    config_parser = configparser.ConfigParser()
    config_parser.read(creds_path)
    root_path = config_parser['MAIN']["PATH_ROOT"]
    data_path = config_parser['MAIN']["PATH_DATA"]
    ENV = config_parser['MAIN']["ENV"]
    break

Pour cette raison, ayez `credentials.example.ini` dans votre dépôt, qui ne contient que le modèle des paramètres à utiliser. Tout membre de l'équipe doit faire sa propre copie du fichier et mettre à jour les valeurs dont il a besoin dans sa copie. Et placez le fichier d'informations d'identification réel dans gitignore afin qu'il n'entre pas dans le dépôt par erreur.

Raison de cette ligne:

creds_path_ar = [“../credentials.ini”,”credentials.colab.ini”]

Un fichier de configuration typique ressemble à ceci:

[DEFAULT]
WANDB_ENABLE = FALSE
ENV = LOCAL
[MAIN] 
WANDB_LOGIN = ……………………………
PATH_ROOT = /content/drive/My Drive/WORK/ML/MyProject
PATH_DATA = /content/drive/My Drive/WORK/ML/data
ENV = COLAB

Un morceau de code qui doit absolument être exécuté uniquement sur colab est le suivant, qui monte gdrive sur l'instance de notebook.

if ENV==”COLAB”:
   from google.colab import drive
   drive.mount(‘/content/drive’)

Enfin, à la fois sur local et sur colab, nous passons au dossier de travail en exécutant cette cellule:

cd {root_path}

Si vous avez plus d'une personne dans l'équipe, cette méthode leur permet à tous de partager le même bloc-notes et de l'exécuter comme ils le souhaitent. Ils peuvent l'exécuter sur Colab, ou même localement s'ils ont accès à de meilleures ressources.

Conseils supplémentaires pour utiliser cette méthode efficacement

Quelques opérations de productivité et d'efficacité plus subtiles qui méritent d'être mentionnées amélioreront votre flux de travail lors de l'utilisation de ce système:

Fichier gdrive immédiat ouvert sans la navigation fastidieuse dans l'interface utilisateur de gdrive.

Avez-vous déjà essayé de naviguer vers un dossier profond quelque part dans votre gdrive? Dans le passé, j'étais vraiment frustré parce que c'était un processus lent. Vous devez parcourir les dossiers un par un et chaque changement de dossier prend quelques secondes. Vous pourriez penser que je suis fou, mais une fois que vous le faites plusieurs fois par jour, cela commence à s'additionner. Avec Google Drive for Desktop, vous pouvez accéder directement à un emplacement de dossier / fichier, ce qui peut vous faire gagner ces secondes coûteuses. Cette option se trouve dans la fenêtre contextuelle du clic droit de votre explorateur, voir image ci-dessous

Accès direct à n'importe quel fichier ou dossier à l'aide du menu contextuel

Travailler localement, extraire les fichiers modifiés et recharger les modules

Un autre avantage d'avoir vos fichiers localement est que pour les fichiers Python normaux qui sont utilisés dans votre notebook, vous pouvez utiliser l'EDI pour les éditer. Ce que je veux dire, c'est que si vous structurez correctement votre projet, les fonctions les plus importantes devraient se trouver dans un module python importé dans le notebook.

La séparation des méthodes du bloc-notes dans des fichiers python est une méthode qui est une bonne pratique, car elle prend en charge une structure de code plus organisée et une réutilisation accrue du code. Lorsqu'il est utilisé avec ce système Colab, il ajoute également la possibilité d'apporter des modifications aux fichiers localement. Je peux ouvrir le projet directement à partir de mon dossier local google drive dans vscode, et toute modification que j'apporte aux fichiers est synchronisée avec gdrive.

Par exemple, je peux avoir experiment_utils.py dans le dossier src et je peux l'importer avec:

from src import experiment_utils as utils

Vous pouvez même apporter des modifications à la volée. Vous n'avez pas besoin de redémarrer le notebook à chaque modification de vos fichiers de module. Pour y parvenir, placez ces lignes au début de votre cahier:

%load_ext autoreload
%autoreload 2

from importlib import reload
reload(moduleName)

Bien sûr, si quelqu'un a changé le dépôt, vous pouvez extraire les modifications de votre ordinateur local et les mises à jour seront automatiquement synchronisées avec gdrive immédiatement. Google Drive pour ordinateur de bureau vous montrera une petite icône V verte à côté du nom du dossier / fichier lorsque la synchronisation est terminée.

L'icône verte V indique que le dossier / fichier est synchronisé

J'ai décidé d'appeler mon dossier de fichiers python `src`. Vous pouvez choisir un autre nom, mais attention: ne nommez pas le dossier `src`` code` , car l'environnement Colab a un fichier code.py préexistant qui vous donnera un étrange message d'erreur. (Il m'a fallu du temps pour comprendre celui-ci).

Conclusion

J'espère vraiment que vous avez trouvé ce post instructif. Au cas où vous l'auriez aimé, donnez-lui quelques goûts et partagez-le avec qui vous pensez pouvoir en bénéficier. Si vous trouvez un moyen d'améliorer encore ce système, faites-le moi savoir! 

Commentaires

Posts les plus consultés de ce blog

Comment fonctionne l'optimise d'Adam

RESEAU DE NEURONE CONVOLUTIF

Comment utiliser les diagrammes PlantUML dans Visual Studio Code pour Windows 10