如何使用 AI 工具包为VS Code微调模型

AI Toolkit for VS Code (AI Toolkit) 是一个 VS Code 扩展,使你能够在应用或云中下载、测试、微调和部署 AI 模型。 有关详细信息,请参阅 AI 工具包概述

注意

VS Code AI 工具包的额外文档和教程可以在 VS Code 文档中找到:适用于 Visual Studio Code 的 AI 工具包。 你将找到有关 Playground、使用 AI 模型、微调本地模型和基于云的模型等的指导。

本文将指导如何进行以下操作:

  • 设置本地环境以进行微调。
  • 执行微调工作。

先决条件

  • 已完成 AI Toolkit for Visual Studio Code 入门
  • 如果使用 Windows 计算机微调,请安装 Windows Subsystem for Linux (WSL)。 请参阅如何使用 WSL 在 Windows 上安装 Linux,以便安装 WSL 和默认 Linux 分发版。 在使用 AI Toolkit for VS Code 之前,必须安装 WSL Ubuntu 分发版 18.04 或更高版本,并将其设置为默认分发版。 了解如何更改默认分发版
  • 如果使用 Linux 计算机,则它应该是 Ubuntu 分发版 18.04 或更高版本。
  • 在本教程中使用模型需要 NVIDIA GPU 进行微调。 目录中还有其他模型可以使用 CPU 或 NPU 在 Windows 设备上加载。

提示

请确保已在计算机上安装最新的 NVIDIA 驱动程序。 如果在游戏就绪驱动程序Studio 驱动程序之间进行选择,则请下载 Studio 驱动程序

你需要知道 GPU 的模型才能下载正确的驱动程序。 要了解你拥有哪些 GPU,请参阅如何检查 GPU 及其重要原因

环境设置

要查看你是否满足在本地设备或云 VM 上运行微调作业所需的所有先决条件,请打开命令面板 (Shift+Control+P) 并搜索 “AI 工具包:验证环境先决条件”

如果本地设备通过了验证检查,则会启用“设置 WSL 环境”按钮供你选择。 此操作将安装运行微调作业所需的所有依赖项。

云 VM

如果本地计算机没有 Nvidia GPU 设备,则可以在有 Nvidia GPU(如果有配额)的云 VM(Windows 和 Linux)上进行微调。 在 Azure 中,可以使用以下 VM 系列进行微调:

  • NCasT4_v3 系列
  • NC A100 v4 系列
  • ND A100 v4 系列
  • NCads H100 v5 系列
  • NCv3 系列
  • NVadsA10 v5 系列

提示

VS Code 允许远程连接到云 VM。 如果不熟悉此功能,请阅读通过 SSH 进行远程开发教程

微调模型

AI Toolkit 使用名为 QLoRA 的方法,该方法结合了量化和低级别自适应 (LoRA) 来使用你自己的数据微调模型。 通过 QLoRA:量化 LLM 的有效微调详细了解 QLoRA。

步骤 1:配置项目

若要使用 QLoRA 启动新的微调会话,请在 AI 工具包左侧面板中的“工具”部分选择 微调 项。

  1. 首先输入唯一的“项目名称”和“项目位置”。 将在所选位置创建具有指定项目名称的新文件夹,用于存储项目文件。

  2. 接下来,从“模型目录”中选择模型(例如 Phi-3-mini-4k-instruct),然后选择“配置项目”

    微调项目设置

  3. 然后,系统会提示你配置微调项目的设置。 请确保勾选了“本地微调”复选框(将来 VS Code 扩展将允许你将微调卸载到云):

    微调设置

模型推理设置

“模型推理”部分有两个设置可用:

设置 说明
Conda 环境名称 要激活并用于微调过程的 conda 环境名称。 此名称在 conda 安装中必须是唯一的。
推理提示模板 在推理时使用的提示模板。 请确保此项与微调的版本匹配。

数据设置

“数据”部分提供了以下设置,以配置数据集信息:

设置 说明
数据集名称 用于微调模型的数据集的名称。
训练拆分 数据集的训练拆分名称。
数据集类型 要使用的数据集类型。
文本列 数据集中用以填充训练提示的列的名称。
文本模板 用于微调模型的提示模板。 此操作使用文本列中的替换词元。
Corpus 策略 指示是否要联接样本或逐行进行处理。
源最大长度 每个训练样本的最大词元数。
填充到最大长度 将 PAD 词元添加到训练样本,直到达到最大词元数。

微调设置

“微调”部分提供了以下设置,用于进一步配置微调流程:

设置 数据类型 默认值 说明
计算类型 字符串 bfloat16 模型权重和适配器权重的数据类型。 对于 4 位量化模型,它也是量化模块的计算数据类型。 有效值:bfloat16、float16 或 float32。
量化类型 字符串 nf4 要使用的量化数据类型。 有效值:fp4 或 nf4。
双重量化 布尔 是否使用嵌套量化,其中第一个量化中的量化常量再次被量化。
Lora r 整数 64 Lora 关注维度。
Lora alpha 浮点 16 适用于 Lora 缩放的 alpha 参数。
Lora 信息漏失 浮点 0.1 Lora 层的信息漏失概率。
Eval 数据集大小 浮点 1024 验证数据集的大小。
种子 整数 0 用于初始化的随机种子。
种子数据 整数 42 要与数据采样器搭配使用的随机种子。
每个设备训练批次大小 整数 1 要用于训练的每个 GPU 批次大小。
每个设备 eval 批次大小 整数 1 要评估的每个 GPU 批次大小。
梯度累计步骤 整数 4 在执行向后/更新传递之前,累计梯度的更新步骤数。
启用梯度检查点 布尔 使用梯度检查点。 为节省内存,建议使用。
学习速率 浮点 0.0002 AdamW 的初始学习速率。
最多步骤数 整数 -1 如果设置为正数,则要执行的训练步骤总数。 此项会替代 num_train_epochs。 如果使用有限的可迭代数据集,则当所有数据耗尽时,训练可能在达到设定的步数之前停止。

步骤 2:生成项目

设置所有参数后,单击“生成项目”。 此项将执行以下操作:

  • 初始化模型下载。
  • 安装所有先决条件和依赖项。
  • 创建 VS Code 工作区。

下载模型并准备好环境后,可以通过在“步骤 3 - 生成项目”页面上选择“重新启动工作区窗口”,从 AI 工具包启动项目。 这将启动连接到环境的 VS Code 的新实例。

注意

系统可能会提示安装其他扩展,例如 VS Code 的提示流。 要获得最佳微调体验,请安装这些扩展以继续操作。

重新启动的窗口在其工作区中具有以下文件夹:

文件夹名 说明
数据集 此文件夹包含模板的数据集(dataset-classification.json - 包含短语和音调的 JSON 行文件)。 如果将项目设置为使用本地文件或 Hugging Face 数据集,则可以忽略此文件夹。
微调 要执行微调工作的 Olive 配置文件。 Olive 是一种易于使用的硬件感知模型优化工具,包含模型压缩、优化和编译等方面的行业领先技术。 Olive 基于模型和目标硬件并在考虑一组约束(例如准确性和延迟)的情况下编写了最适合的优化技术,用于输出在云或边缘上进行推理的最高效模型,。
推理 用于使用微调模型的进行推理的代码示例。
基础结构 用于使用 Azure 容器应用服务进行微调和推理(即将推出)。 此文件夹包含用于预配 Azure 容器应用服务的 Bicep 和配置文件。
安装 用于设置 conda 环境的文件。 例如,pip 要求。

步骤 3:执行微调工作

现在可以使用以下方式微调模型:

# replace {conda-env-name} with the name of the environment you set
conda activate {conda-env-name}
python finetuning/invoke_olive.py 

重要

微调所需的时间取决于 GPU 类型、GPU 数、步骤数和时期数。 这很耗时(例如,可能需要几个小时)。

如果只想执行快速测试,请考虑减少 文件中的olive-config.json数。 使用检查点,因此下一次微调运行将从最后一个检查点继续运行。

检查点和最终模型将保存在项目的 models 文件夹中。

步骤 4:将微调模型集成到应用中

接下来,使用经过微调的模型通过 consoleweb browserprompt flow 中的聊天运行推理。

cd inference

# Console interface.
python console_chat.py

# Web browser interface allows to adjust a few parameters like max new token length, temperature and so on.
# User has to manually open the link (e.g. http://127.0.0.1:7860) in a browser after gradio initiates the connections.
python gradio_chat.py

提示

README.md 页面上也提供了相关说明,可在项目文件夹中找到这些说明。