Type something to search...
微调 DeepSeek LLM:根据需求调整开源人工智能

微调 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 的工作原理

  1. 将参数更新分解为低秩矩阵: 其中和是低秩矩阵。
  2. 仅对分解后的矩阵(例如,注意力投影)应用更新。
  3. 相较于完全微调,减少内存和计算成本。

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在您的电子商务和零售项目中的潜力! 🚀

文章参考文献:

  1. **DeepSeek LLM:**GitHub 仓库: DeepSeek LLM
  2. **LoRA (低秩适应):**Hu, Edward J., 等. “LoRA: 大型语言模型的低秩适应.” arXiv 预印本 arXiv:2106.09685
  3. **IMDB 数据集:**Hugging Face 数据集: IMDB
  4. **BitsAndBytes (量化):**官方仓库: BitsAndBytes GitHub

紧跟人工智能的前沿!🌟 在 Medium 上关注我,连接 LinkedIn,探索人工智能技术和模型的最新趋势。与我一起深入人工智能的世界,发现新的视野!📚💻

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...