模型微调
微调 AI 模型是一种常见做法,允许您使用自定义数据集在配备 GPU 的计算环境中对预训练模型运行 微调 任务。Foundry Toolkit 目前支持在配备 GPU 的本地计算机上或在云端(Azure Container App)的 GPU 上微调小型语言模型(SLM)。
微调后的模型可以下载到本地并使用 GPU 进行推理测试,也可以进行量化以在 CPU 上本地运行。微调后的模型还可以作为远程模型部署到云环境中。
使用适用于 VS Code 的 Foundry Toolkit 在 Azure 上微调 AI 模型(预览版)
适用于 VS Code 的 Foundry Toolkit 现在支持预配 Azure Container App,以在云端运行模型微调并托管推理端点。
设置您的云环境
-
要在远程 Azure Container Apps 环境中运行模型微调和推理,请确保您的订阅具有足够的 GPU 容量。微调在 Azure Container Apps 的 NC24-A100 GPU 工作负载配置文件上运行。提交 支持请求,以申请目标区域中
SubscriptionNCA100GpusSKU 的配额。有关详细信息,请参阅 Azure Container Apps 工作负载配置文件。重要事项某些模型在单个微调任务中需要多个 GPU。如果您的配额过低,预配将失败并出现
MaxRegionalQuotaExceeded错误。请为SubscriptionNCA100GpusSKU 申请足够的配额,以满足模型所需的 GPU 数量。 -
如果您在 HuggingFace 上使用私有数据集,或者您的基础模型需要访问控制,请确保您拥有 HuggingFace 账户 并 生成访问令牌。
-
如果您正在微调 Mistral 或 Llama,请在 HuggingFace 上接受许可证(LICENSE)。
-
在适用于 VS Code 的 Foundry Toolkit 中启用“远程微调和推理”功能标志
- 通过选择 文件 -> 首选项 -> 设置 打开 VS Code 设置。
- 导航到 扩展 并选择 Foundry Toolkit。
- 选择 “启用在 Azure Container Apps 上运行微调和推理” 选项。

- 重新加载 VS Code 以使更改生效。
构建微调项目框架
- 在命令面板中运行
Foundry Toolkit: Focus on Tools View(⇧⌘P(Windows、Linux 为 Ctrl+Shift+P)) - 导航到
Fine-tuning以访问模型目录。选择用于微调的模型。为您的项目指定名称并选择其在计算机上的位置。然后,点击 “配置项目” 按钮。
- 项目配置
- 避免启用 “在本地微调” 选项。
- 将显示带有预设默认值的 Olive 配置设置。请根据需要调整和填写这些配置。
- 转到 生成项目。此阶段利用 WSL 并涉及设置新的 Conda 环境,为包含 Dev Containers 的未来更新做准备。

- 选择 “在工作区中重新启动窗口” 以打开您的微调项目。

该项目目前可以在 VS Code 的 Foundry Toolkit 内本地或远程工作。如果在创建项目期间选择 “在本地微调”,它将完全在 WSL 中运行,不使用云资源。否则,项目将被限制在远程 Azure Container App 环境中运行。
预配 Azure 资源
首先,您需要为远程微调预配 Azure 资源。在命令面板中查找并执行 Foundry Toolkit: Provision Azure Container Apps job for fine-tuning。在此过程中,系统会提示您选择 Azure 订阅和资源组。

通过输出通道中显示的链接监视预配进度。
运行微调
若要启动远程微调任务,请在命令面板中运行 Foundry Toolkit: Run fine-tuning 命令。

然后,该扩展将执行以下操作
-
将您的工作区与 Azure Files 同步。
-
使用
./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 中定义)。

查看日志
微调任务启动后,您可以访问 Azure 门户 来查看系统日志和控制台日志。
或者,您也可以直接在 VS Code 的“输出”面板中查看控制台日志。

任务可能需要几分钟才能启动。如果已经有一个正在运行的任务,当前任务可能会排队稍后启动。
在 Azure 上查看和查询日志
触发微调任务后,可以通过选择 VS Code 通知中的“在 Azure 门户中打开日志”按钮在 Azure 上查看日志。
或者,如果您已经打开了 Azure 门户,请在 Azure Container Apps 任务的“执行历史记录”面板中查找任务历史记录。

日志有两种类型:“控制台”(Console)和“系统”(System)。
- 控制台日志是来自您的应用的消息,包括
stderr和stdout消息。这正是您在流式日志部分中已经看到的内容。 - 系统日志是来自 Azure Container Apps 服务的消息,包括服务级事件的状态。
要查看和查询日志,请选择“控制台”按钮并导航到 Log Analytics 页面,您可以在其中查看所有日志并编写查询。

有关 Azure Container Apps 日志的详细信息,请参阅 Azure Container Apps 中的应用程序日志记录。
在 VS Code 中查看流式日志
初始化微调任务后,您还可以通过选择 VS Code 通知中的“在 VS Code 中显示流式日志”按钮在 Azure 上查看日志。
或者,您可以在命令面板中运行命令 Foundry Toolkit: Show the running fine-tuning job streaming logs。

正在运行的微调任务的流式日志将显示在“输出”面板中。

任务可能会因资源不足而排队。如果未显示日志,请稍候,然后执行该命令以重新连接到流式日志。流式日志可能会超时并断开连接。但是,可以通过再次执行该命令来重新连接。
使用微调后的模型进行推理
在远程环境中训练适配器后,可以使用一个简单的 Gradio 应用程序与模型进行交互。

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

默认情况下,用于推理的订阅和资源组应与用于微调的订阅和资源组匹配。推理将使用相同的 Azure Container App 环境,并访问在微调步骤中生成的、存储在 Azure Files 中的模型和模型适配器。
用于推理的部署
如果您希望修改推理代码或重新加载推理模型,请执行 Foundry Toolkit: Deploy for inference 命令。这会将您的最新代码与 ACA 同步并重新启动副本。

部署成功完成后,模型现在可以使用此端点进行评估。您可以通过选择 VS Code 通知中显示的“转到推理端点”按钮来访问推理 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 |
配置文件,由 Foundry Toolkit: Provision Azure Container Apps job for fine-tuning 命令生成。它用作其他远程命令面板的输入。 |
在 Azure Container Apps 中配置用于微调的机密
Azure Container App 机密提供了一种安全的方法来存储和管理 Azure Container Apps 中的敏感数据,例如 HuggingFace 令牌和 Weights & Biases API 密钥。使用 Foundry Toolkit 的命令面板,您可以将机密输入到预配的 Azure 容器应用任务中(存储在 ./finetuning.config.json 中)。然后,这些机密将作为 环境变量 设置在所有容器中。
步骤
-
在命令面板中,键入并选择
Foundry Toolkit: Add Azure Container Apps Job secret for fine-tuning
-
提供机密名称和值


例如,如果您使用的是私有 Hugging Face数据集或需要 Hugging Face 访问控制的模型,请添加一个机密,以便微调任务可以无需手动登录即可进行身份验证。输入
HF_TOKEN作为机密名称,并将您的 Hugging Face 令牌作为值。工具包会将您输入的机密名称用作环境变量名称,因此请完全按照 Hugging Face 工具读取的变量HF_TOKEN来输入。Azure Container Apps 将底层机密资源以小写形式存储为hf-token,但传递给任务的环境变量仍然是HF_TOKEN。
设置机密后,您现在可以在 Azure Container App 中使用它。该机密将设置在容器应用的环境变量中。
配置用于微调的 Azure 资源预配
本指南将帮助您配置 Foundry 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 文件中指定它们的名称,然后从命令面板运行 Foundry 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 文件。如果您在未使用 Foundry 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 |
配置文件,由 Foundry Toolkit: Provision Azure Container Apps for inference 命令生成。它用作其他远程命令面板的输入。 |
配置 Azure 资源预配
本指南将帮助您配置 Foundry 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。系统会专门为推理 API 创建一个单独的 Azure Container App。
如果您在微调步骤中自定义了 Azure 资源,或者想要使用自己的现有 Azure 资源进行推理,请在 ./infra/inference.parameters.json 文件中指定它们的名称。然后,从命令面板运行 Foundry 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 文件。如果您在未使用 Foundry 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>"
}
您学到了什么
在本文中,您学习了如何
- 设置适用于 VS Code 的 Foundry Toolkit 以支持在 Azure Container Apps 中进行微调和推理。
- 在适用于 VS Code 的 Foundry Toolkit 中创建一个微调项目。
- 配置微调工作流,包括数据集选择和训练参数。
- 运行微调工作流以使预训练模型适应您的特定数据集。
- 查看微调过程的结果,包括指标和日志。
- 使用示例笔记本进行模型推理和测试。
- 导出微调项目并与他人共享。
- 使用不同的数据集或训练参数重新评估模型。
- 处理失败的任务并调整配置以便重新运行。
- 了解受支持的模型及其微调要求。
- 使用适用于 VS Code 的 Foundry Toolkit 来管理微调项目,包括预配 Azure 资源、运行微调任务以及部署模型进行推理。