微调模型

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

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

Fine-tune AI models on Azure with AI Toolkit for VS Code (Preview)

VS Code 的 AI Toolkit 现在支持配置 Azure 容器应用,用于运行模型微调并在云端托管推理端点。

搭建你的云环境

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

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

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

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

    1. 通过选择文件 ->偏好设置 ->设置打开VS代码设置。
    2. 进入扩展并选择 AI 工具包
    3. 选择“启用在Azure容器应用上运行微调和推理”选项。

    AI工具包设置

    1. 重新加载VS代码以生效更改。

支架:一个微调项目

  1. 运行AI工具包:工具专注视图在命令面板中(⇧⌘P(Windows,Linux Ctrl+Shift+P)
  2. 导航至此微调访问型号目录。选择一个模型进行微调。给你的项目分配一个名字,并在你的机器上选择它的位置。然后,点击“配置项目”按钮。面板:选择模型
  3. 项目配置
    1. 避免启用“本地微调”选项。
    2. Olive配置设置会显示为预设的默认值。请根据需要调整和填写这些配置。
    3. 继续生成项目。这一阶段利用了 WSL,并涉及建立新的 Conda 环境,为未来包含开发容器的更新做准备。面板:配置模型
    4. 选择“在工作区中重启窗口”以打开你的微调项目。小组讨论:生成项目
注释

该项目目前可在本地或远程运行于 VS Code 的 AI 工具包中。如果你在项目创建时选择“本地微调”,它将完全在 WSL 中运行,没有云资源。否则,项目将被限制只能在远程的 Azure 容器应用环境中运行。

Provision Azure Resources

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

条款微调

通过输出通道显示的链路监控供应进度。课程进展

运行微调

要启动远程微调作业,运行AI工具包:运行微调命令在指令调色板中。

运行微调

扩展随后执行以下作:

  1. 将你的工作区与 Azure 文件同步。

  2. 使用以下指定的命令触发 Azure Container Appjob./infra/fintuning.config.json.

QLoRA将用于微调,微调过程将为模型创建用于推理的LoRA适配器。

微调的结果将存储在 Azure 文件中。 要在 Azure 文件共享中查看输出文件,可以通过输出面板中的链接访问 Azure 门户。或者,你也可以直接访问Azure门户,找到名为存储账户的地址STORAGE_ACCOUNT_NAME定义如下./infra/fintuning.config.json以及名为的文件共享FILE_SHARE_NAME定义如下./infra/fintuning.config.json.

文件共享

查看日志

一旦微调工作开始,你可以通过访问Azure门户访问系统和控制台日志。

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

日志按钮

注释

这项工作可能需要几分钟才能启动。如果已经有一个正在运行的作业,当前的作业可能会排队以待后期开始。

Azure 上的查看和查询日志

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

或者,如果你已经打开了 Azure 门户,可以从“执行历史”面板找到 Azure 容器应用职位的职位历史。

作业执行历史

日志分为两种类型,“控制台”和“系统”。

  • 控制台日志是来自你应用的消息,包括特别以及学生留言。这就是你已经在直播日志部分看到的内容。
  • 系统日志是来自Azure容器应用服务的消息,包括服务级别事件的状态。

要查看和查询日志,请点击“控制台”按钮,进入日志分析页面,查看所有日志并撰写查询。

工作日志分析

有关Azure容器应用日志的更多信息,请参见Azure容器应用中的应用日志

在VSCode中查看流媒体日志

启动微调工作后,你也可以在 Azure 上查看日志,方法是在 VSCode 通知中点击“在 VS Code 中显示流媒体日志”按钮。

或者你可以运行命令AI工具包:显示正在进行的微调作业流日志在指挥调色板中。

流式日志命令

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

流式日志输出

注释

作业可能因资源不足而被排队。如果日志没有显示,请稍等一段时间,然后执行重新连接流媒体日志的命令。 流媒体日志可能会超时并断开连接。不过,可以通过再次执行命令重新连接。

用微调模型推理

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

微调完成

Provision Azure resources

类似于微调过程,你需要通过执行AI Toolkit: Provision Azure Container Apps for inference来自指令面板。在此设置过程中,您将被要求选择Azure订阅和资源组。

提供推理资源

默认情况下,用于推理的订阅和资源组应与用于微调的资源组保持一致。推理将使用相同的 Azure 容器应用环境,访问存储在 Azure 文件中的模型和模型适配器,这些适配器是在微调步骤中生成的。

推理部署

如果您想修改推理代码或重新加载推理模型,请执行AI工具包:部署推理指挥部。这样你最新的代码会与ACA同步,并重启副本。

部署推理

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

应用端点

注释

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

高级用法

微调项目组件

文件夹 目录
基础设施 包含所有远程作所需的配置。
基础设施/供应/finetuning.parameters.json 存储 bicep 模板的参数,用于配置 Azure 资源进行微调。
infra/provision/finetuning.bicep 包含用于配置 Azure 资源以进行微调的模板。
下finetuning.config.json 配置文件由AI Toolkit: Provision Azure Container Apps job for fine-tuning指挥部。它被用作其他远程命令调色板的输入。

Configuring secrets for fine-tuning in Azure Container Apps

Azure 容器应用秘密提供了一种安全的方式,用于存储和管理 Azure 容器应用中的敏感数据,如 HuggingFace 令牌和权重与偏见 API 密钥。利用 AI 工具包的命令调色板,你可以将秘密输入到已配置的 Azure 容器应用作业中(存储于./finetuning.config.json).这些秘密随后被设置为所有容器中的环境变量

步骤

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

    添加秘密

  2. 提供一个秘密名称和数值

    输入秘密名称

    输入秘密

    例如,如果你使用私有的 HuggingFace 数据集或需要 Hugging Face 访问控制的模型,可以将 HuggingFace 令牌设置为环境变量HF_TOKEN以避免在拥抱面中心手动登录。

设置好秘密后,你就可以在Azure容器应用中使用它。秘密会在你的容器应用的环境变量中设置。

Configuring Azure resource provision for fine-tune

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

你可以在./infra/provision/finetuning.parameters.json档案。以下是详细信息:

参数 描述
defaultCommands 这是开始微调工作的默认命令。它可以被覆盖./infra/finetuning.config.json.
最大实例计数 该参数设定了GPU实例的最大容量。
暂停 这会在几秒钟内设置Azure Container Appfine-tuning作业的超时。默认值是10800,相当于3小时。如果Azure容器应用作业达到此超时,微调过程将停止。不过,检查点默认保存,允许微调过程从上一个检查点继续,而非重新开始。
位置 这里是Azure资源配置的位置。默认值与所选资源组的位置相同。
storageAccountName,文件共享名称 aca环境名称,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 资源,可以使用提供的 bicep 文件在./infra/provision文件夹。如果你已经设置并配置了所有 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"
  ]
}

模板中包含的推理组件

文件夹 目录
基础设施 包含所有远程作所需的配置。
基础设施/供应/inference.parameters.json 存储 bicep 模板的参数,用于为推理配置 Azure 资源。
infra/provision/inference.bicep 包含用于推理 Azure 资源配置的模板。
下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 这是启动网络API的命令。
最大实例计数 该参数设定了GPU实例的最大容量。
位置 这里是Azure资源配置的位置。默认值与所选资源组的位置相同。
storageAccountName,文件共享名称 aca环境名称,acaEnvironmentStorageName,acaAppName,acaLogAnalyticsName 这些参数用于命名用于配置的 Azure 资源。默认情况下,它们将与微调资源名称相同。你可以输入一个新的未使用的资源名来创建自定义资源,或者如果你愿意使用已有的Azure资源名称,也可以输入它。

使用现有的 Azure 资源

默认情况下,推理配置使用与微调相同的Azure容器应用环境、存储账户、Azure文件共享和Azure日志分析。专门为推理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 资源,可以使用提供的 Bicep 文件./infra/provision文件夹。如果你已经在没有使用 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>"
}

你学到了什么

在本文中,你学到了:

  • 设置 AI Toolkit for VS Code,支持Azure Container Apps中的微调和推理。
  • 在 AI Toolkit for VS Code 中创建一个微调项目。
  • 配置微调工作流程,包括数据集选择和训练参数。
  • 运行微调流程,将预训练模型适配到你的具体数据集中。
  • 查看微调过程的结果,包括指标和日志。
  • 使用示例笔记本进行模型推断和测试。
  • 导出并与他人分享微调项目。
  • 用不同的数据集或训练参数重新评估模型。
  • 处理失败的作业并调整配置以适应重运行。
  • 了解支持的模型及其微调需求。
  • 使用VS Code的AI工具包来管理微调项目,包括配置Azure资源、运行微调作业以及部署推理模型。