微调模型
微调 AI 模型是一种常见做法,它允许你使用自定义数据集在具有 GPU 的计算环境中对预训练模型运行微调作业。AI 工具包目前支持在本地计算机(带 GPU)或云端(Azure 容器应用,带 GPU)微调 SLM。
微调模型可以下载到本地并用 GPU 进行推理测试,也可以量化以在 CPU 上本地运行。微调模型也可以部署到云环境作为远程模型。
使用 AI 工具包进行 VS Code(预览)在 Azure 上微调 AI 模型
AI 工具包 for VS Code 现在支持预配 Azure 容器应用,以在云中运行模型微调并托管推理终结点。
设置云环境
-
若要在远程 Azure 容器应用环境中运行模型微调和推理,请确保你的订阅具有足够的 GPU 容量。提交支持票证,以请求应用程序所需的容量。获取有关 GPU 容量的更多信息
-
如果你正在 HuggingFace 上使用私有数据集或你的基础模型需要访问控制,请确保你拥有一个HuggingFace 帐户并生成访问令牌。
-
如果你正在微调 Mistral 或 Llama,请接受 HuggingFace 上的许可证。
-
在 AI 工具包 for VS Code 中启用远程微调和推理功能标志
- 通过选择“文件”->“首选项”->“设置”打开 VS Code 设置。
- 导航到“扩展”并选择“AI 工具包”。
- 选择“启用在 Azure 容器应用上运行微调和推理”选项。
- 重新加载 VS Code 以使更改生效。
搭建微调项目
- 在命令面板中运行
AI Toolkit: Focus on Tools View
(⇧⌘P(Windows、Linux Ctrl+Shift+P)) - 导航到
Fine-tuning
以访问模型目录。选择一个用于微调的模型。为你的项目分配一个名称并选择其在计算机上的位置。然后,点击“配置项目”按钮。 - 项目配置
- 避免启用“本地微调”选项。
- Olive 配置设置将以预设默认值出现。请根据需要调整并填写这些配置。
- 继续“生成项目”。此阶段利用 WSL 并涉及设置新的 Conda 环境,为未来包括 Dev Containers 在内的更新做准备。
- 选择“在工作区中重新启动窗口”以打开您的微调项目。
该项目目前仅在 VS Code 的 AI 工具包中本地或远程工作。如果您在项目创建期间选择“本地微调”,它将仅在 WSL 中运行,不使用云资源。否则,项目将仅限于在远程 Azure 容器应用环境中运行。
预配 Azure 资源
首先,你需要为远程微调预配 Azure 资源。从命令面板中找到并执行AI Toolkit: Provision Azure Container Apps job for fine-tuning
。在此过程中,系统会提示你选择 Azure 订阅和资源组。
通过输出通道中显示的链接监视预配进度。
运行微调
要启动远程微调作业,请在命令面板中运行 AI Toolkit: Run fine-tuning
命令。
该扩展随后执行以下操作
-
将工作区与 Azure 文件同步。
-
使用
./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
的文件共享。
查看日志
微调作业启动后,您可以访问Azure 门户查看系统和控制台日志。
或者,您可以直接在 VSCode 输出面板中查看控制台日志。
作业可能需要几分钟才能启动。如果已有正在运行的作业,则当前作业可能会排队等待稍后启动。
在 Azure 上查看和查询日志
触发微调作业后,您可以通过从 VSCode 通知中选择“在 Azure 门户中打开日志”按钮,在 Azure 上查看日志。
或者,如果您已经打开了 Azure 门户,请从 Azure 容器应用作业的“执行历史记录”面板中查找作业历史记录。
日志有两种类型:“控制台”和“系统”。
- 控制台日志是来自你的应用的消息,包括
stderr
和stdout
消息。这正是你已经在流式传输日志部分中看到的内容。 - 系统日志是来自 Azure 容器应用服务的消息,包括服务级事件的状态。
要查看和查询日志,请选择“控制台”按钮并导航到“日志分析”页面,您可以在其中查看所有日志并编写查询。
有关 Azure 容器应用日志的详细信息,请参阅Azure 容器应用中的应用程序日志记录。
在 VSCode 中查看流式日志
启动微调作业后,您还可以通过选择 VSCode 通知中的“在 VS Code 中显示流式日志”按钮,在 Azure 上查看日志。
或者,您可以在命令面板中运行命令 AI Toolkit: Show the running fine-tuning job streaming logs
。
正在运行的微调作业的流日志将显示在输出面板中。
由于资源不足,作业可能会排队。如果未显示日志,请等待片刻,然后执行命令以重新连接到流日志。流日志可能会超时并断开连接。但是,可以通过再次执行命令来重新连接。
使用微调模型进行推理
在远程环境中训练完适配器后,使用简单的 Gradio 应用程序与模型进行交互。
预配 Azure 资源
与微调过程类似,您需要通过从命令面板执行 AI Toolkit: Provision Azure Container Apps for inference
来设置用于远程推理的 Azure 资源。在此设置过程中,系统将要求您选择 Azure 订阅和资源组。
默认情况下,用于推理的订阅和资源组应与用于微调的订阅和资源组匹配。推理将使用相同的 Azure 容器应用环境,并访问在微调步骤中生成的存储在 Azure 文件中的模型和模型适配器。
推理部署
如果您希望修改推理代码或重新加载推理模型,请执行 AI Toolkit: Deploy for inference
命令。这将使您的最新代码与 ACA 同步并重新启动副本。
部署成功完成后,模型现已准备好使用此终结点进行评估。您可以通过选择 VSCode 通知中显示的“转到推理终结点”按钮来访问推理 API。或者,可以在 ./infra/inference.config.json
和输出面板中的 ACA_APP_ENDPOINT
下找到 Web API 终结点。
推理端点可能需要几分钟才能完全投入运行。
高级用法
微调项目组件
文件夹 | 内容 |
---|---|
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
中)。然后,这些机密被设置为所有容器中的环境变量。
步骤
-
在命令面板中,键入并选择
AI Toolkit: Add Azure Container Apps Job secret for fine-tuning
-
输入机密名称和值:系统将提示您输入机密的名称和值。
例如,如果您使用需要 Hugging Face 访问控制的私有 HuggingFace 数据集或模型,请将您的 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 实例的最大容量。 |
超时 |
这将设置 Azure 容器应用微调作业的超时时间(以秒为单位)。默认值为 10800,即 3 小时。如果 Azure 容器应用作业达到此超时时间,微调过程将停止。但是,检查点默认情况下会保存,允许微调过程在再次运行时从最后一个检查点恢复,而不是重新开始。 |
位置 |
这是预配 Azure 资源的位置。默认值与所选资源组的位置相同。 |
storageAccountName 、fileShareName acaEnvironmentName 、acaEnvironmentStorageName 、acaJobName 、acaLogAnalyticsName |
这些参数用于命名 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 文件。如果您已经设置并配置了所有 Azure 资源而没有使用 AI 工具包命令面板,您只需在 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 实例的最大容量。 |
位置 |
这是预配 Azure 资源的位置。默认值与所选资源组的位置相同。 |
storageAccountName 、fileShareName acaEnvironmentName 、acaEnvironmentStorageName 、acaAppName 、acaLogAnalyticsName |
这些参数用于命名 Azure 资源以进行预配。默认情况下,它们将与微调资源名称相同。您可以输入新的、未使用的资源名称来创建自己的自定义命名资源,或者您可以输入现有 Azure 资源的名称(如果您更喜欢使用它)。有关详细信息,请参阅使用现有 Azure 资源一节。 |
使用现有 Azure 资源
默认情况下,推理预配使用与微调相同的 Azure 容器应用环境、存储帐户、Azure 文件共享和 Azure Log Analytics。单独的 Azure 容器应用仅用于推理 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 工具包命令面板,您可以直接在 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 工具包以支持 Azure 容器应用中的微调和推理。
- 在 VS Code 的 AI 工具包中创建微调项目。
- 配置微调工作流,包括数据集选择和训练参数。
- 运行微调工作流,以使预训练模型适应您的特定数据集。
- 查看微调过程的结果,包括指标和日志。
- 使用示例笔记本进行模型推理和测试。
- 导出微调项目并与他人共享。
- 使用不同的数据集或训练参数重新评估模型。
- 处理失败的作业并调整配置以进行重新运行。
- 了解支持的模型及其微调要求。
- 使用 VS Code 的 AI 工具包管理微调项目,包括预配 Azure 资源、运行微调作业和部署模型进行推理。