首页 >后端开发 >Python教程 >使用 .NET Core、Python 和 Azure 微调大型语言模型 (LLM)

使用 .NET Core、Python 和 Azure 微调大型语言模型 (LLM)

Susan Sarandon
Susan Sarandon原创
2025-01-14 07:11:42970浏览

Fine-Tuning Large Language Models (LLMs) with .NET Core, Python, and Azure

目录

  1. 引言
  2. 为什么微调大型语言模型?
  3. 解决方案概述
  4. 环境设置
  5. 使用 Python 进行训练和微调
  6. 在 .NET Core 中集成微调后的模型
  7. 部署到 Azure
  8. 最佳实践
  9. 结论

  1. 引言

大型语言模型 (LLM) 因其理解和生成类似人类文本的能力而受到广泛关注。然而,许多组织拥有独特的、特定于领域的数据集和词汇表,通用模型可能无法完全捕捉到这些数据集和词汇表。微调使开发人员能够根据特定环境或行业调整这些大型模型,从而提高准确性和相关性。

本文将探讨如何使用 Python 微调 LLM,然后将生成的模型集成并部署到 .NET Core C# 应用程序中,所有这些都在 Microsoft Azure 上完成,以实现可扩展性和便捷性。


  1. 为什么微调大型语言模型?

  2. 领域专用性: 可以微调 LLM 以使用特定行业的术语、产品名称或专业术语。

  3. 性能提升: 微调通常会减少错误并在客户服务、研究和分析等用例中提高相关性。

  4. 降低成本: 无需从头开始构建模型,您可以自定义现有的强大 LLM。

  5. 提高效率: 您利用预训练权重,只调整最终层或参数,从而加快流程。


  1. 解决方案概述

组件和技术

  1. 用于微调的 Python

    • 常用库(例如,Hugging Face Transformers、PyTorch)
    • 简化了加载和调整预训练模型的过程
  2. 用于集成的 .NET Core C#

    • 公开微调模型的后端服务或 API
    • 强类型语言,许多企业开发人员都很熟悉
  3. Azure 服务

    • Azure 机器学习 用于训练和模型管理
    • Azure 存储 用于数据和模型工件
    • Azure 应用服务Azure 函数 用于托管 .NET Core 应用程序
    • Azure 密钥保管库(可选)用于保护凭据

  1. 环境设置

先决条件

  • Azure 订阅: 需要创建机器学习工作区和应用服务等资源。
  • Python 3.8 : 在本地安装,用于模型微调。
  • .NET 6/7/8 SDK: 用于创建和运行 .NET Core C# 应用程序。
  • Visual Studio 2022Visual Studio Code: 建议使用的 IDE。
  • Azure CLI: 用于通过终端配置和管理 Azure 服务。
  • Docker(可选):如果需要,可用于容器化您的应用程序。

  1. 使用 Python 进行训练和微调

此示例使用 Hugging Face Transformers——这是最广泛采用的 LLM 微调库之一。

5.1 设置虚拟环境

<code>python -m venv venv
source venv/bin/activate  # 在 Windows 上:venv\Scripts\activate</code>

5.2 安装依赖项

<code>pip install torch transformers azureml-sdk</code>

5.3 创建 Azure 机器学习工作区

  1. 资源组工作区:
<code>   az group create --name LLMFinetuneRG --location eastus
   az ml workspace create --name LLMFinetuneWS --resource-group LLMFinetuneRG</code>
  1. 配置本地环境以连接到工作区(使用 config.json 文件或环境变量)。

5.4 微调脚本 (train.py)

<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>

5.5 在 Azure 中注册模型

<code>from azureml.core.model import Model

model = Model.register(
    workspace=ws,
    model_path="./fine_tuned_model",
    model_name="myFineTunedLLM"
)</code>

此时,您的微调模型已存储在 Azure 机器学习中,方便访问和版本控制。


  1. 在 .NET Core 中集成微调后的模型

6.1 创建 .NET Core Web API 项目

<code>dotnet new webapi -n FineTunedLLMApi
cd FineTunedLLMApi</code>

6.2 添加依赖项

  • HttpClient 用于调用 Azure 端点或本地推理 API
  • Newtonsoft.Json(如果您更喜欢使用 JSON.NET 进行序列化)
  • Azure.Storage.BlobsAzure.Identity 用于安全访问 Azure 资源
<code>dotnet add package Microsoft.Extensions.Http
dotnet add package Microsoft.Azure.Storage.Blob
dotnet add package Newtonsoft.Json</code>

6.3 ModelConsumerService.cs

假设您已将微调后的模型部署为 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>

6.4 LLMController.cs

<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>

6.5 配置 .NET Core 应用程序

Program.csStartup.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>

  1. 部署到 Azure

  2. Azure 应用服务:

    • 对于许多 .NET Core 应用程序来说,这是最简单的途径。
    • 从 Azure 门户或通过 CLI 创建新的 Web 应用
<code>python -m venv venv
source venv/bin/activate  # 在 Windows 上:venv\Scripts\activate</code>
  1. Azure 函数(可选):

    • 如果您的使用是间歇性的或计划性的,则非常适合运行无服务器、事件驱动的逻辑。
  2. Azure Kubernetes 服务 (AKS)(高级):

    • 非常适合大规模部署。
    • 使用 Docker 容器化您的应用程序并将其推送到 Azure 容器注册表 (ACR)。

  1. 最佳实践

  2. 数据隐私: 确保负责任地处理敏感或专有数据,尤其是在模型训练期间。

  3. 监控和日志记录: 集成 Azure Application Insights 以监控性能、跟踪使用情况并检测异常。

  4. 安全性: 使用 Azure 密钥保管库 来存储密钥(API 密钥、连接字符串)。

  5. 模型版本控制: 跟踪 Azure ML 中不同微调版本的模型;如果需要,回滚到旧版本。

  6. 提示工程: 完善您的提示以从微调后的模型中获得最佳结果。


  1. 结论

使用 PythonAzure 机器学习 微调 LLM,然后将它们集成到 .NET Core 应用程序中,使您可以构建强大的特定领域 AI 解决方案。对于寻求利用 Python 的 AI 生态系统和 .NET 的企业功能的组织来说,这种组合是一个极好的选择,所有这些都由 Azure 的可扩展性提供支持。

通过仔细规划安全、数据治理和 DevOps,您可以推出一个满足现实世界需求的生产就绪型解决方案,在强大且易于维护的框架中提供准确的特定领域语言功能。

以上是使用 .NET Core、Python 和 Azure 微调大型语言模型 (LLM)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn