> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# DeepSeek LLM微调指南
- URL: https://www.hubwiz.com/blog/deepseek-llm-fine-tuning-guide/
- Published: 2025-01-25T02:50:08.000Z
- Updated: 2025-01-25T02:50:08.000Z
- Description: 在本指南中，我们将介绍使用监督微调 (SFT) 和 Hugging Face 数据集对 DeepSeek LLM 进行微调的过程，并提供针对特定领域数据集进行训练的分步代码演示。
- Author: admin
- Tags: MODEL-ZOO, DEEPSEEK, SFT, HUGGINGFACE, LORA, GOOGLE-COLAB, TRANSFORMERS, #Import 2026-10-14 14:41

DeepSeek LLM 是一个强大的开源语言模型，但为了最大限度地发挥其在特定应用中的潜力，微调是必不可少的。

在本指南中，我们将介绍使用监督微调 (SFT) 和 Hugging Face 数据集对 DeepSeek LLM 进行微调的过程，并提供针对特定领域数据集进行训练的分步代码演示。我们还将讨论所使用的损失函数、使用数据子集的原因以及 LoRA（低秩自适应）如何实现内存高效的微调。

对于喜欢亲自动手的人，请使用[此 Google Colab](https://colab.research.google.com/drive/1jyEhPnTf2aHAn0jttQ99M2fCaszoZBDU?usp=sharing&source=post%5Fpage-----12a7e5572fa5--------------------------------)。

## 1、监督式微调 (SFT) 概述

监督式微调 (SFT) 是在标记数据集上进一步训练预训练模型的过程，以使其专门用于特定任务，例如客户支持、医疗问答或电子商务推荐。

### 1.1 微调的工作原理

微调涉及在特定于任务的标记数据上训练模型，其中：

- 输入 (X)：提供给模型的文本数据。
- 目标 (Y)：基于标记数据的预期输出（例如，情绪标签、聊天机器人响应或摘要文本）。
- 损失函数：衡量模型的预测与预期输出的匹配程度。文本生成最常用的损失函数是交叉熵损失。

例如，在 IMDB 情绪数据集上进行微调时：

- 输入 (X)：电影评论，例如“这部电影的视觉效果很棒，但情节很弱。”
- 目标 (Y)：正确的标签，例如“积极”或“消极”情绪。

对于文本生成任务，输入可能是一个问题，而目标可能是模型生成的正确响应。

### 1.2 使用的损失函数：交叉熵损失

对于语言模型，我们使用交叉熵损失，它计算预测的标记分布与实际目标分布之间的差异：

![](https://www.hubwiz.com/blog/content/images/2025/01/image-430.png)

目标是在训练期间尽量减少这种损失，以便模型学习生成更准确的文本输出。

## 2、为什么使用数据子集？

在资源有限的硬件上微调像 DeepSeek LLM 这样的大型语言模型时，在完整数据集（例如，具有 25,000 个样本的 IMDB）上进行训练可能会导致过多的训练时间和 GPU 内存问题。为了缓解这种情况，我们：

- 选择一个子集：500 个样本用于训练，100 个样本用于评估。
- 保持代表性：该子集保留了足够的多样性以实现合理的性能。

使用较小的数据集可以加快实验速度，同时有效地展示微调概念。对于生产级微调，应在更强大的基础设施上使用更大的数据集。

## 3、加载 DeepSeek LLM

在微调之前，我们需要加载 DeepSeek LLM 并准备进行训练。

### 3.1 安装所需的库

首先，安装必要的依赖项：

```
pip install -U torch transformers datasets accelerate peft bitsandbytes
```

### 3.2 使用 4 位量化加载模型

我们使用 4 位量化使大型模型与有限的 GPU 内存兼容：

```
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model

model_name = "deepseek-ai/deepseek-llm-7b-base"
# Configure 4-bit quantization
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16  # Use float16 for faster computation
)
# Load tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    quantization_config=bnb_config, 
    device_map="auto"
)
# Apply LoRA for memory-efficient fine-tuning
lora_config = LoraConfig(
    r=8,  # Low-rank adaptation size
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],  # Apply LoRA to attention layers
    lora_dropout=0.05,
    bias="none"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
print("✅ DeepSeek LLM Loaded with LoRA and 4-bit Precision!")
```

## 4、使用 Hugging Face 数据集进行训练

为了进行微调，我们需要一个高质量的数据集。 Hugging Face 提供对各种数据集的访问：

### 4.1 选择数据集

对于此示例，让我们使用 IMDB 数据集对 DeepSeek LLM 进行情绪分类微调：

```
from datasets import load_dataset

# Load dataset
dataset = load_dataset("imdb")
```

### 4.2 预处理数据集

将文本转换为模型的标记化输入：

```
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)
# Subset the dataset for faster experimentation
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 a sample tokenized entry
print("Tokenized Sample:")
print(small_train_dataset[0])
```

## 5、什么是 LoRA（低秩自适应）？

LoRA（低秩自适应）是一种旨在通过以下方式使 DeepSeek LLM 等大型模型的微调更加节省内存的技术：

- 冻结模型的大部分权重。
- 在关键层（例如注意层）中引入低秩可训练矩阵。

这大大减少了可训练参数的数量，同时保持了模型的性能。LoRA 可以在资源受限的硬件（例如 Colab GPU）上微调大型语言模型。

## 6、代码演练：微调 DeepSeek LLM

首先设置训练参数：

```
from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=3e-4,  # Lower learning rate for LoRA fine-tuning
    per_device_train_batch_size=1,  # Reduce batch size for memory efficiency
    gradient_accumulation_steps=8,  # Simulate larger batch size
    num_train_epochs=0.5,
    weight_decay=0.01,
    save_strategy="epoch",
    logging_dir="./logs",
    logging_steps=50,
    fp16=True,  # Mixed precision training
)
```

初始化训练器：

```
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](https://colab.research.google.com/drive/1jyEhPnTf2aHAn0jttQ99M2fCaszoZBDU?usp=sharing&source=post%5Fpage-----12a7e5572fa5--------------------------------) 进行实践。

## 7、后续步骤

- 尝试使用更大的数据集进行生产级训练。
- 探索更高级的 LoRA 配置以实现高效扩展。

在下一篇文章中，我们将探讨 DeepSeek LLM 如何彻底改变电子商务和零售业。从个性化产品推荐到生成引人入胜的营销内容，我们将深入研究现实世界的用例和实际示例。了解这个开源巨头如何增强客户体验、优化业务运营并在竞争激烈的零售领域推动增长。

---

原文链接：[Fine-Tuning DeepSeek LLM: Adapting Open-Source AI for Your Needs](https://abhishek-maheshwarappa.medium.com/fine-tuning-deepseek-llm-adapting-open-source-ai-for-your-needs-12a7e5572fa5?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处