大型语言模型 (LLM) 因其理解和生成类似人类文本的能力而受到广泛关注。然而,许多组织拥有独特的、特定于领域的数据集和词汇表,通用模型可能无法完全捕捉到这些数据集和词汇表。微调使开发人员能够根据特定环境或行业调整这些大型模型,从而提高准确性和相关性。
本文将探讨如何使用 Python 微调 LLM,然后将生成的模型集成并部署到 .NET Core C# 应用程序中,所有这些都在 Microsoft Azure 上完成,以实现可扩展性和便捷性。
领域专用性: 可以微调 LLM 以使用特定行业的术语、产品名称或专业术语。
性能提升: 微调通常会减少错误并在客户服务、研究和分析等用例中提高相关性。
降低成本: 无需从头开始构建模型,您可以自定义现有的强大 LLM。
提高效率: 您利用预训练权重,只调整最终层或参数,从而加快流程。
用于微调的 Python
用于集成的 .NET Core C#
Azure 服务
此示例使用 Hugging Face Transformers——这是最广泛采用的 LLM 微调库之一。
<code>python -m venv venv source venv/bin/activate # 在 Windows 上:venv\Scripts\activate</code>
<code>pip install torch transformers azureml-sdk</code>
<code> az group create --name LLMFinetuneRG --location eastus az ml workspace create --name LLMFinetuneWS --resource-group LLMFinetuneRG</code>
<code>import os import torch from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer from azureml.core import Workspace, Run # 连接到 Azure ML ws = Workspace.from_config() run = Run.get_context() model_name = "gpt2" # 示例模型 tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name) # 加载自定义数据集(本地或来自 Azure 存储) # 示例:Azure ML 中的文本文件或数据集 train_texts = ["此处输入您的特定领域文本..."] # 简化版 train_encodings = tokenizer(train_texts, truncation=True, padding=True) class CustomDataset(torch.utils.data.Dataset): def __init__(self, encodings): self.encodings = encodings def __len__(self): return len(self.encodings["input_ids"]) def __getitem__(self, idx): return {k: torch.tensor(v[idx]) for k, v in self.encodings.items()} train_dataset = CustomDataset(train_encodings) training_args = TrainingArguments( output_dir="./results", num_train_epochs=3, per_device_train_batch_size=2, save_steps=100, logging_steps=100 ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, ) trainer.train() # 保存微调后的模型 trainer.save_model("./fine_tuned_model") tokenizer.save_pretrained("./fine_tuned_model")</code>
<code>from azureml.core.model import Model model = Model.register( workspace=ws, model_path="./fine_tuned_model", model_name="myFineTunedLLM" )</code>
此时,您的微调模型已存储在 Azure 机器学习中,方便访问和版本控制。
<code>dotnet new webapi -n FineTunedLLMApi cd FineTunedLLMApi</code>
<code>dotnet add package Microsoft.Extensions.Http dotnet add package Microsoft.Azure.Storage.Blob dotnet add package Newtonsoft.Json</code>
假设您已将微调后的模型部署为 Web 服务(例如,使用 Azure 容器实例或 Azure ML 中的自定义端点)。以下代码段调用该服务以获取完成结果。
<code>using Newtonsoft.Json; using System.Net.Http; using System.Text; using System.Threading.Tasks; public class ModelConsumerService { private readonly HttpClient _httpClient; public ModelConsumerService(IHttpClientFactory httpClientFactory) { _httpClient = httpClientFactory.CreateClient("FineTunedModel"); } public async Task<string> GetCompletionAsync(string prompt) { var requestBody = new { prompt = prompt }; var content = new StringContent( JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync("/predict", content); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsStringAsync(); } }</code>
<code>using Microsoft.AspNetCore.Mvc; using System.Threading.Tasks; [ApiController] [Route("[controller]")] public class LLMController : ControllerBase { private readonly ModelConsumerService _modelService; public LLMController(ModelConsumerService modelService) { _modelService = modelService; } [HttpPost("complete")] public async Task<IActionResult> CompletePrompt([FromBody] PromptRequest request) { var result = await _modelService.GetCompletionAsync(request.Prompt); return Ok(new { Completion = result }); } } public class PromptRequest { public string Prompt { get; set; } }</code>
在 Program.cs 或 Startup.cs 中:
<code>var builder = WebApplication.CreateBuilder(args); // 注册 HttpClient builder.Services.AddHttpClient("FineTunedModel", client => { client.BaseAddress = new Uri("https://your-model-endpoint/"); }); // 注册 ModelConsumerService builder.Services.AddTransient<ModelConsumerService>(); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();</code>
Azure 应用服务:
<code>python -m venv venv source venv/bin/activate # 在 Windows 上:venv\Scripts\activate</code>
Azure 函数(可选):
Azure Kubernetes 服务 (AKS)(高级):
数据隐私: 确保负责任地处理敏感或专有数据,尤其是在模型训练期间。
监控和日志记录: 集成 Azure Application Insights 以监控性能、跟踪使用情况并检测异常。
安全性: 使用 Azure 密钥保管库 来存储密钥(API 密钥、连接字符串)。
模型版本控制: 跟踪 Azure ML 中不同微调版本的模型;如果需要,回滚到旧版本。
提示工程: 完善您的提示以从微调后的模型中获得最佳结果。
使用 Python 和 Azure 机器学习 微调 LLM,然后将它们集成到 .NET Core 应用程序中,使您可以构建强大的特定领域 AI 解决方案。对于寻求利用 Python 的 AI 生态系统和 .NET 的企业功能的组织来说,这种组合是一个极好的选择,所有这些都由 Azure 的可扩展性提供支持。
通过仔细规划安全、数据治理和 DevOps,您可以推出一个满足现实世界需求的生产就绪型解决方案,在强大且易于维护的框架中提供准确的特定领域语言功能。
以上是使用 .NET Core、Python 和 Azure 微调大型语言模型 (LLM)的详细内容。更多信息请关注PHP中文网其他相关文章!