低秩适应(LoRA)可用于微调Phi 硅模型,从而提升其在特定用例中的性能。 通过使用 LoRA 优化 Phi 硅,Microsoft Windows 本地语言模型,可以实现更准确的结果。 此过程涉及训练 LoRA 适配器,然后在推理期间应用该适配器以提高模型的准确性。
先决条件
- 你已确定一个用例,用于增强 Phi 硅的响应。
- 你已选择一个评估条件来决定什么是“良好响应”。
- 你已尝试了 Phi 硅 API,它们不符合你的评估标准。
训练适配器
为了使用 Windows 11 训练 LoRA 适配器来微调 Phi Silica 模型,首先需要生成供训练过程使用的数据集。
生成用于 LoRA 适配器的数据集
若要生成数据集,需要将数据拆分为两个文件:
train.json
– 用于训练适配器。test.json
– 用于评估适配器在训练期间和之后的性能。
这两个文件都必须使用 JSON 格式,其中每行都是表示单个示例的单独 JSON 对象。 每个示例都应包含用户与助手之间交换的消息列表。
每个消息对象都需要两个字段:
content
:消息的文本。role
:或"user"
"assistant"
指示发送方。
请参阅以下示例:
{"messages": [{"content": "Hello, how do I reset my password?", "role": "user"}, {"content": "To reset your password, go to the settings page and click 'Reset Password'.", "role": "assistant"}]}
{"messages": [{"content": "Can you help me find nearby restaurants?", "role": "user"}, {"content": "Sure! Here are some restaurants near your ___location: ...", "role": "assistant"}]}
{"messages": [{"content": "What is the weather like today?", "role": "user"}, {"content": "Today's forecast is sunny with a high of 25°C.", "role": "assistant"}]}
培训提示:
每个示例行的末尾不需要逗号。
尽可能包含尽可能多的高质量和多样化的示例。 为了获得最佳结果,请在
train.json
文件中至少收集几千个训练示例。该文件
test.json
可能更小,但应涵盖预期模型要处理的交互类型。创建
train.json
和test.json
文件,每行包含一个 JSON 对象,每个对象包含用户与助手之间的简短对话。 数据的质量和数量将极大地影响 LoRA 适配器的有效性。
在 AI 工具包中训练 LoRA 适配器
若要使用 适用于 Visual Studio Code 的 AI 工具包训练 LoRA 适配器,首先需要满足以下必需的先决条件:
Azure 订阅在 Azure 容器应用中具有可用配额。
- 我们建议使用 A100 GPU 或更好的 GPU 来高效运行微调作业。
- 检查 Azure 门户中是否有可用的配额。 如果想要帮助查找配额,请参阅 “查看配额”。
如果还没有 Visual Studio Code ,则需要安装它。
安装适用于 Visual Studio Code 的 AI 工具包:
下载 AI 工具包扩展后,你将能够从 Visual Studio Code 内的左侧工具栏窗格中访问它。
导航到 “工具>微调”。
输入项目名称和项目位置。
从模型目录中选择“microsoft/phi-silica”。
选择“配置项目”。
选择最新版本的 Phi Silica。
在 “数据>训练数据集名称 ”和“ 测试数据集名称”下,选择你的
train.json
和test.json
文件。选择“生成项目”- 将打开新的 VS Code 窗口。
确保在 Bicep 文件中选择正确的工作负载配置文件,以便 Azure 作业能够正确部署和运行。 在
workloadProfiles
下添加如下内容:{ workloadProfileType: 'Consumption-GPU-NC24-A100' name: 'GPU' }
选择“新建微调作业”并输入作业的名称。
将出现一个对话框,要求你选择要访问 Azure 订阅的Microsoft帐户。
选择帐户后,需要从订阅下拉菜单中选择资源组。
现在,你将看到微调任务已成功启动,同时显示出任务状态。 作业完成后,可以选择通过选择“下载”按钮来下载新训练的 LoRA 适配器。 完成微调作业通常需要平均 45 - 60 分钟。
推理
训练是 AI 模型从大型数据集中学习、识别模式和相关性的初始阶段。 另一方面,推理是应用阶段,即在本例中训练的 Phi Silica 模型使用新数据(我们的 LoRA 适配器)进行预测或决策,从而生成更具定制化的输出。
要应用经过训练的 LoRA 适配器:
使用 AI 开发画廊应用。 AI 开发库是一个应用,除了查看和导出示例代码之外,还可以试验本地 AI 模型和 API。 详细了解 AI 开发展示。
安装 AI 开发画廊后,打开应用,选择“AI API”选项卡,然后选择“Phi Silica LoRA”。
选择适配器文件。 要存储这些的默认位置为:
Desktop
/lora_lab
/trainedLora
。填写“系统提示”和“提示”字段。 然后选择“生成”,以比较 Phi Silica 使用和不使用 LoRA 适配器时的差异。
试验提示和系统提示,了解这如何对输出产生影响。
选择“导出示例”以下载仅包含此示例代码的独立 Visual Studio 解决方案。
生成响应
使用 AI 开发库测试新的 LoRA 适配器后,可以使用下面的代码示例将适配器添加到 Windows 应用。
using Microsoft.Windows.AI.Text;
using Microsoft.Windows.AI.Text.Experimental;
// Path to the LoRA adapter file
string adapterFilePath = "C:/path/to/adapter/file.safetensors";
// Prompt to be sent to the LanguageModel
string prompt = "How do I add a new project to my Visual Studio solution?";
// Wait for LanguageModel to be ready
if (LanguageModel.GetReadyState() == AIFeatureReadyState.NotReady)
{
var languageModelDeploymentOperation = LanguageModel.EnsureReadyAsync();
await languageModelDeploymentOperation;
}
// Create the LanguageModel session
var session = LanguageModel.CreateAsync();
// Create the LanguageModelExperimental
var languageModelExperimental = new LanguageModelExperimental(session);
// Load the LoRA adapter
LowRankAdaptation loraAdapter = languageModelExperimental.LoadAdapter(adapterFilePath);
// Set the adapter in LanguageModelOptionsExperimental
LanguageModelOptionsExperimental options = new LanguageModelOptionsExperimental
{
LoraAdapter = loraAdapter
};
// Generate a response with the LoRA adapter provided in the options
var response = await languageModelExperimental.GenerateResponseAsync(prompt, options);
负责任的 AI - 微调的风险和限制
当客户微调 Phi 硅时,它可以提高特定任务和域的模型性能和准确性,但也可能会引入客户应注意的新风险和限制。 其中一些风险和限制如下:
数据质量和表示形式:用于微调的数据的质量和代表性可能会影响模型的行为和输出。 如果数据是干扰、不完整、过时的,或者它包含有害内容(如构造型),则模型可以继承这些问题并产生不准确或有害的结果。 例如,如果数据包含性别陈规定型观念,模型可以放大它们并生成性别歧视语言。 客户应仔细选择并预处理其数据,以确保它与预期任务和域相关、多样化和均衡。
模型稳定性和通用化:模型处理各种复杂输入和方案的能力在微调后可能会减少,尤其是在数据太窄或太具体时。 模型可以过度适应数据,并丢失其一些一般知识和功能。 例如,如果数据仅涉及运动,模型可能会难以回答问题或生成有关其他主题的文本。 客户应针对各种输入和方案评估模型的性能和稳定性,并避免将模型用于其范围之外的任务或域。
Regurgitation:虽然训练数据不可用于Microsoft或任何第三方客户,但优化不当的模型可能会复述或直接重复训练数据。 客户负责从训练数据中删除任何 PII 或其他受保护信息,并应评估其优化模型的过度拟合或其他低质量响应。 为避免数据冗余,建议客户提供大型和多样化的数据集。
模型透明度和可解释性:模型逻辑和推理在微调后可能变得更加不透明且难以理解,尤其是在数据复杂或抽象的情况下。 经过微调的模型可以生成意外、不一致或相互矛盾的输出,客户可能无法解释模型到达这些输出的方式或原因。 例如,如果数据与法律或医疗条款有关,则模型可以生成不准确或误导性的输出,并且客户可能无法验证或证明其合理性。 客户应监视和审核模型的输出和行为,并为模型的最终用户提供清晰准确的信息和指导。