Integrazione di Git per Azure Machine Learning

Git è un sistema di controllo della versione molto diffuso che consente di condividere e collaborare sui progetti. Questo articolo illustra in che modo Azure Machine Learning può integrarsi con un repository Git locale per tenere traccia delle informazioni su repository, ramo e commit corrente come parte del processo di training.

Azure Machine Learning supporta completamente i repository Git per la verifica del lavoro. È possibile clonare i repository direttamente nel file system dell'area di lavoro condivisa, usare Git nella workstation locale oppure usare Git da una pipeline di integrazione continua e distribuzione continua (CI/CD).

Quando si invia un processo di training di Azure Machine Learning con file di origine da un repository Git locale, le informazioni sul repository vengono rilevate come parte del processo di training. Poiché le informazioni provengono dal repository Git locale, non sono associate a un repository centrale specifico. Il repository può essere clonato da qualsiasi servizio compatibile con Git, ad esempio GitHub, GitLab, Bitbucket o Azure DevOps.

Suggerimento

Usare Visual Studio Code per interagire con Git tramite un'interfaccia utente grafica. Per connettersi a un'istanza di ambiente di calcolo remota di Azure Machine Learning usando Visual Studio Code, vedere Avviare Visual Studio Code integrato con Azure Machine Learning (anteprima).

Per altre informazioni sulle funzionalità di controllo della versione di Visual Studio Code, vedere Usare il controllo della versione in Visual Studio Code e Usare GitHub in Visual Studio Code.

Repository Git in un file system dell'area di lavoro

Azure Machine Learning offre un file system condiviso per tutti gli utenti in un'area di lavoro. Il modo migliore per clonare un repository Git in questa condivisione file consiste nel creare un'istanza di calcolo e aprire un terminale. Nel terminale è possibile accedere a un client Git completo e clonare e usare Git usando l'interfaccia della riga di comando di Git. Per altre informazioni, vedere Interfaccia della riga di comando di Git.

È possibile clonare qualsiasi repository Git a cui è possibile eseguire l'autenticazione, ad esempio un repository GitHub, Azure Repos o BitBucket. È consigliabile clonare il repository nella propria directory utente, in modo che non vi siano conflitti diretti con altri utenti nel ramo di lavoro.

Esistono alcune differenze tra la clonazione nel file system locale dell'istanza di calcolo o la clonazione nel file system condiviso, montata come directory ~/cloudfiles/code/. In generale, la clonazione nel file system locale offre prestazioni migliori rispetto alla clonazione nel file system montato. Tuttavia, se si elimina e si ricrea l'istanza di calcolo, il file system locale viene perso, mentre il file system condiviso montato viene mantenuto.

Clonare un repository Git con SSH

È possibile clonare un repository usando il protocollo Secure Shell (SSH). Per usare SSH, occorre autenticare l'account Git in SSH usando una chiave SSH.

Generare e salvare una nuova chiave SSH

Per generare una nuova chiave SSH, è possibile passare alla pagina Notebook di studio di Azure Machine Learning, aprire un terminale ed eseguire il comando seguente sostituendo l'indirizzo di posta elettronica.

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

Il comando restituisce il seguente output:

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

Assicurarsi che il percorso nell'output precedente sia /home/azureuser/.ssh, oppure modificarlo in tale posizione e quindi premere INVIO.

Per una maggiore sicurezza, è consigliabile aggiungere una passphrase alla chiave SSH. Ai prompt seguenti immettere una passphrase sicura.

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

Quando si preme INVIO, il comando ssh-keygen genera una nuova chiave SSH con l'indirizzo di posta elettronica fornito come etichetta. Il file di chiave viene salvato nell'istanza di ambiente di calcolo ed è accessibile solo al proprietario della stessa.

Aggiungere la chiave pubblica al proprio account Git

È necessario aggiungere la chiave SSH pubblica all'account Git. Per ottenere la chiave, eseguire il comando seguente nella finestra del terminale. Se il file di chiave ha un nome diverso, sostituire id_ed25519.pub con il nome file della chiave pubblica.

cat ~/.ssh/id_ed25519.pub

Il comando visualizza il contenuto del file di chiave pubblica. Copiare l'output.

Suggerimento

Per copiare e incollare nella finestra del terminale, usare questi tasti di scelta rapida, a seconda del sistema operativo:

  • Windows: CTRL+C o CTRL+INS per copiare, CTRL+V o CTRL+MAIUSC+V per incollare.
  • MacOS: Cmd+C per copiare e Cmd+V per incollare.

Alcuni browser potrebbero non supportare correttamente le autorizzazioni di accesso degli Appunti.

Aggiungere la chiave SSH all'account Git usando le istruzioni seguenti, a seconda del servizio Git:

Clonare il repository Git con SSH

Per clonare un repository Git, copiare l'URL clone GIT SSH dal repository. Nel terminale eseguire git clone seguito dall'URL git clone SSH. Ad esempio:

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

SSH potrebbe visualizzare l'impronta digitale SSH del server e chiedere di verificarla, come nell'esempio seguente.

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 visualizza questa impronta digitale quando si connette a un host sconosciuto per proteggere l'utente dagli attacchi man-in-the-middle. È necessario verificare che l'impronta digitale corrisponda a una delle impronte digitali nella pagina delle chiavi pubbliche SSH. Dopo aver accettato l'impronta digitale dell'host, SSH non effettuerà altre richieste a meno che l'impronta digitale non cambi.

SSH visualizza una risposta simile all'esempio seguente:

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': 

Dopo aver immesso la passphrase, Git clona il repository e configura l'origine nel repository remoto per connettersi con SSH per i comandi Git futuri.

Tenere traccia del codice proveniente da repository Git

Quando si invia un processo di training dall'SDK Python o dall'interfaccia della riga di comando di Machine Learning, i file necessari per eseguire il training del modello vengono caricati nell'area di lavoro. Se il comando git è disponibile nell'ambiente di sviluppo, il processo di caricamento verifica se i file di origine siano archiviati in un repository Git.

In tal caso, il processo carica le informazioni del repository Git, del ramo e del commit corrente come parte del processo di training. Le informazioni vengono archiviate nelle proprietà del processo di training seguenti per i processi che usano una stima, una pipeline di Machine Learning o un'esecuzione di script.

Proprietà Comando Git usato per ottenere il valore Descrizione
azureml.git.repository_uri oppure mlflow.source.git.repoURL git ls-remote --get-url URI da cui è stato clonato il repository.
azureml.git.branch oppure mlflow.source.git.branch git symbolic-ref --short HEAD Ramo attivo al momento dell'invio del processo.
azureml.git.commit oppure mlflow.source.git.commit git rev-parse HEAD Hash del commit del codice inviato per il processo.
azureml.git.dirty git status --porcelain . True se il ramo o il commit è dirty; in caso contrario, false.

Se il comando git non è disponibile nell'ambiente di sviluppo, o se i file di training non si trovano in un repository Git, non vengono rilevate informazioni correlate a Git.

Suggerimento

Per verificare se il comando git è disponibile nell'ambiente di sviluppo, eseguire il comando git --version in un'interfaccia della riga di comando. Se Git è installato ed è nel percorso, si riceve una risposta simile a git version 2.43.0. Per altre informazioni sull'installazione di Git nell'ambiente di sviluppo, consultare il sito Web Git.

Visualizzare le informazioni Git

Le informazioni Git vengono archiviate come codice JSON nelle proprietà per un processo di training. Le informazioni Git registrate possono includere le proprietà seguenti:

"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>",

È possibile visualizzare queste informazioni usando il portale di Azure, Python SDK o l'interfaccia della riga di comando di Azure.

Azure portal

Nell'area di lavoro di studio di Azure Machine Learning, selezionare il processo nella pagina Processi. Nella sezione Proprietà della pagina Informazioni generali del processo, selezionare JSON non elaborato in Visualizza tutte le proprietà.

In JSON cercare le proprietà Git, ad esempio:

    "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",
        ...
    },

Python SDK V2

Dopo aver inviato un'esecuzione di training, viene restituito un oggetto Processo. L'attributo properties di questo oggetto contiene le informazioni Git registrate. Ad esempio, per recuperare l'hash di commit è possibile eseguire il comando seguente:

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

Interfaccia della riga di comando di Azure versione 2

Per visualizzare le informazioni Git è possibile eseguire il comando az ml job show con l'argomento --query. Ad esempio, la query seguente recupera il valore della proprietà 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"