Freigeben über


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. In diesem Artikel erfahren Sie, wie Azure Machine Learning in ein lokales Git-Repository integriert werden kann, um Informationen zum Repository, Branch und aktuellen Commit als Teil eines Trainingsauftrags nachzuverfolgen.

Git-Repositorys werden von Azure Machine Learning zum Nachverfolgen der Arbeit vollständig unterstützt. Sie können Repositorys direkt für Ihr freigegebenes Arbeitsbereichsdateisystem klonen, Git auf Ihrer lokalen Arbeitsstation verwenden oder Git über eine CI/CD-Pipeline (Continuous Integration/Continuous Deployment) verwenden.

Wenn Sie einen Azure Machine Learning-Trainingsauftrag übermitteln, der Quelldateien aus einem lokalen Git-Repository enthält, werden Informationen zum Repository als Teil des Trainingsauftrags nachverfolgt. Da die Informationen aus dem lokalen Git-Repository stammen, sind sie nicht an ein spezifisches zentrales Repository gebunden. Ihr Repository kann über einen mit Git kompatiblen Dienst wie GitHub, GitLab, Bitbucket oder Azure DevOps geklont werden.

Tipp

Sie können Visual Studio Code zur Interaktion mit Git über eine grafische Benutzeroberfläche verwenden. Wie Sie mithilfe von Visual Studio Code eine Verbindung mit einer Azure Machine Learning-Remotecompute-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 Visual Studio Code und Arbeiten mit GitHub in Visual Studio Code.

Git-Repositorys einem Arbeitsbereichsdateisystem

Azure Machine Learning bietet ein gemeinsames Dateisystem für alle Benutzer in einem Arbeitsbereich. Am einfachsten lässt sich ein Git-Repository in dieser Dateifreigabe klonen, indem Sie eine Compute-Instanz erstellen und ein Terminal öffnen. Im Terminal haben Sie Zugriff auf einen vollständigen Git-Client und können über die Git CLI Git klonen und mit Git arbeiten. Weitere Informationen finden Sie unter Git CLI.

Sie können ein beliebiges Git-Repository klonen, bei dem Sie sich authentifizieren können, etwa ein GitHub-, Azure Repos- oder BitBucket-Repository. Am besten klonen Sie das Repository in Ihrem Benutzerverzeichnis, damit andere Benutzer keine Konflikte direkt in Ihrem Arbeitsbranch verursachen.

Es gibt einige Unterschiede zwischen dem Klonen in das lokale Dateisystem der Compute-Instanz und dem Klonen in das bereitgestellte Dateisystem, das als Verzeichnis ~/cloudfiles/code/ bereitgestellt ist. Im Allgemeinen bietet das Klonen des lokalen Dateisystems eine bessere Leistung als das Klonen im bereitgestellten Dateisystem. Wenn Sie die Compute-Instanz jedoch löschen und neu erstellen, geht das lokale Dateisystem verloren, während das bereitgestellte freigegebene Dateisystem beibehalten wird.

Klonen eines Git-Repository mit SSH

Sie können ein Repository mithilfe des SSH-Protokolls (Secure Shell) klonen. Zur Verwendung von SSH müssen Sie Ihr Git-Konto mithilfe eines SSH-Schlüssels bei SSH authentifizieren.

Generieren und Speichern eines neuen SSH-Schlüssels

Um einen neuen SSH-Schlüssel zu generieren, können Sie zur Seite Notebook in Azure Machine Learning Studio wechseln, ein Terminal öffnen und den folgenden Befehl ausführen. Fügen Sie dabei Ihre E-Mail-Adresse ein:

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

Der Befehl gibt die folgende Ausgabe zurück:

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

Stellen Sie sicher, dass der Speicherort in der vorherigen Ausgabe /home/azureuser/.ssh lautet, oder ändern Sie sie an diesen Speicherort, und drücken Sie dann die EINGABETASTE.

Am besten fügen Sie dem SSH-Schlüssel eine Passphrase hinzu, um die Sicherheit zu erhöhen. Geben Sie an den folgenden Eingabeaufforderungen eine sichere Passphrase ein:

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

Wenn Sie die EINGABETASTE drücken, generiert der Befehl ssh-keygen einen neuen SSH-Schlüssel mit der angegebenen E-Mail-Adresse als Bezeichnung. Die Schlüsseldatei wird in der Compute-Instanz gespeichert und ist nur für den Besitzer der Compute-Instanz zugänglich.

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

Sie müssen Ihrem Git-Konto Ihren öffentlichen SSH-Schlüssel hinzufügen. Führen Sie zum Abrufen des Schlüssels den folgenden Befehl im Terminalfenster aus. Wenn Ihre Schlüsseldatei einen anderen Namen hat, ersetzen Sie id_ed25519.pub durch den Namen der Datei mit dem öffentlichen Schlüssel.

cat ~/.ssh/id_ed25519.pub

Der Befehl zeigt den Inhalt der Datei mit dem öffentlichen Schlüssel an. Kopieren Sie die Ausgabe.

Tipp

Verwenden Sie zum Kopieren und Einfügen im Terminalfenster je nach Betriebssystem die folgenden Tastenkombinationen:

  • Windows: STRG+C oder STRG+EINFÜGEN zum Kopieren, STRG+V oder STRG+UMSCHALT+V zum Einfügen
  • MacOS: CMD+C zum Kopieren und CMD+V zum Einfügen

In einigen Browsern werden Berechtigungen für die Zwischenablage möglicherweise nicht ordnungsgemäß unterstützt.

Fügen Sie je nach Git-Dienst den SSH-Schlüssel zu Ihrem Git-Konto hinzu, indem Sie die folgenden Anweisungen verwenden:

Klonen des Git-Repositorys mit SSH

Kopieren Sie zum Klonen eines Git-Repositorys die URL des SSH-Git-Klons aus dem Git-Repository. Führen Sie in Ihrem Terminal git clone gefolgt von der URLs des SSH-Git-Klons aus. Zum Beispiel:

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

SSH zeigt möglicherweise den SSH-Fingerabdruck des Servers an und fordert Sie auf, ihn zu überprüfen, wie im folgenden Beispiel dargestellt:

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 zeigt diesen Fingerabdruck an, wenn es eine Verbindung mit einem unbekannten Host herstellt, um Sie vor Man-in-the-Middle-Angriffen zu schützen. Sie sollten überprüfen, ob der Fingerabdruck mit einem der Fingerabdrücke auf der Seite mit den öffentlichen SSH-Schlüsseln übereinstimmt. Sobald Sie den Fingerabdruck des Hosts akzeptiert haben, werden Sie von SSH nicht mehr aufgefordert, es sei denn, der Fingerabdruck ändert sich.

SSH zeigt eine Antwort ähnlich wie im folgenden Beispiel an:

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

Nachdem Sie Ihre Passphrase eingegeben haben, klont Git das Repository und richtet den Remoteursprung ein, 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, überprüft der Uploadvorgang, ob die Quelldateien in einem Git-Repository gespeichert sind.

Falls ja, lädt der Prozess Informationen zum Git-Repository, zum Branch und zum aktuellen Commit als Teil des Trainingsauftrags hoch. Die Informationen werden in den folgenden Eigenschaften des Trainingsauftrags für Aufträge gespeichert, die einen Estimator, eine Machine Learning-Pipeline oder eine Skriptausführung verwenden.

Eigenschaft Git-Befehl zum Abrufen des Werts Beschreibung
azureml.git.repository_uri oder mlflow.source.git.repoURL git ls-remote --get-url Der URI, von dem das Repository geklont wurde
azureml.git.branch oder mlflow.source.git.branch git symbolic-ref --short HEAD Der aktive Branch bei der Übermittlung des Auftrags.
azureml.git.commit oder 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 oder Commit geändert wurde („dirty“), andernfalls false

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

Tipp

Um zu überprüfen, ob der Befehl git in Ihrer Entwicklungsumgebung verfügbar ist, führen Sie den Befehl git --version in einer Befehlszeilenschnittstelle aus. Wenn Git installiert und im Pfad enthalten ist, erhalten Sie eine Antwort wie git version 2.43.0. Informationen zur Installation von Git in der Entwicklungsumgebung finden Sie auf der Git-Website.

Anzeigen von Git-Informationen

Die Git-Informationen sind als JSON-Code in den Eigenschaften für einen Trainingsauftrag gespeichert. Die protokollierten Git-Informationen können die folgenden Eigenschaften enthalten:

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

Sie können diese Informationen mithilfe des Azure-Portals, des Python SDK oder der Azure CLI anzeigen.

Azure-Portal

Wählen Sie Ihrem Arbeitsbereich in Azure Machine Learning Studio auf der Seite Aufträge Ihren Auftrag aus. Wählen Sie im Abschnitt Eigenschaften auf der Seite Übersicht des Auftrags unter Alle Eigenschaften anzeigen die Option JSON-Rohdaten aus.

Suchen Sie im JSON-Code nach den Git-Eigenschaften, z. B.:

    "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

Nach dem Übermitteln einer Trainingsausführung wird ein Objekt vom Typ Job zurückgegeben. Das properties-Attribut dieses Objekts enthält die protokollierten Git-Informationen. Beispielsweise können Sie den folgenden Befehl ausführen, um den Commithash abzurufen:

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

Azure-CLI V2

Sie können den Befehl az ml job show mit dem Argument --query ausführen, um die Git-Informationen anzuzeigen. Die folgende Abfrage ruft beispielsweise den Eigenschaftswert mlflow.source.git.commit ab:

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