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 工具包左侧面板中的“工具”部分选择 微调 项。
首先输入唯一的“项目名称”和“项目位置”。 将在所选位置创建具有指定项目名称的新文件夹,用于存储项目文件。
接下来,从“模型目录”中选择模型(例如 Phi-3-mini-4k-instruct),然后选择“配置项目”:
然后,系统会提示你配置微调项目的设置。 请确保勾选了“本地微调”复选框(将来 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:将微调模型集成到应用中
接下来,使用经过微调的模型通过 console
、web browser
或 prompt 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
页面上也提供了相关说明,可在项目文件夹中找到这些说明。