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 相容服務複製存放庫。

提示

使用 Visual Studio Code 透過圖形化使用者介面與 Git 互動。 若要使用 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 筆記本] 索引標籤中開啟終端視窗

  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-vShift-Insert 貼上。
  • Mac 作業系統:Cmd-c 進行複製,Cmd-v 即可貼上。
  • FireFox/IE 可能無法正確支援剪貼簿權限。
  1. 選取 SSH 金鑰輸出,並將其複製至剪貼簿。
  2. 接下來,請遵循步驟,以將 SSH 金鑰新增至您慣用的帳戶類型:

使用 SSH 複製 Git 存放庫

  1. 從 Git 存放庫複製 SSH Git 複製 URL。

  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 將複製存放庫,並設定原始遠端來以 SSH 連線,以執行未來的 Git 命令。

追蹤來自 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 網站

檢視已記錄的資訊

Git 資訊儲存在定型作業的屬性中。 您可以使用 Azure 入口網站或 Python SDK 來檢視此資訊。

Azure 入口網站

  1. 工作室入口網站中,選取您的工作區。
  2. 選取 [作業],然後選取您的其中一個實驗。
  3. 從 [顯示名稱] 資料行選取其中一個作業。
  4. 選取 [輸出 + 記錄],然後展開 [logs] 和 [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"]

下一步