
微调 DeepSeek LLM:根据需求调整开源人工智能
介绍
DeepSeek LLM 是一个强大的开源语言模型,但为了最大限度地发挥其在特定应用中的潜力,微调是必不可少的。在本指南中,我们将逐步介绍如何使用 Hugging Face 数据集对 DeepSeek LLM 进行监督微调(SFT),并提供针对特定领域数据集的训练代码示例。我们还将讨论所使用的损失函数、为何使用数据的子集,以及 LoRA(低秩适应)如何实现内存高效的微调。
对于喜欢动手实践的人,请使用此 Google Colab
监督微调 (SFT) 概述
监督微调 (SFT) 是在标记数据集上进一步训练预训练模型的过程,以使其专门化于特定任务,例如客户支持、医学问答或电子商务推荐。
微调的工作原理
微调涉及在特定任务的标记数据上训练模型,其中:
- 输入 (X):提供给模型的文本数据。
- 目标 (Y):基于标记数据的预期输出(例如,情感标签、聊天机器人响应或总结文本)。
- 损失函数:衡量模型的预测与预期输出的匹配程度。用于文本生成的最常用损失函数是交叉熵损失。
例如,在IMDB情感数据集上进行微调时:
- 输入 (X):一条电影评论,如*“这部电影的视觉效果很棒,但情节很弱。”*
- 目标 (Y):正确的标签,例如**“积极”或“消极”情感**。
对于文本生成任务,输入可以是问题,目标可以是模型生成的正确响应。
损失函数使用:交叉熵损失
对于语言模型,我们使用交叉熵损失,它计算预测的令牌分布与实际目标分布之间的差异:
目标是在训练过程中最小化该损失,以便模型学习生成更准确的文本输出。
2. 为什么使用数据的子集?
在资源有限的硬件上对大型语言模型如 DeepSeek LLM 进行微调时,使用完整数据集(例如,包含 25,000 个样本的 IMDB)可能会导致过长的训练时间和 GPU 内存问题。为了解决这个问题,我们:
- 选择了一个子集:用于训练的 500 个样本和用于评估的 100 个样本。
- 保持代表性:这个子集保留了足够的多样性,以实现合理的性能。
使用较小的数据集可以加快实验速度,同时有效地展示微调概念。对于生产级别的微调,应在更强大的基础设施上使用更大的数据集。
3. 加载 DeepSeek LLM
在微调之前,我们需要加载 DeepSeek LLM 并为训练做好准备。
安装所需库
首先,安装必要的依赖:
pip install -U torch transformers datasets accelerate peft bitsandbytes
使用 4 位量化加载模型
我们使用 4 位量化使大型模型兼容有限的 GPU 内存:
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model
model_name = "deepseek-ai/deepseek-llm-7b-base"
## 配置 4 位量化
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16 # 使用 float16 以加快计算速度
)
## 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto"
)
## 应用 LoRA 进行内存高效的微调
lora_config = LoraConfig(
r=8, # 低秩适应大小
lora_alpha=32,
target_modules=["q_proj", "v_proj"], # 将 LoRA 应用到注意力层
lora_dropout=0.05,
bias="none"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
print("✅ DeepSeek LLM 已加载,使用 LoRA 和 4 位精度!")
4. 使用 Hugging Face 数据集进行训练
对于微调,我们需要一个高质量的数据集。Hugging Face 提供了对各种数据集的访问:
选择数据集
在这个例子中,让我们使用 IMDB
数据集 来对 DeepSeek LLM 进行情感分类的微调:
from datasets import load_dataset
## Load dataset
dataset = load_dataset("imdb")
预处理数据集
将文本转换为模型的标记化输入:
def tokenize_function(examples):
inputs = tokenizer(
examples["text"],
truncation=True,
padding="max_length",
max_length=512
)
inputs["labels"] = inputs["input_ids"].copy()
return inputs
tokenized_datasets = dataset.map(tokenize_function, batched=True)
## 为了更快的实验,子集数据集
small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(500))
small_test_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(100))
## 打印一个样本标记化条目
print("标记化样本:")
print(small_train_dataset[0])
5. 什么是 LoRA (低秩适配)?
LoRA (低秩适配) 是一种旨在使大型模型(如 DeepSeek LLM)微调更加节省内存的技术,具体通过以下方式实现:
- 冻结模型的大部分权重。
- 在关键层(例如,注意力层)中引入低秩可训练矩阵。
这大幅减少了可训练参数的数量,同时保持了模型的性能。LoRA 使得在资源受限的硬件上(例如,Colab GPUs)微调大型语言模型成为可能。
LoRA 的工作原理
- 将参数更新分解为低秩矩阵: 其中和是低秩矩阵。
- 仅对分解后的矩阵(例如,注意力投影)应用更新。
- 相较于完全微调,减少内存和计算成本。
6. 代码演示:微调 DeepSeek LLM
设置训练参数
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=3e-4, # 更低的学习率用于LoRA微调
per_device_train_batch_size=1, # 减少批量大小以提高内存效率
gradient_accumulation_steps=8, # 模拟更大的批量大小
num_train_epochs=0.5,
weight_decay=0.01,
save_strategy="epoch",
logging_dir="./logs",
logging_steps=50,
fp16=True, # 混合精度训练
)
初始化训练器
trainer = Trainer(
model=model,
args=training_args,
train_dataset=small_train_dataset,
eval_dataset=small_test_dataset,
)
print("🚀 Trainer Initialized!")
开始微调
print("🚀 Starting Fine-Tuning...")
trainer.train()
保存微调后的模型
trainer.save_model("./fine_tuned_deepseek")
tokenizer.save_pretrained("./fine_tuned_deepseek")
print("✅ Fine-Tuned Model Saved Successfully!")
查看 Google Colab 以获取实践经验
7. 下一步
- 在生产级训练中尝试更大的数据集。
- 探索更高级的LoRA配置以实现高效扩展。
在下一篇文章中,我们将探讨DeepSeek LLM如何革新电子商务和零售。从个性化产品推荐到生成引人入胜的营销内容,我们将深入实际案例和具体示例。了解这个开源强者如何提升客户体验,优化业务运营,并在竞争激烈的零售环境中推动增长。
敬请关注可操作的见解和代码演练,以利用DeepSeek LLM在您的电子商务和零售项目中的潜力! 🚀
文章参考文献:
- **DeepSeek LLM:**GitHub 仓库: DeepSeek LLM
- **LoRA (低秩适应):**Hu, Edward J., 等. “LoRA: 大型语言模型的低秩适应.” arXiv 预印本 arXiv:2106.09685
- **IMDB 数据集:**Hugging Face 数据集: IMDB
- **BitsAndBytes (量化):**官方仓库: BitsAndBytes GitHub
紧跟人工智能的前沿!🌟 在 Medium 上关注我,连接 LinkedIn,探索人工智能技术和模型的最新趋势。与我一起深入人工智能的世界,发现新的视野!📚💻