次の方法で共有


Azure Machine Learning との Git 統合

Git は、プロジェクトでの共有と共同作業を可能にする、一般的なバージョン管理システムです。 この記事では、Azure Machine Learning をローカルの Git リポジトリと統合して、トレーニング ジョブの一環として、リポジトリ、ブランチ、現在のコミット情報を追跡する方法について説明します。

Azure Machine Learning では、作業を追跡するために Git リポジトリが完全にサポートされています。 自分の共有ワークスペース ファイル システムにリポジトリを直接クローンしたり、ローカル ワークステーションで Git を使用したり、継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインから Git を使用したりできます。

ローカル Git リポジトリのソース ファイルを含む Azure Machine Learning トレーニング ジョブを送信すると、リポジトリに関する情報がトレーニング ジョブの一部として追跡されます。 情報はローカル Git リポジトリから取得されるため、特定の中央リポジトリには関連付けられません。 リポジトリは、GitHub、GitLab、Bitbucket、Azure DevOps などの任意の Git 互換サービスからクローンできます。

ヒント

グラフィカル ユーザーインターフェイスを使用して Git と対話するには、Visual Studio Code を使用できます。 Visual Studio Code を使用して Azure Machine Learning リモート コンピューティング インスタンスに接続するには、「Azure Machine Learning と統合された Visual Studio Code を起動する (プレビュー)」を参照してください。

Visual Studio Code のバージョン コントロール機能の詳細については、Visual Studio Code でのバージョン コントロールの使用に関する記事と Visual Studio Code での GitHub の操作に関する記事を参照してください。

ワークスペース ファイル システム内の Git リポジトリ

Azure Machine Learning では、ワークスペース内のすべてのユーザーに共有ファイル システムが提供されます。 Git リポジトリをこのファイル共有にクローンする最善の方法は、コンピューティング インスタンスを作成し、ターミナルを開くことです。 ターミナルでは、完全な Git クライアントにアクセスでき、Git CLI を使用して Git をクローンして操作できます。 詳細については、Git CLI を参照してください。

GitHub、Azure Repos、BitBucket リポジトリなど、認証可能なすべての Git リポジトリをクローンできます。 作業中のブランチに他のユーザーが直接干渉しないように、リポジトリは自分のユーザー ディレクトリにクローンすることをお勧めします。

コンピューティング インスタンスのローカル ファイル システムへのクローンと、~/cloudfiles/code/ ディレクトリとしてマウントされた共有ファイル システムへのクローンには、いくつかの違いがあります。 一般に、ローカル ファイル システムへのクローンは、マウントされたファイル システムへのクローンよりもパフォーマンスが高くなります。 ただし、コンピューティング インスタンスを削除して再作成した場合、マウントされた共有ファイル システムは保持されますが、ローカル ファイル システムは失われます。

SSH を使用して Git リポジトリをクローンする

Secure Shell (SSH) プロトコルを使用してリポジトリをクローンできます。 SSH を使用するには、SSH キーを使用して SSH で Git アカウントを認証する必要があります。

新しい SSH キーを生成して保存する

新しい SSH キーを生成するには、Azure Machine Learning スタジオの [ノートブック] ページに移動し、ターミナルを開き、次のコマンドを実行してメール アドレスを置き換えます。

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

このコマンドを実行すると、次の出力が返されます。

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

前述の出力の場所が /home/azureuser/.ssh であることを確認するか、その場所に変更して Enter キーを押します。

セキュリティを強化するため、SSH キーにパスフレーズを追加することをお勧めします。 次のプロンプトで、セキュリティで保護されたパスフレーズを入力します。

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

Enter キーを押すと、ssh-keygen コマンドによって、指定されたメール アドレスをラベルとして持つ新しい SSH キーが生成されます。 キー ファイルはコンピューティング インスタンスに保存され、コンピューティング インスタンスの所有者のみがアクセスできます。

Git アカウントに公開キーを追加する

Git アカウントに公開 SSH キーを追加する必要があります。 キーを取得するには、ターミナル ウィンドウで次のコマンドを実行します。 キー ファイルの名前が異なる場合は、id_ed25519.pub を自分の公開キー ファイル名に置き換えます。

cat ~/.ssh/id_ed25519.pub

このコマンドは、公開キー ファイルの内容を表示します。 出力をコピーします。

ヒント

ターミナル ウィンドウにコピーして貼り付けるには、オペレーティング システムに応じて次のキーボード ショートカットを使用します。

  • Windows: コピーする場合は Ctrl + C または Ctrl + Insert、貼り付ける場合は Ctrl + V または Ctrl + Shift + V。
  • macOS: コピーする場合は Cmd + C、貼り付ける場合は Cmd + V。

一部のブラウザーではクリップボードのアクセス許可が正しくサポートされない場合があります。

Git サービスに応じて、次の手順を使用して SSH キーを Git アカウントに追加します。

SSH を使用して Git リポジトリをクローンする

Git リポジトリをクローンするには、リポジトリから SSH Git クローン URL をコピーします。 ターミナルで、SSH Git クローン URL を指定して git clone を実行します。 次に例を示します。

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

次の例のように、SSH によってサーバーの SSH フィンガープリントが表示され、確認を求められる場合があります。

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 は、不明なホストに接続するときにこのフィンガープリントを表示して、中間者攻撃から保護します。 そのフィンガープリントが SSH 公開キー ページのいずれかのフィンガープリントに一致していることを確認する必要があります。 ホストのフィンガープリントを受け入れると、フィンガープリントが変更されない限り、SSH によって再度メッセージが表示されることはありません。

次の例のような応答が SSH によって表示されます。

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

パスフレーズを入力すると、Git によってリポジトリがクローンされ、以降の Git コマンドで SSH で接続するように元のリモートが設定されます。

Git リポジトリから取得したコードを追跡する

Python SDK または Machine Learning CLI からトレーニング ジョブを送信すると、モデルのトレーニングに必要なファイルがワークスペースにアップロードされます。 ご利用の開発環境で git コマンドが使用可能な場合、アップロード プロセスでは、ソース ファイルが Git リポジトリに格納されているかどうかが確認されます。

該当する場合、プロセスは Git リポジトリ、ブランチ、および現在のコミット情報をトレーニング ジョブの一部としてアップロードします。 この情報は、エスティメーター、機械学習パイプライン、またはスクリプト実行を使用するジョブの次のトレーニング ジョブ プロパティに格納されます。

プロパティ 値を取得するための Git コマンド 説明
azureml.git.repository_uri または mlflow.source.git.repoURL git ls-remote --get-url そのリポジトリのクローン元の URI。
azureml.git.branch または mlflow.source.git.branch git symbolic-ref --short HEAD ジョブが送信されたときのアクティブなブランチ。
azureml.git.commit または mlflow.source.git.commit git rev-parse HEAD ジョブが送信されたコードのコミット ハッシュ。
azureml.git.dirty git status --porcelain . 分岐またはコミットがダーティである場合は True、そうでない場合は false

開発環境で git コマンドが使用できない場合や、トレーニング ファイルが Git リポジトリに存在しない場合、Git 関連の情報は追跡されません。

ヒント

git コマンドが開発環境で使用できるかどうかを確認するには、コマンド ライン インターフェイスで git --version コマンドを実行します。 Git がインストールされ、パスに含まれる場合は、git version 2.43.0 のような応答を受け取ります。 開発環境に Git をインストールする方法の詳細については、Git Web サイトを参照してください。

Git 情報を表示する

Git 情報は、トレーニング ジョブのプロパティに JSON コードとして格納されます。 ログに記録される Git 情報には、次のプロパティを含めることができます。

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

この情報は、Azure portal、Python SDK、または Azure CLI を使用して表示できます。

Azure portal

Azure Machine Learning スタジオのワークスペースで、[ジョブ] ページからジョブを選択します。 ジョブの [概要] ページの [プロパティ] セクションで、[すべてのプロパティを表示] の下にある [生 JSON] を選択します。

JSON で Git プロパティを探します。次に例を示します。

    "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

トレーニング実行を送信すると、Job オブジェクトが返されます。 このオブジェクトの properties 属性には、ログに記録された Git 情報が含まれています。 たとえば、次のコマンドを実行してコミット ハッシュを取得できます。

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

Azure CLI V2

--query 引数を指定して az ml job show コマンドを実行すると、Git 情報を表示できます。 たとえば、次のクエリでは、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"