Intégration de Git pour Azure Machine Learning

Git est un système de gestion de versions connu qui vous permet de partager vos projets et de collaborer. Cet article explique comment Azure Machine Learning peut s’intégrer à un référentiel Git local pour suivre les informations relatives au référentiel, aux branches et aux validations actuelles dans le cadre d’une tâche d’entraînement.

Azure Machine Learning prend entièrement en charge les référentiels Git pour le suivi du travail. Vous pouvez cloner des référentiels directement sur votre système de fichiers d’espace de travail partagé, utiliser Git sur votre station de travail locale ou utiliser Git à partir d’un pipeline d’intégration continue et de déploiement continu (CI/CD).

Lorsque vous envoyez un travail d’entraînement Azure Machine Learning qui contient des fichiers sources à partir d’un référentiel Git local, les informations sur le référentiel sont suivies dans le cadre du travail d’entraînement. Étant donné que les informations proviennent du référentiel Git local, elles ne sont liées à aucun référentiel central spécifique. Votre référentiel peut être cloné à partir de n’importe quel service compatible Git, tel que GitHub, GitLab, Bitbucket ou Azure DevOps.

Conseil

Vous pouvez utiliser Visual Studio Code pour interagir avec Git via une interface utilisateur graphique. Pour vous connecter à une instance de calcul distante Azure Machine Learning à l’aide de Visual Studio Code, consultez Lancer Visual Studio Code intégré à Azure Machine Learning (préversion).

Pour plus d’informations sur les fonctionnalités de contrôle de version de Visual Studio Code, consultez Utilisation du contrôle de version dans Visual Studio Code et Utilisation de GitHub dans Visual Studio Code.

Référentiels Git dans un système de fichiers d’espace de travail

Azure Machine Learning fournit un système de fichiers partagé pour tous les utilisateurs d’un espace de travail. La meilleure façon de cloner un référentiel Git dans ce partage de fichiers consiste à créer une instance de calcul et ouvrir un terminal. Dans le terminal, vous avez accès à un client Git complet et pouvez cloner et utiliser Git à l’aide de l’interface CLI Git. Pour plus d’informations, consultez Interface CLI Git.

Vous pouvez cloner n’importe quel référentiel Git auquel vous pouvez vous authentifier, comme un référentiel GitHub, Azure Repos ou BitBucket. Il est préférable de cloner le référentiel dans votre répertoire utilisateur afin que d’autres utilisateurs ne puissent pas créer de collisions directement sur votre branche de travail.

Il existe des différences entre le clonage du système de fichiers local de l’instance de calcul ou le clonage vers le système de fichiers partagé, monté en tant que répertoire ~/cloudfiles/code/. En général, le clonage vers le système de fichiers local offre de meilleures performances que le clonage sur le système de fichiers monté. Toutefois, si vous supprimez et recréez l’instance de calcul, le système de fichiers local est perdu, tandis que le système de fichiers partagé monté est conservé.

Cloner un référentiel Git avec SSH

Vous pouvez cloner un référentiel à l’aide du protocole SSH (Secure Shell). Pour utiliser SSH, vous devez authentifier votre compte Git avec SSH à l’aide d’une clé SSH.

Générer et enregistrer une nouvelle clé SSH

Pour générer une clé SSH, vous pouvez accéder à la page Notebook Azure Machine Learning studio, ouvrir un terminal et exécuter la commande suivante, en remplaçant votre adresse e-mail.

ssh-keygen -t ed25519 -C "your_email@example.com"

Cette commande renvoie la sortie suivante :

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_ed25519):

Vérifiez que l’emplacement de la sortie précédente est /home/azureuser/.ssh, ou remplacez-le par cet emplacement, puis appuyez sur Entrée.

Il est préférable d’ajouter une phrase secrète à votre clé SSH pour renforcer la sécurité. Dans les invites suivantes, entrez une phrase secrète sécurisée.

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

Lorsque vous appuyez sur Entrée, la commande ssh-keygen génère une clé SSH avec l’adresse e-mail fournie en tant qu’étiquette. Le fichier de clé enregistre sur l’instance de calcul et est accessible uniquement au propriétaire de l’instance de calcul.

Ajouter la clé publique à votre compte Git

Vous devez ajouter votre clé SSH publique à votre compte Git. Pour obtenir la clé, exécutez la commande suivante dans votre fenêtre de terminal. Si votre fichier de clé a un nom différent, remplacez id_ed25519.pub par le nom de votre fichier de clé publique.

cat ~/.ssh/id_ed25519.pub

La commande affiche le contenu de votre fichier de clé publique. Copiez la sortie.

Conseil

Pour copier et coller dans la fenêtre de terminal, utilisez ces raccourcis clavier, en fonction de votre système d’exploitation :

  • Windows : Ctrl+C ou Ctrl+Insertion pour copier, Ctrl+V ou Ctrl+Maj+V pour coller.
  • macOS : Cmd+C pour copier et Cmd+V pour coller.

Certains navigateurs peuvent ne pas prendre en charge correctement les autorisations du Presse-papiers.

Ajoutez la clé SSH à votre compte Git en suivant les instructions suivantes, en fonction de votre service Git :

Cloner le dépôt Git avec SSH

Pour cloner un référentiel Git, copiez l’URL de clone Git SSH à partir du référentiel. Dans votre terminal, exécutez git clone suivi de l’URL du clone Git SSH. Par exemple :

git clone git@example.com:GitUser/azureml-example.git

SSH peut afficher l’empreinte SSH du serveur et vous demander de la vérifier, comme dans l’exemple suivant.

The authenticity of host 'github.com (000.00.000.0)' can't be established.
ECDSA key fingerprint is SHA256:0000000000000000000/00000000/00000000.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

SSH affiche cette empreinte digitale quand il se connecte à un hôte inconnu pour vous protéger contre les attaques de l’intercepteur. Vous devez vérifier que l’empreinte correspond à l’une des empreintes de la page de clés publiques SSH. Une fois que vous avez accepté l’empreinte de l’hôte, SSH ne vous sollicite que si l’empreinte change.

SSH affiche une réponse comme dans l’exemple suivant :

Cloning into 'azureml-example'...
Warning: Permanently added 'github.com,000.00.000.0' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/azureuser/.ssh/id_ed25519': 

Une fois que vous avez entré votre phrase secrète, Git clone le référentiel et configure l’origine distante pour vous connecter à SSH pour les futures commandes Git.

Suivre le code provenant de dépôts Git

Lorsque vous soumettez une tâche d’entraînement à partir du kit SDK Python ou de l’interface CLI de Machine Learning, les fichiers nécessaires à l’entraînement du modèle sont chargés dans votre espace de travail. Si la commande git est disponible sur votre environnement de développement, le processus de chargement vérifie si les fichiers sources sont stockés dans un référentiel Git.

Si c’est le cas, le processus charge les informations de référentiel, de branche et de validation Git dans le cadre du travail d’entraînement. Les informations sont stockées dans les propriétés de travail d’entraînement suivantes pour les travaux qui utilisent un estimateur, un pipeline Machine Learning ou une exécution de script.

Propriété Commande Git utilisée pour récupérer la valeur Description
azureml.git.repository_uri ou mlflow.source.git.repoURL git ls-remote --get-url URI à partir duquel le référentiel a été cloné.
azureml.git.branch ou mlflow.source.git.branch git symbolic-ref --short HEAD Branche active lorsque la tâche a été envoyée.
azureml.git.commit ou mlflow.source.git.commit git rev-parse HEAD Hachage de validation du code qui a été envoyé pour la tâche.
azureml.git.dirty git status --porcelain . True si l’intégrité de la validation ou branche est compromise, sinon false.

Si la commande git n’est pas disponible sur votre environnement de développement ou que vos fichiers d’entraînement ne se trouvent pas dans un référentiel Git, aucune information liée à Git n’est suivie.

Conseil

Pour vérifier si la commande git est disponible sur votre environnement de développement, exécutez la commande git --version dans une interface de ligne de commande. Si Git est installé et dans votre chemin d’accès, vous recevez une réponse similaire à git version 2.43.0. Pour plus d’informations sur l’installation de Git sur votre environnement de développement, consultez le site web Git.

Afficher les informations Git

Les informations Git sont stockées en tant que code JSON dans les propriétés d’un travail d’entraînement. Les informations Git journalisées peuvent inclure les propriétés suivantes :

"azureml.git.repository_uri": "git@github.com:azure/<repo-name>",
"azureml.git.branch": "<branch-name>",
"azureml.git.commit": "<commit-id>",
"azureml.git.dirty": "<True/False>",
"mlflow.source.git.repoURL": "git@github.com:azure/<repo-name>",
"mlflow.source.git.branch": "<branch-name>",
"mlflow.source.git.commit": "<commit-id>",

Vous pouvez voir ces informations en utilisant le Portail Azure, le Kit de développement logiciel (SDK) Python ou l’interface Azure CLI.

Portail Azure

Dans votre espace de travail dans Azure Machine Learning studio, sélectionnez votre travail dans la page Travaux. Dans la section Propriétés de la page Vue d’ensemble du travail , sélectionnez JSON brut sous Voir toutes les propriétés.

Dans le code JSON, recherchez les propriétés Git, par exemple :

    "properties": {
        "mlflow.source.git.repoURL": "git@github.com:azure/azureml-examples",
        "mlflow.source.git.branch": "main",
        "mlflow.source.git.commit": "0000000000000000000000000000000000000000",
        "azureml.git.dirty": "False",
        ...
    },

SDK Python V2

Après l’envoi d’une exécution d’entraînement, un objet Job est retourné. L’attribut properties de cet objet contient les informations Git journalisées. Par exemple, vous pouvez exécuter la commande suivante pour récupérer le hachage de validation :

job.properties["mlflow.source.git.commit"]

Azure CLI V2

Vous pouvez exécuter la commande az ml job show avec l’argument --query pour afficher les informations Git. Par exemple, la requête suivante récupère la valeur de la propriété mlflow.source.git.commit :

az ml job show --name my-job-id --query "{GitCommit:properties.azureml.git.commit} --resource-group my-resource-group --workspace-name my-workspace"