Azure 机器学习的 Git 集成

Git 是一种常用的版本控制系统,可用于共享和协作处理项目。

Azure 机器学习完全支持用于跟踪工作的 Git 存储库 - 你可以将存储库直接克隆到共享工作区文件系统上,在本地工作站上使用 Git,或者从 CI/CD 管道使用 Git。

在向 Azure 机器学习提交作业时,如果源文件存储在本地 git 存储库中,那么系统会将有关存储库的信息作为训练过程的一部分进行跟踪。

由于 Azure 机器学习会跟踪来自本地 git 存储库的信息,因此它不会绑定到任何特定的中心存储库。 可以从 GitHub、GitLab、Bitbucket、Azure DevOps 或任何其他与 git 兼容的服务克隆存储库。

提示

使用 Visual Studio Code 通过图形用户界面与 Git 交互。 若要使用 Visual Studio Code 连接到 Azure 机器学习远程计算实例,请参阅启动与 Azure 机器学习集成的 Visual Studio Code(预览版)

有关 Visual Studio Code 版本控制功能的详细信息,请参阅使用 VS Code 中的版本控制在 VS Code 中使用 GitHub

将 Git 存储库克隆到你的工作区文件系统

Azure 机器学习为工作区中的所有用户提供了一个共享文件系统。 要将 Git 存储库克隆到此文件共享中,建议创建一个计算实例并打开一个终端。 打开终端后,你可以访问完整的 Git 客户端,并可以通过 Git CLI 体验来克隆和使用 Git。

我们建议你将存储库克隆到你的用户目录中,避免与其他人直接在你的工作分支上发生冲突。

提示

克隆到计算实例的本地文件系统与克隆到装载的文件系统(装载为 ~/cloudfiles/code 目录)之间存在性能差异。 通常,与克隆到装载的文件系统相比,克隆到本地文件系统性能更好。 但是,如果删除并重新创建计算实例,本地文件系统会丢失。 如果删除并重新创建计算实例,装载的文件系统则会保留。

你可以克隆你能够向其证明身份的任何 Git 存储库(GitHub、Azure Repos、BitBucket 等)

有关克隆的详细信息,请参阅如何使用 Git CLI 页面上的指南。

通过 SSH 对 Git 帐户进行身份验证

生成新的 SSH 密钥

  1. 在 Azure 机器学习笔记本选项卡中打开终端窗口

  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 OS:使用 Cmd-c 复制,使用 Cmd-v 粘贴。
  • FireFox/IE 可能不会正确支持剪贴板权限。
  1. 选择 SSH 密钥输出并将其复制到剪贴板。
  2. 接下来,按照步骤将 SSH 密钥添加到首选帐户类型:

通过 SSH 克隆 Git 存储库

  1. 从 Git 存储库中复制 SSH Git 克隆 URL。

  2. 将 URL 粘贴到下面的 git clone 命令中,以使用 SSH Git 存储库 URL。 该 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 或机器学习 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 命令在开发环境中是否可用,请打开 shell 会话、命令提示符、PowerShell 或其他命令行接口,并键入以下命令:

git --version

如果已安装且在路径中,则会收到类似于 git version 2.4.1 的响应。 有关在开发环境中安装 git 的详细信息,请参阅 Git 网站

查看记录的信息

Git 信息存储在训练作业的属性中。 可以使用 Azure 门户或 Python SDK 查看此信息。

Azure 门户

  1. 工作室门户中,选择你的工作区。
  2. 选择“作业”,然后选择一个试验。
  3. 从“显示名称”列中选择一个作业。
  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"]

后续步骤