微调模型
微调 AI 模型是一种常见的做法,允许您使用自定义数据集在具有 GPU 的计算环境中对预训练模型运行 微调 作业。AI 工具包目前支持在本地具有 GPU 的机器上或在云端(Azure 容器应用)使用 GPU 微调 SLM。
微调后的模型可以下载到本地,并使用 GPU 进行推理测试,或者可以量化以在本地 CPU 上运行。微调后的模型也可以部署到云环境作为远程模型。
在 Azure 上使用 AI 工具包 for VS Code (预览版) 微调 AI 模型
VS Code 的 AI 工具包现在支持预配 Azure 容器应用,以在云端运行模型微调和托管推理终结点。
设置您的云环境
-
要在远程 Azure 容器应用环境中运行模型微调和推理,请确保您的订阅有足够的 GPU 容量。提交支持票证以请求您的应用程序所需的容量。获取有关 GPU 容量的更多信息
-
如果您正在 HuggingFace 上使用私有数据集,或者您的基础模型需要访问控制,请确保您拥有 HuggingFace 帐户 并生成访问令牌。
-
如果您要微调 Mistral 或 Llama,请接受 HuggingFace 上的 LICENSE。
-
在 VS Code 的 AI 工具包中启用远程微调和推理功能标志
- 通过选择文件 -> 首选项 -> 设置打开 VS Code 设置。
- 导航到扩展并选择 AI 工具包。
- 选择“启用在 Azure 容器应用上运行微调和推理”选项。
- 重新加载 VS Code 以使更改生效。
搭建微调项目
- 在命令面板 ( ⇧⌘P (Windows、Linux Ctrl+Shift+P) ) 中运行
AI 工具包: 聚焦工具视图
命令。 - 导航到
微调
以访问模型目录。选择一个模型进行微调。为您的项目分配一个名称,并在您的机器上选择其位置。然后,点击“配置项目”按钮。 - 项目配置
- 避免启用“本地微调”选项。
- Olive 配置设置将显示预设的默认值。请根据需要调整和填写这些配置。
- 继续进行生成项目。此阶段利用 WSL,并涉及设置新的 Conda 环境,为未来包含开发容器的更新做准备。
- 选择“在工作区中重新启动窗口”以打开您的微调项目。
该项目目前可以在 VS Code 的 AI 工具包中本地或远程运行。如果您在项目创建期间选择“本地微调”,它将仅在 WSL 中运行,而无需云资源。否则,该项目将被限制在远程 Azure 容器应用环境中运行。
预配 Azure 资源
要开始使用,您需要为远程微调预配 Azure 资源。从命令面板中查找并执行 AI 工具包: 预配用于微调的 Azure 容器应用作业
。在此过程中,系统将提示您选择您的 Azure 订阅和资源组。
通过输出通道中显示的链接监控预配进度。
运行微调
要启动远程微调作业,请在命令面板中运行 AI 工具包: 运行微调
命令。
然后,扩展执行以下操作
-
将您的工作区与 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 容器应用服务的消息,包括服务级别事件的状态。
要查看和查询您的日志,请选择“控制台”按钮,然后导航到 Log Analytics 页面,您可以在其中查看所有日志并编写您的查询。
有关 Azure 容器应用日志的更多信息,请参阅 Azure 容器应用中的应用程序日志记录。
在 VSCode 中查看流式日志
启动微调作业后,您还可以通过选择 VSCode 通知中的“在 VS Code 中显示流式日志”按钮来查看 Azure 上的日志。
或者,您可以在命令面板中运行命令 AI 工具包: 显示正在运行的微调作业流式日志
。
正在运行的微调作业的流式日志将显示在输出面板中。
由于资源不足,作业可能会排队。如果未显示日志,请稍等片刻,然后执行命令以重新连接到流式日志。流式日志可能会超时并断开连接。但是,可以通过再次执行命令来重新连接。
使用微调模型进行推理
在远程环境中训练适配器后,使用简单的 Gradio 应用程序与模型进行交互。
预配 Azure 资源
与微调过程类似,您需要通过从命令面板执行 AI 工具包: 预配用于推理的 Azure 容器应用
来设置用于远程推理的 Azure 资源。在此设置过程中,系统会要求您选择您的 Azure 订阅和资源组。
默认情况下,用于推理的订阅和资源组应与用于微调的订阅和资源组匹配。推理将使用相同的 Azure 容器应用环境,并访问存储在 Azure 文件存储中的模型和模型适配器,这些模型和适配器是在微调步骤中生成的。
推理部署
如果您希望修改推理代码或重新加载推理模型,请执行 AI 工具包: 部署以进行推理
命令。这将使您的最新代码与 ACA 同步并重新启动副本。
成功完成部署后,模型现在可以使用此终结点进行评估。您可以通过选择 VSCode 通知中显示的“转到推理终结点”按钮来访问推理 API。或者,Web API 终结点可以在 ./infra/inference.config.json
和输出面板中的 ACA_APP_ENDPOINT
下找到。
推理终结点可能需要几分钟才能完全运行。
高级用法
微调项目组件
文件夹 | 内容 |
---|---|
infra |
包含远程操作的所有必要配置。 |
infra/provision/finetuning.parameters.json |
包含 bicep 模板的参数,用于预配用于微调的 Azure 资源。 |
infra/provision/finetuning.bicep |
包含用于预配用于微调的 Azure 资源的模板。 |
infra/finetuning.config.json |
配置文件,由 AI 工具包: 预配用于微调的 Azure 容器应用作业 命令生成。它用作其他远程命令面板的输入。 |
配置 Azure 容器应用中用于微调的密钥
Azure 容器应用密钥提供了一种安全的方式来存储和管理 Azure 容器应用中的敏感数据,例如 HuggingFace 令牌和 Weights & Biases API 密钥。使用 AI 工具包的命令面板,您可以将密钥输入到预配的 Azure 容器应用作业中(存储在 ./finetuning.config.json
中)。然后,这些密钥在所有容器中设置为环境变量。
步骤
-
在命令面板中,键入并选择
AI 工具包: 为微调添加 Azure 容器应用作业密钥
-
输入密钥名称和值:系统将提示您输入密钥的名称和值。
例如,如果您正在使用私有 HuggingFace 数据集或需要 Hugging Face 访问控制的模型,请将您的 HuggingFace 令牌设置为环境变量
HF_TOKEN
,以避免需要在 Hugging Face Hub 上手动登录。
设置密钥后,您现在可以在 Azure 容器应用中使用它。密钥将设置在您的容器应用的环境变量中。
配置用于微调的 Azure 资源预配
本指南将帮助您配置 AI 工具包: 预配用于微调的 Azure 容器应用作业
命令。
您可以在 ./infra/provision/finetuning.parameters.json
文件中找到配置参数。以下是详细信息
参数 | 描述 |
---|---|
defaultCommands |
这是启动微调作业的默认命令。它可以在 ./infra/finetuning.config.json 中被覆盖。 |
maximumInstanceCount |
此参数设置 GPU 实例的最大容量。 |
timeout |
这设置了 Azure 容器应用微调作业的超时时间,以秒为单位。默认值为 10800,等于 3 小时。如果 Azure 容器应用作业达到此超时时间,则微调过程将停止。但是,默认情况下会保存检查点,允许微调过程从上次检查点恢复,而不是在再次运行时重新开始。 |
location |
这是预配 Azure 资源的位置。默认值与所选资源组的位置相同。 |
storageAccountName , fileShareName acaEnvironmentName , acaEnvironmentStorageName , acaJobName , acaLogAnalyticsName |
这些参数用于命名预配的 Azure 资源。您可以输入新的、未使用的资源名称来创建您自己的自定义命名资源,或者如果您愿意使用现有的 Azure 资源,则可以输入现有 Azure 资源的名称。有关详细信息,请参阅 使用现有 Azure 资源 部分。 |
使用现有 Azure 资源
如果您有需要为微调配置的现有 Azure 资源,则可以在 ./infra/provision/finetuning.parameters.json
文件中指定其名称,然后从命令面板运行 AI 工具包: 预配用于微调的 Azure 容器应用作业
。这将更新您指定的资源并创建任何缺少的资源。
例如,如果您有现有的 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 工具包: 预配用于推理的 Azure 容器应用 命令生成。它用作其他远程命令面板的输入。 |
配置 Azure 资源预配
本指南将帮助您配置 AI 工具包: 预配用于推理的 Azure 容器应用
命令。
您可以在 ./infra/provision/inference.parameters.json
文件中找到配置参数。以下是详细信息
参数 | 描述 |
---|---|
defaultCommands |
这是启动 Web API 的命令。 |
maximumInstanceCount |
此参数设置 GPU 实例的最大容量。 |
location |
这是预配 Azure 资源的位置。默认值与所选资源组的位置相同。 |
storageAccountName , fileShareName acaEnvironmentName , acaEnvironmentStorageName , acaAppName , acaLogAnalyticsName |
这些参数用于命名预配的 Azure 资源。默认情况下,它们将与微调资源名称相同。您可以输入新的、未使用的资源名称来创建您自己的自定义命名资源,或者如果您愿意使用现有的 Azure 资源,则可以输入现有 Azure 资源的名称。有关详细信息,请参阅 使用现有 Azure 资源 部分。 |
使用现有 Azure 资源
默认情况下,推理预配使用与微调相同的 Azure 容器应用环境、存储帐户、Azure 文件共享和 Azure Log Analytics。会创建一个单独的 Azure 容器应用,专门用于推理 API。
如果您在微调步骤中自定义了 Azure 资源,或者想要使用您自己的现有 Azure 资源进行推理,请在 ./infra/inference.parameters.json
文件中指定其名称。然后,从命令面板运行 AI 工具包: 预配用于推理的 Azure 容器应用
命令。这将更新任何指定的资源并创建任何缺少的资源。
例如,如果您有现有的 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>"
}