LoRA Fine-Tuning 皮硅

低秩适应(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.jsontest.json 文件,每行包含一个 JSON 对象,每个对象包含用户与助手之间的简短对话。 数据的质量和数量将极大地影响 LoRA 适配器的有效性。

在 AI 工具包中训练 LoRA 适配器

若要使用 适用于 Visual Studio Code 的 AI 工具包训练 LoRA 适配器,首先需要满足以下必需的先决条件:

安装适用于 Visual Studio Code 的 AI 工具包:

  1. 在 Visual Studio Code 中下载 AI 工具包扩展

  2. 下载 AI 工具包扩展后,你将能够从 Visual Studio Code 内的左侧工具栏窗格中访问它。

  3. 导航到 “工具>微调”。

  4. 输入项目名称和项目位置。

  5. 从模型目录中选择“microsoft/phi-silica”。

  6. 选择“配置项目”。

    Visual Studio Code 中 AI 工具包扩展的屏幕截图。

  7. 选择最新版本的 Phi Silica。

  8. “数据>训练数据集名称 ”和“ 测试数据集名称”下,选择你的 train.jsontest.json 文件。

  9. 选择“生成项目”- 将打开新的 VS Code 窗口。

  10. 确保在 Bicep 文件中选择正确的工作负载配置文件,以便 Azure 作业能够正确部署和运行。 在workloadProfiles下添加如下内容:

    { 
         workloadProfileType: 'Consumption-GPU-NC24-A100' 
         name: 'GPU'
    } 
    
  11. 选择“新建微调作业”并输入作业的名称。

  12. 将出现一个对话框,要求你选择要访问 Azure 订阅的Microsoft帐户。

  13. 选择帐户后,需要从订阅下拉菜单中选择资源组。

  14. 现在,你将看到微调任务已成功启动,同时显示出任务状态。 作业完成后,可以选择通过选择“下载”按钮来下载新训练的 LoRA 适配器。 完成微调作业通常需要平均 45 - 60 分钟。

推理

训练是 AI 模型从大型数据集中学习、识别模式和相关性的初始阶段。 另一方面,推理是应用阶段,即在本例中训练的 Phi Silica 模型使用新数据(我们的 LoRA 适配器)进行预测或决策,从而生成更具定制化的输出。

要应用经过训练的 LoRA 适配器:

  1. 使用 AI 开发画廊应用。 AI 开发库是一个应用,除了查看和导出示例代码之外,还可以试验本地 AI 模型和 API。 详细了解 AI 开发展示

  2. 安装 AI 开发画廊后,打开应用,选择“AI API”选项卡,然后选择“Phi Silica LoRA”。

    AI 开发画廊的屏幕截图,显示 Windows AI API,包括 Phi Silica LoRA。

  3. 选择适配器文件。 要存储这些的默认位置为: Desktop / lora_lab / trainedLora

  4. 填写“系统提示”和“提示”字段。 然后选择“生成”,以比较 Phi Silica 使用和不使用 LoRA 适配器时的差异。

  5. 试验提示和系统提示,了解这如何对输出产生影响。

  6. 选择“导出示例”以下载仅包含此示例代码的独立 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 或其他受保护信息,并应评估其优化模型的过度拟合或其他低质量响应。 为避免数据冗余,建议客户提供大型和多样化的数据集。

  • 模型透明度和可解释性:模型逻辑和推理在微调后可能变得更加不透明且难以理解,尤其是在数据复杂或抽象的情况下。 经过微调的模型可以生成意外、不一致或相互矛盾的输出,客户可能无法解释模型到达这些输出的方式或原因。 例如,如果数据与法律或医疗条款有关,则模型可以生成不准确或误导性的输出,并且客户可能无法验证或证明其合理性。 客户应监视和审核模型的输出和行为,并为模型的最终用户提供清晰准确的信息和指导。

另请参阅