使用 Nebius 在几分钟内微调你的 LLM

大家好,这里是架构资源栈 !点击上方关注,添加"星标",一起学习大厂前沿架构!

介绍

大型语言模型很棒!但在执行特定任务或成为领域主题专家时,它就不那么好了。

这就是精细调整发挥作用的地方!

在本文中,我将分享如何使用 Nebius Ai Studio 在几分钟内微调您的 LLM。

因此,事不宜迟,

让我们开始吧!

什么是微调?

在开始之前,让我们先了解一下什么是微调!

简单来说,微调是采用预先训练的模型并在特定领域的数据集上进一步训练的过程。

我们都知道如今的法学硕士 (LLM) 非常强大,但它们对于专业任务来说还远远不够完美。而成为专家的最佳方法之一就是利用特定领域的知识进行微调。

这意味着针对我们想要实现的确切任务重新训练模型的某些部分。这比重新训练整个模型的成本更低。

然而,对于像我这样不是传统 ML 工程师的人来说,微调你的 LLM 并非易事。Nebius AI Studio 让你更轻松地微调你的开源 LLM。

借助其直观的 UI 平台或 Python SDK,每个人都可以进行微调,无论他们是否熟悉编码。

🎥想要快速教程吗?观看此分步视频:

如何使用 Nebius 微调你的法学硕士课程

现在,让我们看看如何使用 Nebius AI Studio 轻松地微调您的 LLM。

因此,Nebius AI Studio 提供了三种方法来微调您的 LLM:

  • Web 控制台------一种无需代码的解决方案,可轻松进行微调。

  • Python SDK -- 一种使用 Python 的开发人员友好型方法。

  • cURL 请求- 基于 API 的自动化和脚本微调。

我们将了解如何使用每种方法微调您的模型。

先决条件

1. 选择模型

首先,你需要选择需要微调的模型。Nebius AI Studio 支持30 多种领先模型的微调,包括:

  • Llama 3 系列(1B--70B 参数)

  • Qwen 系列(15 亿至 720 亿个参数)

  • DeepSeek R1和其他专用模型

您可以浏览可用模型并选择适合您用例的模型。

2.准备数据集

接下来,您必须准备用于训练模型和验证训练结果的数据集。Nebius AI Studio 支持数据集文件的JSON行格式 ( )。. jsonl

💡提示:将数据分成两个数据集,80--90%用于训练,10--20%用于验证

3. 获取您的 API 密钥

获取 Nebius API 密钥并将其存储在.env变量中

ini 复制代码
NEBIUS_API_KEY=<Your_API_key>

Enter fullscreen mode Exit fullscreen mode

完成这些步骤后,您就可以开始微调模型了。

通过 Web 控制台进行微调(无需编码)

微调 LLM 的最简单方法是通过Nebius AI Studio 的 Web 控制台。您无需为此编写一行代码。

  • 登录Nebius AI Studio 并转到微调部分。

  • 上传您的训练和验证数据集。

  • 选择您的模型和微调参数。

  • 单击创建作业

  • 使用所需模型名称下的检查点链接下载包含微调模型的文件。

我制作了一个视频来展示如何做到这一点,你可以在这里查看。

通过 Python SDK 进行微调

如果您更喜欢使用 Python,则可以使用 Nebius 的 Python SDK 以编程方式微调您的模型。

1.安装依赖项

首先,我们将使用以下命令安装依赖项:

复制代码
pip3 install openai

Enter fullscreen mode Exit fullscreen mode

2.设置OpenAI客户端

使用 Nebius AI 的 API 端点和您的 API 密钥设置 OpenAI 客户端

ini 复制代码
import os
from openai import OpenAI
import time

client = OpenAI(
    base_url="https://api.studio.nebius.com/v1/",
    api_key=os.environ.get("NEBIUS_API_KEY"),
)

Enter fullscreen mode Exit fullscreen mode

3.上传你的数据集

接下来,我们将上传之前创建的训练数据集和验证数据集

ini 复制代码
# Upload a training dataset
training_dataset = client.files.create(
    file=open("<dataset_name>.jsonl", "rb"), # Specify the dataset name
    purpose="fine-tune"
)

# Upload a validation dataset
validation_dataset = client.files.create(
    file=open("<dataset_name>.jsonl", "rb"), # Specify the dataset name
    purpose="fine-tune"
)

Enter fullscreen mode Exit fullscreen mode

4. 创建微调作业

之后,我们需要定义微调参数,例如epoch 的数量 以及是否使用LoRA 自适应来提高效率。

如果您想添加更多参数,请查看Nebius Docs 以获取更多信息。

python 复制代码
job_request = {
    "model": "meta-llama/Llama-3.1-8B-Instruct", # Choose the model
    "training_file": training_dataset.id,
    "validation_file": validation_dataset.id,
    "hyperparameters": {
        "n_epochs": 3, # Number of epochs for training
        "lora": True,  # Enable LoRA for fine-tuning efficiency
    },
    "integrations": [],
}

Enter fullscreen mode Exit fullscreen mode

然后我们将创建并运行微调作业

ini 复制代码
# Create and run the fine-tuning job
job = client.fine_tuning.jobs.create(**job_request)

Enter fullscreen mode Exit fullscreen mode

5. 监控作业状态

如果您正在微调模型,则meta-llama/Llama-3.1-70B-Instruct可能需要一些时间。为此,我们将定期检查作业是否仍在运行或已完成:

python 复制代码
# Make sure that the job has been finished or cancelled
active_statuses = ["validating_files", "queued", "running"]
while job.status in active_statuses:
    time.sleep(15)
    job = client.fine_tuning.jobs.retrieve(job.id)
    print("current status is", job.status)

print("Job ID:", job.id)

Enter fullscreen mode Exit fullscreen mode

6. 检索检查点并保存

微调会创建多个检查点(模型的中间版本)。我们将检索它们并将文件保存到这些目录中。

ini 复制代码
if job.status == "succeeded":
    # Check the job events
    events = client.fine_tuning.jobs.list_events(job.id)
    print(events)

    for checkpoint in client.fine_tuning.jobs.checkpoints.list(job.id).data:
        print("Checkpoint ID:", checkpoint.id)

        # Create a directory for every checkpoint
        os.makedirs(checkpoint.id, exist_ok=True)

        for model_file_id in checkpoint.result_files:
            # Get the name of a model file
            filename = client.files.retrieve(model_file_id).filename

            # Retrieve the contents of the file
            file_content = client.files.content(model_file_id)

            # Save the contents into a local file
            file_content.write_to_file(filename)

Enter fullscreen mode Exit fullscreen mode

我们已经对模型进行了微调!接下来,我们将托管这些模型。

你可以在 Google Colab 上以交互方式尝试此方法: Colab Notebook

通过 cURL 请求进行微调

如果您更喜欢基于 API 的微调 或想要自动化 该过程,您可以使用cURL 请求直接与 Nebius AI Studio 交互。

1.上传你的数据集

运行以下 cURL 命令来上传您的训练数据集:

bash 复制代码
curl 'https://api.studio.nebius.com/v1/files' 
   -H 'Accept: application/json' 
   -H 'Content-Type: multipart/form-data' 
   -H "Authorization: Bearer $NEBIUS_API_KEY"
   -F 'file=@<dataset-name>.jsonl' 
   -F 'purpose=fine-tune'

Enter fullscreen mode Exit fullscreen mode

💡 注意:保存响应中的文件 ID;这是创建微调作业所必需的。

同样,上传你的验证数据集:

rust 复制代码
curl 'https://api.studio.nebius.com/v1/files' 
   -X 'POST' 
   -H 'Authorization: Bearer $NEBIUS_API_KEY' 
   -H 'Accept: application/json' 
   -H 'Content-Type: multipart/form-data' 
   -F 'file=@validation_dataset.jsonl' 
   -F 'purpose=fine-tune'

Enter fullscreen mode Exit fullscreen mode

2. 发送微调请求:

现在,我们将通过运行以下命令来创建一个微调作业:

vbnet 复制代码
curl 'https://api.studio.nebius.com/v1/fine_tuning/jobs' 
   -X 'POST' 
   -H 'Authorization: Bearer $NEBIUS_API_KEY' 
   -H 'Accept: application/json' 
   -H 'Content-Type: application/json' 
   -d '{
      "model": "meta-llama/Llama-3.1-8B-Instruct",
      "training_file": "your_training_file_id",
      "validation_file": "your_validation_file_id",
      "hyperparameters": {
         "n_epochs": 3, 
         "batch_size": 8,
         "learning_rate": 0.0001,
         "lora": true,
         "lora_r": 16,
         "lora_alpha": 32,
         "lora_dropout": 0.1,
         "weight_decay": 0.01
      }
   }'

Enter fullscreen mode Exit fullscreen mode

💡 替换占位符:

  • "your_training_file_id"→ 步骤2中的文件ID。

  • "your_validation_file_id"→ 步骤2中的文件ID。

提交后,Nebius AI Studio 将返回一个作业 ID。请保留此 ID 以跟踪进度

4. 监控微调作业

微调需要时间。要检查作业的状态,请运行以下命令:

rust 复制代码
curl 'https://api.studio.nebius.com/v1/fine_tuning/jobs/<job_ID>' 
   -X 'GET' 
   -H 'Accept: application/json' 
   -H 'Authorization: Bearer $NEBIUS_API_KEY'

Enter fullscreen mode Exit fullscreen mode

确保训练已成功。为此,请检查作业事件。它们是在作业状态发生变化时创建的。

lua 复制代码
curl 'https://api.studio.nebius.com/v1/fine_tuning/jobs/<job_ID>/events' 
   -X 'GET' 
   -H 'Accept: application/json' 
   -H 'Authorization: Bearer $NEBIUS_API_KEY' 
   --url-query limit=<...> 
   --url-query after=<...>

Enter fullscreen mode Exit fullscreen mode

5. 检索检查点

微调完成后**,您可以检索训练好的模型检查点**。这些是模型在不同阶段保存的中间版本。

rust 复制代码
curl 'https://api.studio.nebius.com/v1/fine_tuning/jobs/<job_ID>/checkpoints' 
   -X 'GET' 
   -H 'Accept: application/json' 
   -H 'Authorization: Bearer $NEBIUS_API_KEY'

Enter fullscreen mode Exit fullscreen mode

我们将在响应中获得检查点 ID。

每个检查点由多个文件组成,这些文件包含微调模型的不同部分。要获取文件名和扩展名,请使用:

rust 复制代码
curl 'https://api.studio.nebius.com/v1/files/<file_ID>' 
   -X 'GET' 
   -H 'Accept: application/json' 
   -H 'Authorization: Bearer $NEBIUS_API_KEY'

Enter fullscreen mode Exit fullscreen mode

对检查点中的每个文件重复此请求以下载所有必需的文件。

6. 下载微调模型

检索模型文件内容后,请确保使用正确的文件名和扩展名保存它们

rust 复制代码
curl 'https://api.studio.nebius.com/v1/files/<file_ID>/content' 
   -X 'GET' 
   -H 'Accept: application/json' 
   -H 'Authorization: Bearer $NEBIUS_API_KEY'

Enter fullscreen mode Exit fullscreen mode

对检查点中的每个文件重复此请求以下载所有必需的文件。

7. 正确保存模型文件

检索模型文件内容后,请确保使用正确的文件名和扩展名保存它们

在 Nebius AI Studio 上托管您的微调模型

模型微调后,下一步就是让您自己和其他人可以访问它。在****Nebius AI Studio上托管模型可让您无缝部署和使用它。

无论是精细化的LLM 还是LoRA适配器,都可以直接通过平台请求托管。

在开始之前,请确保您已:

✅已准备好部署的经过微调的模型

✅包含档案中的模型文件的共享云存储链接。

按照以下简单步骤在 Nebius AI Studio 中托管您的模型

Web 控制台中,转到微调部分。

  1. 单击 请求模型或 LoRA 托管

  2. 在打开的窗口中,选择请求 LoRA 模型托管

  3. 输入型号名称 并确保您的电子邮件正确。

  4. 将链接粘贴到您的模型文件档案 并(如果适用)描述您的LoRA 适配器类型

  5. 单击提交 ,您的请求将被发送到Nebius AI 支持团队进行处理。

一旦获得批准,您的模型将被托管并可供使用!

结论

就这样了!在本文中,我们了解了如何通过 3 种不同的方法轻松地微调我们的 LLM。

如果您发现这篇文章有用,请与您的同行和社区分享,以传播此信息。

如果您对此有任何疑问,请随意发表评论或直接发信息给我!

感谢您的阅读!

原文地址:mp.weixin.qq.com/s/ReimGEYxn... 本文由博客一文多发平台 OpenWrite 发布!

相关推荐
猫咪-952737 分钟前
数据库原理及应用mysql版陈业斌实验三
java·数据库·sql
异常君44 分钟前
深入剖析 Java ReentrantLock:解锁显式锁的高级特性与实战应用
java·后端
写bug写bug1 小时前
彻底搞懂如何通过 ZooKeeper 实现注册中心
java·后端·zookeeper
写bug写bug1 小时前
try-catch应该写在for循环里面还是外面?
java·后端
TOWNST1 小时前
正则表达式使用知识(日常翻阅)
java·python·正则表达式
刘龙超1 小时前
如何应对 Android 面试官 -> 电量如何优化?
android·java
向哆哆1 小时前
Java 企业级应用:SOA 与微服务的对比与选择
java·开发语言·微服务
登登登__2 小时前
MongoDB
java
ππ记录2 小时前
java面试题带答案2025最新整理
java·开发语言
PHASELESS4112 小时前
Java栈与队列深度解析:结构、实现与应用指南
java·开发语言·算法