近年来,随着大语言模型(LLMs)的爆发式发展,越来越多的开发者和中小型公司希望利用这些强大的工具。然而,从零开始构建一个拥有数十亿参数的模型并不现实,算力、资源和技术壁垒让这一目标望尘莫及。
幸运的是,我们可以借助大公司推出的预训练模型,如 Meta Llama、Microsoft Orca、Cohere Aya、Google Gemma 和 Mistral AI 等,直接在其基础上进行优化,以满足具体应用需求。
当现成的预训练模型无法完全满足使用场景时,有三种常见解决方案可供选择:Prompt Engineering(提示工程)、Retrieval-Augmented Generation(检索增强生成)以及 Fine-tuning(微调)。
今天,我们将着重探讨微调方法,帮助你快速掌握这一领域的核心技巧。
为什么选择 Fine-tuning?
相比简单的提示工程或检索增强生成,微调可以让模型真正掌握领域知识,适应特定任务需求。通过调整超参数、优化损失函数或结合领域数据,微调能从根本上提升模型的生成质量和实用性。
无论你选择哪种微调方法,关键在于找到适合自己场景的工具和技术。比如 SFT 适合初学者,RLHF 在偏好明确的任务中表现优越,而 ORPO 则是最新潮的选择,为复杂应用提供了新的可能性。
常见的 Fine-tuning 方法
1. 监督式微调(Supervised Fine-Tuning, SFT)
这是最常见且易于上手的微调方法。
- 核心思路:通过提供一对描述(如问题+回答或段落+总结),用交叉熵损失(CrossEntropyLoss)训练模型预测完整文本。
- 过程:SFT 的训练方式本质上是让自回归模型(Autoregressive Model)不断预测下一个 token,逐步提高生成文本的质量。
- 适用场景:需要模型掌握某一特定领域的知识或生成特定风格的内容。
2. 偏好对齐方法(Preference Alignment)
(1) 基于人类反馈的强化学习(Reinforcement Learning with Human Feedback, RLHF)
- 三步流程:
- 收集偏好数据集:针对同一个问题,提供两个答案并标注优劣。
- 训练奖励模型(Reward Model):基于偏好数据集,构建一个评分机制。
- 强化学习优化:结合奖励模型与强化学习算法(如 PPO),教导 LLM 提供更优质的回答。
(2) 直接偏好优化(Direct Preference Optimization, DPO)
- 特点:
直接使用损失函数对偏好进行优化,无需训练奖励模型。 训练过程更简单,且更稳定。 - 适用场景:大部分应用中,DPO 是更易于实施的选择,尤其在小型数据集上更具优势。
- 研究发现:在部分数据集中,RLHF 仍表现更佳,但成本较高。
(3) 单体偏好优化(Monolithic Preference Optimization, ORPO)
- 创新点:ORPO 是 2024 年提出的全新方法,旨在融合 SFT 和偏好对齐的步骤。
- 原理:
解决了 SFT 过程中负对样本(不偏好的答案)缺乏惩罚的问题。 在优化过程中,不仅提升了理想答案的预测概率,还有效减少了不理想答案的可能性。 - 优势:结合领域知识学习和偏好对齐,同时保证收敛稳定性,适合更复杂的微调任务。
原文:https://arxiv.org/abs/2403.07691
ORPO Fine-tuning:https://huggingface.co/blog/mlabonne/orpo-llama-3
微调LLM常用的工具库与框架
在微调大语言模型(LLMs)的过程中,选择合适的工具库和框架可以极大地简化开发流程,提高效率。以下是常用的工具和集成框架汇总,让你快速入门并灵活应用。
常用工具库
bitsandbytes
提供多种 LLM 量化(quantization)相关的工具,包括层(layer)、函数(function)和优化器(optimizer)。 适用于需要优化存储和算力的任务,尤其是大规模模型的微调。
Parameter-Efficient Fine-Tuning (PEFT)
专注于参数高效微调,提供多种方法,其中最知名的是 LoRA(Low-Rank Adaptation)及其衍生算法。 隶属于 HuggingFace 生态系统,支持无缝集成 HuggingFace 的模型,非常适合快速开发和实验。
Transformer Reinforcement Learning (TRL)
- SFT(监督式微调)。
- RLHF所需的奖励建模(Reward Modeling, RM)和近端策略优化(PPO)。
- DPO(直接偏好优化)。
同样属于 HuggingFace 生态系统,支持多种微调方法: 适合需要实现复杂训练流程的开发者。
wandb
用于跟踪和记录模型训练过程中的数据,包括超参数设置、训练进度等信息。 是许多训练框架的配套工具,让实验更加可视化和规范化。
常用微调框架
LLaMA-Factory
微调框架,尽管以 "LLaMA" 命名,但实际上支持超过 100 种语言模型(LM)。 提供微调所需的各种工具,并集成了友好的 WebUI 界面,大幅简化了训练流程,非常适合初学者快速上手。
Alpaca-Lora
早期开源项目,提供简单的微调脚本,支持基础的 LoRA 微调功能。 - 注意:项目已停止更新,但仍可作为入门参考(曾有人提议整合 QLoRA,但未被采纳)。
torchtune
由 PyTorch 团队推出的微调框架,整体架构设计简洁易懂,适合学习和实践。 - 推荐:框架上手简单,本文后续会提供独立教程,进一步介绍其使用方法与案例。
## instruct
{
"instruction": "You are an AI assistant. Provide a detailed and long answer to the given task.",
"input": "Explain the benefits of regular exercise.",
"output": "Regular exercise improves physical health, boosts mental well-being, increases energy levels, enhances sleep quality, and helps maintain a healthy weight."
}
## chat
{
"conversations": [
{
"from": "system",
"value": "You are an AI assistant. You will be given a task. You must generate a detailed and long answer."
},
{
"from": "human",
"value": "Explain the importance of the internet in modern life."
},
{
"from": "gpt",
"value": "The internet is crucial in modern life as it facilitates communication, access to information, online education, e-commerce, and social connectivity, revolutionizing how people work, learn, and interact."
}
]
}
import openai
from openai import OpenAI
from yogahub.cfg import settings
client = OpenAI(
# Not necessary if you already export OPENAI_API_KEY
api_key=settings.OPENAI_API_KEY,
)
def generate_chat_completion(prompt: str, model: str = "gpt-4o"):
try:
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": prompt,
}
],
model=model,
)
return chat_completion.choices[0].message.content
except Exception as e:
return f"An error occurred: {e}"
if __name__ == "__main__":
prompt = "Say Hello World!"
response_content = generate_chat_completion(prompt)
print(response_content)
Github REAME : https://github.com/jeff52415/yoga-model-hub/blob/main/docs/fine_tune_llm.md
Jupyter Notebook Tutorial:https://github.com/jeff52415/yoga-model-hub/blob/main/notebooks/fine_tune_llm.ipynb