分享方式:


Azure Machine Learning 的 Git 整合

Git 是一種熱門的版本控制系統,可讓您在專案上共用及共同作業。 本文會說明 Azure Machine Learning 如何與本機 Git 存放庫整合,以在定型作業中追蹤存放庫、分支和目前的認可資訊。

Azure Machine Learning 完全支援 Git 存放庫進行追蹤工作。 您可以直接將存放庫複製到共用工作區檔案系統、在本機工作站使用 Git,或從持續整合與持續部署 (CI/CD) 管線使用 Git。

提交的 Azure Machine Learning 定型作業具有本機 Git 存放庫的來源檔案時,在定型作業中會追蹤存放庫的資訊。 由於該資訊來自本機 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 版本控制功能的詳細資訊,請參閱在 Visual Studio Code 中使用版本控制在 Visual Studio Code 中使用 GitHub

工作區檔案系統中的 Git 存放庫

Azure Machine Learning 可為工作區的所有使用者提供共用檔案系統。 將 Git 存放庫複製到此檔案共用的最佳方法是建立計算執行個體和開啟終端機。 在終端機中,您可以存取完整的 Git 用戶端,並且可以使用 Git CLI 來複製及使用 Git。 如需詳細資訊,請參閱 Git CLI \(英文\)。

您可以驗證的任何 Git 存放庫都可以複製,例如 GitHub、Azure Repos 或 BitBucket 存放庫。 最好將存放庫複製到您的使用者目錄,以免其他使用者在您的工作分支上直接發生衝突。

複製到計算執行個體的本機檔案系統或複製到掛接為 ~/cloudfiles/code/ 目錄的共用檔案系統之間有差異。 一般而言,複製到本機檔案系統會比複製到掛接的檔案系統提供更佳效能。 不過,如果您刪除並重新建立計算執行個體,本機檔案系統會遺失,而掛接的共用檔案系統則會保留。

使用 SSH 複製 Git 存放庫

您可以使用安全殼層 (SSH) 通訊協定來複製存放庫。 若要使用 SSH,您需要使用 SSH 金鑰透過 SSH 驗證 Git 帳戶。

產生並儲存新的 SSH 金鑰

若要產生新的 SSH 金鑰,您可以移至 Azure Machine Learning 工作室 Notebook 頁面、開啟終端機,然後執行下列命令,取代您的電子郵件位址。

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 帳戶

您需要將公開的 SSH 金鑰新增至您的 Git 帳戶。 若要取得金鑰,請在終端機視窗中執行下列命令。 如果您的金鑰檔案具有不同的名稱,請以公開金鑰檔案名稱取代 id_ed25519.pub

cat ~/.ssh/id_ed25519.pub

該命令會顯示公開金鑰檔案的內容。 複製輸出。

提示

若要在終端機視窗中複製並貼上,請使用這些鍵盤快速鍵 (實際情況依您的作業系統而定):

  • Windows:使用 Ctrl+C 或 Ctrl+Insert 進行複製,使用 Ctrl+V 或 Ctrl+Shift+V 進行貼上。
  • MacOS:使用 Cmd+C 進行複製,並使用 Cmd+V 進行貼上。

部分瀏覽器可能無法正確支援剪貼簿權限。

使用下列指示將 SSH 金鑰新增至 Git 帳戶 (實際情況依您的 Git 服務而定):

使用 SSH 複製 Git 存放庫

若要複製 Git 存放庫,請從存放庫複製 SSH git clone URL。 在您的終端機中,執行 git clone,後面接著 SSH git clone URL。 例如:

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

追蹤來自 Git 存放庫的程式碼

當您從 Python SDK 或 Machine Learning CLI 提交定型作業時,定型模型所需的檔案會上傳至您的工作區。 如果開發環境中可使用 git 命令,上傳流程會檢查來源檔案是否儲存在 Git 存放庫中。

如果是,該流程會將 Git 存放庫、分支和目前的認可資訊上傳為定型作業的一部分。 此資訊會儲存在下列定型作業屬性中,以用於使用估算器、機器學習管線或指令碼執行的作業。

屬性 用於取得值的 Git 命令 描述
azureml.git.repository_urimlflow.source.git.repoURL git ls-remote --get-url 複製該存放庫的來源 URI。
azureml.git.branchmlflow.source.git.branch git symbolic-ref --short HEAD 提交作業時的作用中分支。
azureml.git.commitmlflow.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 網站

檢視 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 入口網站、Python SDK 或 Azure CLI 來檢視此資訊。

Azure 入口網站

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