在 VS Code 中试用

微调模型

微调 AI 模型是一种常见做法,可让你使用自定义数据集在具有 GPU 的计算环境中对预训练模型运行 微调 作业。AI Toolkit 目前支持在本地计算机(带有 GPU)或云中(Azure 容器应用,带有 GPU)微调 SLM。

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

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

AI Toolkit for VS Code 现在支持预配 Azure 容器应用,以便在云中运行模型微调和托管推理终结点。

设置云环境

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

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

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

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

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

    AI Toolkit Settings

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

搭建微调项目

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

该项目目前可在 AI Toolkit for VS Code 中本地或远程工作。如果在创建项目时选择 “本地微调”,它将仅在 WSL 中运行,不使用云资源。否则,该项目将仅限于在远程 Azure 容器应用环境中运行。

预配 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 文件同步。

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

将使用 QLoRA 进行微调,微调过程将为模型创建 LoRA 适配器,以便在推理期间使用。

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

file-share

查看日志

微调作业启动后,你可以访问 Azure 门户查看系统日志和控制台日志。

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

log-button

注意

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

在 Azure 上查看和查询日志

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

或者,如果你已经打开了 Azure 门户,可以在“执行历史记录”面板中查找 Azure 容器应用作业的作业历史记录。

Job Execution History

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

  • 控制台日志是来自你应用的消息,包括 stderrstdout 消息。这与你在流式日志部分已经看到的内容相同。
  • 系统日志是来自 Azure 容器应用服务的消息,包括服务级事件的状态。

若要查看和查询日志,请选择“控制台”按钮并导航到日志分析页面,在该页面上你可以查看所有日志并编写查询。

Job Log Analytics

有关 Azure 容器应用日志的更多信息,请参阅Azure 容器应用中的应用程序日志记录

在 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 容器应用环境,并访问微调步骤期间生成的存储在 Azure 文件中的模型和模型适配器。

推理部署

如果你想修改推理代码或重新加载推理模型,请执行 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 保存 bicep 模板的参数,用于为微调预配 Azure 资源。
infra/provision/finetuning.bicep 包含用于为微调预配 Azure 资源的模板。
infra/finetuning.config.json 配置文件,由 AI Toolkit: Provision Azure Container Apps job for fine-tuning 命令生成。它用作其他远程命令面板的输入。

在 Azure 容器应用中配置微调机密

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

步骤

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

    Add secret

  2. 输入机密名称和值:系统会提示你输入机密的名称和值。 输入机密名称 输入机密 例如,如果你正在使用私有 HuggingFace 数据集或需要 Hugging Face 访问控制的模型,请将 HuggingFace 令牌设置为环境变量 HF_TOKEN,以避免在 Hugging Face Hub 上手动登录。

设置机密后,你现在可以在 Azure 容器应用中使用它。机密将在容器应用的环境变量中设置。

配置 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 容器应用微调作业的超时时间(以秒为单位)。默认值为 10800 秒,等于 3 小时。如果 Azure 容器应用作业达到此超时,微调过程将停止。但是,默认情况下会保存检查点,从而允许在再次运行时从上次检查点恢复微调过程,而不是从头开始。
location 这是预配 Azure 资源的位置。默认值与所选资源组的位置相同。
storageAccountNamefileShareNameacaEnvironmentNameacaEnvironmentStorageNameacaJobNameacaLogAnalyticsName 这些参数用于命名要预配的 Azure 资源。你可以输入新的未使用的资源名称来创建你自己的自定义命名资源,或者如果你愿意使用已有的 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 文件。如果你已经在未使用 AI Toolkit 命令面板的情况下设置和配置了所有 Azure 资源,则只需在 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 保存 bicep 模板的参数,用于为推理预配 Azure 资源。
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 资源的位置。默认值与所选资源组的位置相同。
storageAccountNamefileShareNameacaEnvironmentNameacaEnvironmentStorageNameacaAppNameacaLogAnalyticsName 这些参数用于命名要预配的 Azure 资源。默认情况下,它们将与微调资源名称相同。你可以输入新的未使用的资源名称来创建你自己的自定义命名资源,或者如果你愿意使用已有的 Azure 资源,可以输入其名称。有关详细信息,请参阅使用现有 Azure 资源部分。

使用现有 Azure 资源

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

如果你在微调步骤中自定义了 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 文件。如果你已经在未使用 AI Toolkit 命令面板的情况下设置和配置了所有 Azure 资源,则只需在 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>"
}