现已发布!阅读关于 11 月新增功能和修复的内容。

微调模型

微调 AI 模型是一项常见实践,它允许您使用自定义数据集在具有 GPU 的计算环境中对预训练模型运行 **微调** 作业。AI Toolkit 目前支持在本地 GPU 机器或云端 GPU (Azure Container App) 上微调 SLM。

微调后的模型可以下载到本地,并使用 GPU 进行推理测试,或者量化后在本地 CPU 上运行。微调后的模型也可以部署到云环境中作为远程模型。

使用 VS Code 的 AI Toolkit (预览版) 在 Azure 上微调 AI 模型

VS Code 的 AI Toolkit 现在支持预配 Azure Container App,用于运行模型微调和托管推理终结点。

设置您的云环境

  1. 要在远程 Azure Container Apps 环境中运行模型微调和推理,请确保您的订阅具有足够的 GPU 容量。提交 支持票证 以请求您的应用程序所需的容量。 获取有关 GPU 容量的更多信息

  2. 如果您使用的是 HuggingFace 上的私有数据集,或者基础模型需要访问控制,请确保您拥有一个 HuggingFace 帐户生成访问令牌

  3. 如果您正在微调 Mistral 或 Llama,请在 HuggingFace 上接受 LICENSE。

  4. 在 VS Code 的 AI Toolkit 中启用远程微调和推理功能标志

    1. 选择 文件 -> 首选项 -> 设置 打开 VS Code 设置。
    2. 导航到 扩展 并选择 AI Toolkit
    3. 选择 “启用以在 Azure Container Apps 上运行微调和推理” 选项。

    AI Toolkit Settings

    1. 重新加载 VS Code 以使更改生效。

脚手架一个微调项目

  1. 在命令面板 (Command Palette) 中运行 AI Toolkit: Focus on Tools View (命令面板: ⇧⌘P (Windows, Linux Ctrl+Shift+P))
  2. 导航到 Fine-tuning 以访问模型目录。选择一个模型进行微调。为您的项目指定一个名称,并选择其在计算机上的位置。然后,点击 “配置项目” 按钮。 面板: 选择模型
  3. 项目配置
    1. 避免启用 “本地微调” 选项。
    2. Olive 配置设置将出现,并带有预设的默认值。请根据需要调整和填写这些配置。
    3. 继续 生成项目。此阶段利用 WSL 并涉及设置一个新的 Conda 环境,为包含 Dev Containers 的未来更新做准备。 面板: 配置模型
    4. 选择 “在工作区中重新启动窗口” 以打开您的微调项目。 面板: 生成项目
注意

该项目当前可以在 VS Code 的 AI Toolkit 中本地或远程运行。如果您在项目创建过程中选择 “本地微调”,它将仅在 WSL 中运行,不使用云资源。否则,项目将仅限于在远程 Azure Container App 环境中运行。

预配 Azure 资源

要开始,您需要预配 Azure 资源以进行远程微调。从命令面板查找并执行 AI Toolkit: Provision Azure Container Apps job for fine-tuning。在此过程中,系统将提示您选择 Azure 订阅和资源组。

Provision Fine-Tuning

通过输出通道中显示的链接监视预配进度。 预配进度

运行微调

要启动远程微调作业,请在命令面板中运行 AI Toolkit: Run fine-tuning 命令。

Run Fine-tuning

然后,扩展程序将执行以下操作

  1. 将您的工作区同步到 Azure Files。

  2. 使用 ./infra/fintuning.config.json 中指定的命令触发 Azure Container App 作业。

将使用 QLoRA 进行微调,并且微调过程将创建 LoRA 适配器供模型在推理时使用。

微调的结果将存储在 Azure Files 中。要探索 Azure 文件共享中的输出文件,您可以访问 Azure 门户,使用输出面板中提供的链接。或者,您可以直接访问 Azure 门户,找到名为 STORAGE_ACCOUNT_NAME(在 ./infra/fintuning.config.json 中定义)的存储帐户,以及名为 FILE_SHARE_NAME(在 ./infra/fintuning.config.json 中定义)的文件共享。

file-share

查看日志

微调作业启动后,您可以访问 Azure 门户查看系统和控制台日志。 Azure Portal (for logging)

或者,您也可以直接在 VSCode 的输出面板中查看控制台日志。

log-button

注意

作业可能需要几分钟才能启动。如果已有正在运行的作业,当前作业可能会排队等待稍后启动。

在 Azure 上查看和查询日志

触发微调作业后,您可以通过 VSCode 通知中的“在 Azure 门户中打开日志”按钮查看 Azure 上的日志。

或者,如果您已打开 Azure 门户,请在 Azure Container Apps 作业的“执行历史记录”面板中查找作业历史记录。

Job Execution History

有两种类型的日志:“控制台”和“系统”。

  • 控制台日志是您的应用程序中的消息,包括 stderrstdout 消息。这正是您在流式日志部分已经看到的内容。
  • 系统日志是 Azure Container Apps 服务中的消息,包括服务级别事件的状态。

要查看和查询您的日志,请选择“控制台”按钮,然后导航到 Log Analytics 页面,您可以在其中查看所有日志并编写查询。

Job Log Analytics

有关 Azure Container Apps 日志的更多信息,请参阅 Azure Container Apps 中的应用程序日志

在 VSCode 中查看流式日志

启动微调作业后,您还可以通过 VSCode 通知中的“在 VS Code 中显示流式日志”按钮在 Azure 上查看日志。

或者,您可以在命令面板中运行 AI Toolkit: Show the running fine-tuning job streaming logs 命令。

Streaming Log Command

正在运行的微调作业的流式日志将显示在输出面板中。

Streaming Log Output

注意

由于资源不足,作业可能会被排队。如果日志未显示,请等待一段时间,然后执行命令重新连接到流式日志。流式日志可能会超时断开连接。但是,可以通过再次执行命令来重新连接。

使用微调后的模型进行推理

在远程环境中训练好适配器后,使用简单的 Gradio 应用程序与模型进行交互。

Fine-tune complete

预配 Azure 资源

与微调过程类似,您需要通过从命令面板执行 AI Toolkit: Provision Azure Container Apps for inference 来设置远程推理的 Azure 资源。在此设置过程中,系统会要求您选择 Azure 订阅和资源组。

Provision Inference Resource

默认情况下,用于推理的订阅和资源组应与用于微调的订阅和资源组匹配。推理将使用相同的 Azure Container App 环境,并访问在微调过程中生成的 Azure Files 中的模型和模型适配器。

推理部署

如果您希望修改推理代码或重新加载推理模型,请执行 AI Toolkit: Deploy for inference 命令。这将把您最新的代码同步到 ACA 并重启副本。

Deploy for inference

部署成功完成后,模型现在可以通过此终结点进行评估。您可以通过选择 VSCode 通知中显示的“转到推理终结点”按钮来访问推理 API。或者,您可以在 ./infra/inference.config.json 和输出面板中的 ACA_APP_ENDPOINT 下找到 Web API 终结点。

App Endpoint

注意

推理终结点可能需要几分钟才能完全运行。

高级用法

微调项目组件

文件夹 内容
infra 包含远程操作所需的所有配置。
infra/provision/finetuning.parameters.json 包含用于预配微调 Azure 资源的 Bicep 模板的参数。
infra/provision/finetuning.bicep 包含用于预配微调 Azure 资源的模板。
infra/finetuning.config.json AI Toolkit: Provision Azure Container Apps job for fine-tuning 命令生成的配置文件。它用作其他远程命令面板的输入。

为 Azure Container Apps 中的微调配置机密

Azure Container App 机密提供了一种安全的方式来存储和管理 Azure Container Apps 中的敏感数据,例如 HuggingFace 令牌和 Weights & Biases API 密钥。使用 AI Toolkit 的命令面板,您可以将机密输入到已预配的 Azure 容器应用作业中(如存储在 ./finetuning.config.json 中)。这些机密随后被设置为所有容器中的**环境变量**。

步骤

  1. 在命令面板中,键入并选择 AI Toolkit: Add Azure Container Apps Job secret for fine-tuning

    Add secret

  2. 提供机密名称和值

    Input secret name

    Input secret

    例如,如果您使用的是需要 Hugging Face 访问控制的私有 HuggingFace 数据集或模型,请将您的 HuggingFace 令牌设置为环境变量 HF_TOKEN,以避免在 Hugging Face Hub 上手动登录。

设置好机密后,您现在可以在 Azure Container App 中使用它。该机密将设置为容器应用的环境变量。

配置微调的 Azure 资源预配

本指南将帮助您配置 AI Toolkit: Provision Azure Container Apps job for fine-tuning 命令。

您可以在 ./infra/provision/finetuning.parameters.json 文件中找到配置参数。以下是详细信息

参数 描述
defaultCommands 这是启动微调作业的默认命令。它可以在 ./infra/finetuning.config.json 中覆盖。
maximumInstanceCount 此参数设置 GPU 实例的最大容量。
timeout 此设置以秒为单位定义 Azure Container App 微调作业的超时时间。默认值为 10800,相当于 3 小时。如果 Azure Container App 作业达到此超时时间,微调过程将停止。但是,默认情况下会保存检查点,允许微调过程从最后一个检查点恢复,而不是在重新运行时从头开始。
location 这是预配 Azure 资源的地点。默认值与所选资源组的地点相同。
storageAccountName, fileShareName acaEnvironmentName, acaEnvironmentStorageName, acaJobName, acaLogAnalyticsName 这些参数用于命名要预配的 Azure 资源。您可以输入一个新的、未使用的资源名称来创建您自己的自定义命名资源,或者如果您愿意,可以输入一个已存在的 Azure 资源的名称。

使用现有的 Azure 资源

如果您有需要配置用于微调的现有 Azure 资源,可以在 ./infra/provision/finetuning.parameters.json 文件中指定它们的名称,然后从命令面板运行 AI Toolkit: Provision Azure Container Apps job for fine-tuning。这将更新您指定的资源并创建任何缺失的资源。

例如,如果您有一个现有的 Azure 容器环境,您的 ./infra/finetuning.parameters.json 应如下所示

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      ...
      "acaEnvironmentName": {
        "value": "<your-aca-env-name>"
      },
      "acaEnvironmentStorageName": {
        "value": null
      },
      ...
    }
  }

手动预配

如果您希望手动设置 Azure 资源,可以使用 ./infra/provision 文件夹中提供的 bicep 文件。如果您已经设置并配置了所有 Azure 资源而未使用 AI Toolkit 命令面板,您只需在 finetune.config.json 文件中输入资源名称即可。

例如

{
  "SUBSCRIPTION_ID": "<your-subscription-id>",
  "RESOURCE_GROUP_NAME": "<your-resource-group-name>",
  "STORAGE_ACCOUNT_NAME": "<your-storage-account-name>",
  "FILE_SHARE_NAME": "<your-file-share-name>",
  "ACA_JOB_NAME": "<your-aca-job-name>",
  "COMMANDS": [
    "cd /mount",
    "pip install huggingface-hub==0.22.2",
    "huggingface-cli download <your-model-name> --local-dir ./model-cache/<your-model-name> --local-dir-use-symlinks False",
    "pip install -r ./setup/requirements.txt",
    "python3 ./finetuning/invoke_olive.py && find models/ -print | grep adapter/adapter"
  ]
}

模板中包含的推理组件

文件夹 内容
infra 包含远程操作所需的所有配置。
infra/provision/inference.parameters.json 包含用于预配推理 Azure 资源的 Bicep 模板的参数。
infra/provision/inference.bicep 包含用于预配推理 Azure 资源的模板。
infra/inference.config.json AI Toolkit: Provision Azure Container Apps for inference 命令生成的配置文件。它用作其他远程命令面板的输入。

配置 Azure 资源预配

本指南将帮助您配置 AI Toolkit: Provision Azure Container Apps for inference 命令。

您可以在 ./infra/provision/inference.parameters.json 文件中找到配置参数。以下是详细信息

参数 描述
defaultCommands 这是启动 Web API 的命令。
maximumInstanceCount 此参数设置 GPU 实例的最大容量。
location 这是预配 Azure 资源的地点。默认值与所选资源组的地点相同。
storageAccountName, fileShareName acaEnvironmentName, acaEnvironmentStorageName, acaAppName, acaLogAnalyticsName 这些参数用于命名要预配的 Azure 资源。默认情况下,它们将与微调资源名称相同。您可以输入一个新的、未使用的资源名称来创建您自己的自定义命名资源,或者如果您愿意,可以输入一个已存在的 Azure 资源的名称。

使用现有的 Azure 资源

默认情况下,推理预配使用与微调相同的 Azure Container App 环境、存储帐户、Azure 文件共享和 Azure Log Analytics。一个单独的 Azure Container App 是专门为推理 API 创建的。

如果您在微调过程中自定义了 Azure 资源,或者想为推理使用您自己现有的 Azure 资源,请在 ./infra/inference.parameters.json 文件中指定它们的名称。然后,从命令面板运行 AI Toolkit: Provision Azure Container Apps for inference 命令。这将更新任何指定的资源并创建任何缺失的资源。

例如,如果您有一个现有的 Azure 容器环境,您的 ./infra/finetuning.parameters.json 应如下所示

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      ...
      "acaEnvironmentName": {
        "value": "<your-aca-env-name>"
      },
      "acaEnvironmentStorageName": {
        "value": null
      },
      ...
    }
  }

手动预配

如果您希望手动配置 Azure 资源,可以使用 ./infra/provision 文件夹中提供的 bicep 文件。如果您已经设置并配置了所有 Azure 资源而未使用 AI Toolkit 命令面板,您只需在 inference.config.json 文件中输入资源名称即可。

例如

{
  "SUBSCRIPTION_ID": "<your-subscription-id>",
  "RESOURCE_GROUP_NAME": "<your-resource-group-name>",
  "STORAGE_ACCOUNT_NAME": "<your-storage-account-name>",
  "FILE_SHARE_NAME": "<your-file-share-name>",
  "ACA_APP_NAME": "<your-aca-name>",
  "ACA_APP_ENDPOINT": "<your-aca-endpoint>"
}

您学到了什么

在本文中,您学习了如何

  • 设置 VS Code 的 AI Toolkit 以支持 Azure Container Apps 中的微调和推理。
  • 在 VS Code 的 AI Toolkit 中创建一个微调项目。
  • 配置微调工作流,包括数据集选择和训练参数。
  • 运行微调工作流,将预训练模型适配到您的特定数据集。
  • 查看微调过程的结果,包括指标和日志。
  • 使用示例 Notebook 进行模型推理和测试。
  • 导出并与他人共享微调项目。
  • 使用不同的数据集或训练参数重新评估模型。
  • 处理失败的作业并调整配置以重新运行。
  • 了解支持的模型及其微调要求。
  • 使用 VS Code 的 AI Toolkit 来管理微调项目,包括预配 Azure 资源、运行微调作业以及部署模型进行推理。
© . This site is unofficial and not affiliated with Microsoft.