Git-Integration für Azure Machine Learning

Git ist ein beliebtes Versionskontrollsystem, mit dem Sie Projekte freigeben und gemeinsam mit anderen an ihnen arbeiten können.

Azure Machine Learning unterstützt Git-Repositorys zur Nachverfolgung der Arbeit – Sie können Repositorys direkt für Ihr freigegebenes Arbeitsbereichsdateisystem klonen, Git auf Ihrer lokalen Arbeitsstation verwenden oder Git über eine CI/CD-Pipeline verwenden.

Wenn beim Übermitteln eines Auftrags an Azure Machine Learning die Quelldateien in einem lokalen Git-Repository gespeichert sind, werden Informationen über das Repository als Teil des Trainingsprozesses nachverfolgt.

Da Azure Machine Learning Informationen aus einem lokalen Git-Repository nachverfolgt, ist es nicht an ein spezifisches zentrales Repository gebunden. Ihr Repository kann von GitHub, GitLab, Bitbucket, Azure DevOps oder einem beliebigen anderen, mit Git kompatiblen Dienst geklont sein.

Tipp

Verwenden Sie Visual Studio Code zur Interaktion mit Git über eine grafische Benutzeroberfläche. Wie Sie mithilfe von Visual Studio Code eine Verbindung mit einer Azure Machine Learning Compute-Instanz herstellen, erfahren Sie unter Starten von in Azure Machine Learning integriertem Visual Studio Code (Vorschau).

Weitere Informationen zu Features der Visual Studio Code-Versionskontrolle finden Sie unter Verwenden der Versionskontrolle in VS Code und Arbeiten mit GitHub in VS Code.

Klonen von Git-Respositorys für das Arbeitsbereichsdateisystem

Azure Machine Learning bietet ein gemeinsames Dateisystem für alle Benutzer im Arbeitsbereich. Wenn Sie ein Git-Repository in dieser Dateifreigabe klonen möchten, sollten Sie eine Compute-Instanz erstellen und ein Terminal öffnen. Nachdem das Terminal geöffnet ist, haben Sie Zugriff auf einen vollständigen Git-Client und können über die Git-CLI-Oberfläche entsprechend Git klonen und mit Git arbeiten.

Es wird empfohlen, dass Sie das Repository in Ihr Benutzerverzeichnis klonen, damit andere keine Konflikte direkt in Ihrem Arbeitsbranch verursachen.

Tipp

Es gibt einen Leistungsunterschied zwischen dem Klonen in das lokale Dateisystem der Compute-Instanz oder dem Klonen in das bereitgestellte Dateisystem (als ~/cloudfiles/code-Verzeichnis bereitgestellt). Im Allgemeinen hat das Klonen des lokalen Dateisystems eine bessere Leistung als für das bereitgestellte Dateisystem. Das lokale Dateisystem geht jedoch verloren, wenn Sie die Compute-Instanz löschen und neu erstellen. Das bereitgestellte Dateisystem wird beibehalten, wenn Sie die Compute-Instanz löschen und neu erstellen.

Sie können ein beliebiges Git-Repository klonen, bei dem Sie sich authentifizieren können (GitHub, Azure Repos, BitBucket, usw.)

Weitere Informationen zum Klonen finden Sie im Leitfaden zum Verwenden der Git CLI.

Authentifizieren Ihres Git-Kontos mit SSH

Generieren eines neuen SSH-Schlüssels

  1. Öffnen Sie das Terminalfenster auf der Registerkarte Azure Machine Learning-Notebook.

  2. Fügen Sie den Text darunter ein, und setzen Sie dabei Ihre E-Mail-Adresse ein.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Dadurch wird ein neuer SSH-Schlüssel erstellt, wobei die bereitgestellte E-Mail als Bezeichnung verwendet wird.

> Generating public/private rsa key pair.
  1. Wenn Sie zur Eingabe einer Datei aufgefordert werden, in der der Schlüssel gespeichert werden soll, drücken Sie die EINGABETASTE. Damit wird der Standardspeicherort der Datei akzeptiert.

  2. Vergewissern Sie sich, dass der Standardspeicherort „/home/azureuser/.ssh“ lautet, und drücken Sie die EINGABETASTE. Geben Sie andernfalls den Speicherort „/home/azureuser/.ssh“ an.

Tipp

Stellen Sie sicher, dass der SSH-Schlüssel in „/home/azureuser/.ssh“ gespeichert wird. Diese Datei wird auf der Compute-Instanz gespeichert und ist nur für den Besitzer der Compute-Instanz zugänglich.

> Enter a file in which to save the key (/home/azureuser/.ssh/id_rsa): [Press enter]
  1. Geben Sie an der Eingabeaufforderung eine sichere Passphrase ein. Es wird empfohlen, dem SSH-Schlüssel eine Passphrase hinzuzufügen, um die Sicherheit zu erhöhen.
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]

Hinzufügen des öffentlichen Schlüssels zum Git-Konto

  1. Kopieren Sie in Ihrem Terminalfenster den Inhalt der Datei mit dem öffentlichen Schlüssel. Wenn Sie den Schlüssel umbenannt haben, ersetzen Sie „id_rsa.pub“ durch den Namen der Datei mit dem öffentlichen Schlüssel.
cat ~/.ssh/id_rsa.pub

Tipp

Kopieren und Einfügen in das Terminal

  • Windows: Drücken Sie Ctrl-Insert zum Kopieren und Ctrl-Shift-v oder Shift-Insert zum Einfügen.
  • Mac OS: Drücken Sie Cmd-c zum Kopieren und Cmd-v zum Einfügen.
  • FireFox/IE unterstützen die Berechtigungen für die Zwischenablage möglicherweise nicht ordnungsgemäß.
  1. Wählen Sie die SSH-Schlüsselausgabe aus, und kopieren Sie sie in die Zwischenablage.
  2. Führen Sie als nächstes die Schritte aus, um den SSH-Schlüssel Ihrem bevorzugten Kontotyp hinzuzufügen:

Klonen des Git-Repositorys mit SSH

  1. Kopieren Sie die URL des SSH-Git-Klons aus dem Git-Repository.

  2. Fügen Sie die URL in den git clone-Befehl unten ein, um die URL Ihres SSH-Git-Repositorys zu verwenden. Das sieht ungefähr wie folgt aus:

git clone git@example.com:GitUser/azureml-example.git
Cloning into 'azureml-example'...

Es wird eine Antwort wie die folgende angezeigt:

The authenticity of host 'example.com (192.30.255.112)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.

SSH zeigt möglicherweise den SSH-Fingerabdruck des Servers an und fordert Sie auf, ihn zu überprüfen. Sie sollten überprüfen, ob der angezeigte Fingerabdruck mit einem der Fingerabdrücke auf der Seite Öffentlicher SSH-Schlüssel übereinstimmt.

SSH zeigt diesen Fingerabdruck an, wenn es eine Verbindung mit einem unbekannten Host herstellt, um Sie vor Man-in-the-Middle-Angriffen zu schützen. Sobald Sie den Fingerabdruck des Hosts akzeptiert haben, werden Sie von SSH nicht mehr aufgefordert, es sei denn, der Fingerabdruck ändert sich.

  1. Wenn Sie gefragt werden, ob Sie das Herstellen der Verbindung fortsetzen möchten, geben Sie yes ein. Git wird das Repository klonen und den Remoteursprung einrichten, um für zukünftige Git-Befehle eine Verbindung mit SSH einzurichten.

Nachverfolgen von Code, der aus Git-Repositorys stammt

Wenn Sie einen Trainingsauftrag vom Python SDK oder der Machine Learning-CLI übermitteln, werden die zum Trainieren des Modells erforderlichen Dateien in Ihren Arbeitsbereich hochgeladen. Wenn der git-Befehl in Ihrer Entwicklungsumgebung verfügbar ist, wird er vom Uploadvorgang verwendet, um zu überprüfen, ob die Dateien in einem Git-Repository gespeichert sind. Ist dies der Fall, werden die Informationen aus Ihrem Git-Repository ebenfalls als Bestandteil des Trainingsauftrags hochgeladen. Diese Informationen sind in den folgenden Eigenschaften für den Trainingsauftrag gespeichert:

Eigenschaft Git-Befehl zum Abrufen des Werts BESCHREIBUNG
azureml.git.repository_uri git ls-remote --get-url Der URI, von dem Ihr Repository geklont wurde.
mlflow.source.git.repoURL git ls-remote --get-url Der URI, von dem Ihr Repository geklont wurde.
azureml.git.branch git symbolic-ref --short HEAD Der aktive Branch bei der Übermittlung des Auftrags.
mlflow.source.git.branch git symbolic-ref --short HEAD Der aktive Branch bei der Übermittlung des Auftrags.
azureml.git.commit git rev-parse HEAD Der Commithash des Codes, der für den Auftrag übermittelt wurde.
mlflow.source.git.commit git rev-parse HEAD Der Commithash des Codes, der für den Auftrag übermittelt wurde.
azureml.git.dirty git status --porcelain . True, wenn der Branch/Commit geändert wurde („dirty“), andernfalls false.

Diese Informationen werden für Aufträge gesendet, die einen Estimator, eine Machine Learning-Pipeline oder eine Skriptausführung verwenden.

Wenn Ihre Trainingsdateien nicht in einem Git-Repository in Ihrer Entwicklungsumgebung gespeichert sind oder der git-Befehl nicht verfügbar ist, werden keine Git-bezogenen Informationen nachverfolgt.

Tipp

Um zu überprüfen, ob der Git-Befehl in Ihrer Entwicklungsumgebung verfügbar ist, öffnen Sie eine Shellsitzung, eine Eingabeaufforderung, eine PowerShell oder eine andere Befehlszeilenschnittstelle, und geben Sie den folgenden Befehl ein:

git --version

Sofern installiert und im Pfad enthalten, erhalten Sie eine Antwort wie git version 2.4.1. Weitere Informationen zur Installation von Git in der Entwicklungsumgebung finden Sie auf der Git-Website.

Anzeigen der protokollierten Informationen

Die Git-Informationen sind in den Eigenschaften für einen Trainingsauftrag gespeichert. Sie können diese Informationen über das Azure-Portal oder das Python SDK anzeigen.

Azure-Portal

  1. Wählen Sie im Studioportal Ihren Arbeitsbereich aus.
  2. Wählen Sie Aufträge und dann eins Ihrer Experimente aus.
  3. Wählen Sie einen der Aufträge aus der Spalte Anzeigename aus.
  4. Wählen Sie Ausgaben und Protokolle aus, und erweitern Sie dann die Einträge logs und azureml. Wählen Sie den Link aus, der mit ###_azure beginnt.

Die protokollierten Informationen enthalten Text, der so ähnlich aussieht wie der folgende JSON-Code:

"properties": {
    "_azureml.ComputeTargetType": "batchai",
    "ContentSnapshotId": "5ca66406-cbac-4d7d-bc95-f5a51dd3e57e",
    "azureml.git.repository_uri": "git@github.com:azure/machinelearningnotebooks",
    "mlflow.source.git.repoURL": "git@github.com:azure/machinelearningnotebooks",
    "azureml.git.branch": "master",
    "mlflow.source.git.branch": "master",
    "azureml.git.commit": "4d2b93784676893f8e346d5f0b9fb894a9cf0742",
    "mlflow.source.git.commit": "4d2b93784676893f8e346d5f0b9fb894a9cf0742",
    "azureml.git.dirty": "True",
    "AzureML.DerivedImageName": "azureml/azureml_9d3568242c6bfef9631879915768deaf",
    "ProcessInfoFile": "azureml-logs/process_info.json",
    "ProcessStatusFile": "azureml-logs/process_status.json"
}

Eigenschaften anzeigen

Nach dem Übermitteln einer Trainingsausführung wird ein Job-Objekt zurückgegeben. Das properties-Attribut dieses Objekts enthält die protokollierten Git-Informationen. Beispielsweise ruft der folgende Code den Commithash ab:

GILT FÜR: Python SDK azure-ai-ml v2 (aktuell)

job.properties["azureml.git.commit"]

Nächste Schritte