Azure Machine Learning との Git 統合

Git は、プロジェクトでの共有と共同作業を可能にする、一般的なバージョン管理システムです。

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

ジョブを Azure Machine Learning に送信するとき、ソース ファイルがローカル 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 バージョン コントロール機能の詳細については、「VS Code でのバージョン管理の使用」および「VS Code での GitHub の操作」を参照してください。

Git リポジトリをワークスペース ファイル システムにクローンする

Azure Machine Learning では、ワークスペース内のすべてのユーザーに共有ファイル システムが提供されます。 このファイル共有に Git リポジトリをクローンするには、コンピューティング インスタンスを作成して、ターミナルを開くことをお勧めします。 ターミナルを開くと、完全な Git クライアントにアクセスできるようになり、Git CLI エクスペリエンスを使用して Git のクローンや操作を行うことができます。

作業中のブランチに他のユーザーが直接干渉しないように、リポジトリを自分のユーザー ディレクトリにクローンすることをお勧めします。

ヒント

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

認証可能なすべての Git リポジトリ (GitHub、Azure Repos、BitBucket など) をクローンできます。

クローンの詳細については、Git CLI の使用方法に関するガイドを参照してください。

SSH を使用して Git アカウントを認証する

新しい SSH キーを生成する

  1. Azure Machine Learning の [Notebook] タブでターミナル ウィンドウを開きます。

  2. 次のテキストを自分のメール アドレスに置き換えて貼り付けます。

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

これにより、指定したメール アドレスをラベルとして使う新しい SSH キーが作成されます。

> Generating public/private rsa key pair.
  1. キーを保存するファイルを入力するように求められたら、Enter キーを押します。 これにより、ファイルの既定の場所が受け入れられます。

  2. 既定の場所が "/home/azureuser/.ssh" であることを確認し、Enter キーを押します。 または、場所 "/home/azureuser/.ssh" を指定します。

ヒント

SSH キーが "/home/azureuser/.ssh" に保存されることを確認します。 このファイルは、コンピューティング インスタンスに保存されますが、コンピューティング インスタンスの所有者のみがアクセスできます。

> Enter a file in which to save the key (/home/azureuser/.ssh/id_rsa): [Press enter]
  1. プロンプトが表示されたら、セキュアなパスフレーズを入力します。 セキュリティを強化するため、SSH キーにパスフレーズを追加することをお勧めします。
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]

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

  1. ターミナル ウィンドウで、公開キー ファイルの内容をコピーします。 キーの名前を変更した場合は、id_rsa.pub を公開キーのファイル名に置き換えます。
cat ~/.ssh/id_rsa.pub

ヒント

ターミナルでのコピーと貼り付け

  • Windows: コピーの場合は Ctrl-Insert、貼り付けの場合は Ctrl-Shift-v または Shift-Insert を使用します。
  • Mac OS: コピーの場合は Cmd-c、貼り付けの場合は Cmd-v を使用します。
  • Firefox や IE ではクリップボードのアクセス許可が正しくサポートされない場合があります。
  1. SSH キーの出力を選択してクリップボードにコピーします。
  2. 次に、次の手順に従って、SSH キーを任意のアカウントの種類に追加します。

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

  1. SSH Git クローン URL を Git リポジトリからコピーします。

  2. URL を以下の git clone コマンドに貼り付け、SSH Git リポジトリ URL を使用できるようにします。 これは、次のような見た目になります。

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

次のような応答が表示されます。

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 では、サーバーの SSH フィンガープリントが表示され、確認を求めるメッセージが表示される場合があります。 表示されているフィンガープリントが [SSH 公開キー] ページのいずれかのフィンガープリントと一致していることを確認する必要があります。

SSH は、不明なホストに接続するときにこのフィンガープリントを表示して、中間者攻撃から保護します。 ホストのフィンガープリントを受け入れると、フィンガープリントが変更されない限り、SSH によって再度メッセージが表示されることはありません。

  1. 接続を続行するかどうかを確認するメッセージが表示されたら、「yes」と入力します。 Git はリポジトリを複製し、以降の Git コマンドで SSH と接続するように元のリモートを設定します。

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

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

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

この情報は、エスティメーター、機械学習パイプライン、またはスクリプト実行を使うジョブのために送信されます。

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

ヒント

開発環境で git コマンドが使用可能かどうかを確認するには、シェル セッション、コマンド プロンプト、PowerShell、またはその他のコマンド ライン インターフェイスを開き、次のコマンドを入力します。

git --version

インストールされ、パスに指定されている場合は、git version 2.4.1 のような応答が返されます。 開発環境に git をインストールする方法の詳細については、Git Web サイトを参照してください。

ログに記録された情報を表示する

Git 情報は、トレーニング ジョブのプロパティに格納されます。 この情報は、Azure portal または Python SDK を使用して表示できます。

Azure portal

  1. Studio ポータルで、ワークスペースを選択します。
  2. [ジョブ] を選び、実験を 1 つ選びます。
  3. [表示名] の列からジョブを 1 つ選びます。
  4. [出力とログ] を選択し、 [ログ] エントリと [azureml] エントリを展開します。 ###_azure で始まるリンクを選択します。

次の JSON のようなテキストを含む情報が記録されています。

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

プロパティの表示

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

適用対象: Python SDK azure-ai-ml v2 (現行)

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

次の手順