专栏名称: 王路在隐身
发布文章。
目录
相关文章推荐
顾扯淡  ·  回复@月下闻笛:挠了 评论配图 ... ·  昨天  
来去之间  ·  -20250606070744 ·  昨天  
来去之间  ·  转发微博-20250605224127 ·  2 天前  
51好读  ›  专栏  ›  王路在隐身

看不懂代码如何微调DeepSeek-R1蒸馏的Llama-8B模型?

王路在隐身  · 公众号  · 热门自媒体  · 2025-02-11 20:39

主要观点总结

作者两年前微调了开源的大语言模型,并在阿毗达磨问题上进行了测试。他发现模型在阿毗达磨上的表现相对较好,但网上的数据质量极差。作者通过刘琨的帮助,使用unsloth库进行了模型微调,并使用了txt格式的训练数据。他详细解释了安装依赖、配置PEFT模型、数据处理、训练配置和推理的代码。最后,他给出了对代码和性能的详细解释和建议。

关键观点总结

关键观点1: 微调大语言模型

作者微调了开源的大语言模型,并测试了它在阿毗达磨问题上的表现。

关键观点2: 数据质量差

作者发现网上的阿毗达磨数据质量极差,只有1%的数据是正确的。

关键观点3: 使用unsloth库进行微调

作者使用unsloth库进行模型微调,提高了训练效率。

关键观点4: 数据处理和训练配置

作者详细解释了数据处理和训练配置的代码,包括安装依赖、配置PEFT模型、数据处理和训练参数。

关键观点5: 推理和性能优化

作者介绍了用于模型推理的代码,并给出了性能优化和错误处理的建议。


正文

请到「今天看啥」查看全文


jsonl 类型的阿毗达磨数据质量高不了。高质量的数据只能手动去写,但我不可能有那个精力。 AI 根据《俱舍》《婆沙》生成的 1 万条 jsonl 数据,假设其中包含 20 万字,它的价值只相当于俱舍论的 4000 字,这就是为什么用 jsonl 数据训练很不可行。
所以,我简单试了下 jsonl 数据,还是回归到 txt 数据。
2 1 小时可运行的代码
我是在 google colab 上微调的。一开始是用 10MB 的数据,包含《俱舍》《婆沙》《正理》三部阿毗达磨文献全文。还有个更大的,整个毗昙部的文献, 48MB 左右,想先跑通一遍流程,没用那个。用的是 T4 GPU ,最早的代码,显示微调完成需要 36 小时。我想先跑通流程,所以修改参数到最小,又换成一个 4MB 的数据(只包含《俱舍》《正理》),训练需要 1 小时左右。因此,现在放上来的也是这个。
以下的代码解释,每一部分放在一个单元格中,解释是让 Claude 完成的。
%%capture# Normally using pip install unsloth is enough
# Temporarily as of Jan 31st 2025, Colab has some issues with Pytorch# Using pip install unsloth will take 3 minutes, whilst the below takes <1 minute:!pip install --no-deps bitsandbytes accelerate xformers==0.0.29 peft trl triton!pip install --no-deps cut_cross_entropy unsloth_zoo!pip install sentencepiece protobuf datasets huggingface_hub hf_transfer!pip install --no-deps unsloth

好的,我来详细解释这段安装依赖的代码。让我们一步步来看:

1. 首先看到 `%%capture`
- 这是一个Jupyter/Colab的魔法命令
- 它的作用是隐藏命令执行时的输出信息,让notebook看起来更整洁
- 如果不加这个,安装过程中会出现大量的日志信息

2. 关于依赖安装的总体说明
- 通常情况下,只需要运行 `pip install unsloth` 就够了
- 但在2025年1月底,由于Colab环境的特殊性,需要分步安装以提高效率
- 这种方式可以把安装时间从3分钟缩短到1分钟以内

3. 让我们看看安装了哪些核心库:
```python
!pip install --no-deps bitsandbytes accelerate xformers==0.0.29 peft trl triton
```
- `--no-deps`: 表示只安装指定的包,不安装它们的依赖包
- `bitsandbytes`: 用于模型量化,可以减少显存占用
- `accelerate`: Hugging Face的加速训练工具
- `xformers`: Facebook开发的Transformer优化库
- `peft`: Parameter-Efficient Fine-Tuning的缩写,用于高效微调
- `trl`: Transformer Reinforcement Learning,用于强化学习训练
- `triton`: 一个编程语言,用于编写高效的GPU代码

4. 安装特定功能的包:
```python
!pip install --no-deps cut_cross_entropy unsloth_zoo
```
- `cut_cross_entropy`: 优化的交叉熵损失函数实现
- `unsloth_zoo`: unsloth的模型库

5. 安装Hugging Face相关的工具:
```python
!pip install sentencepiece protobuf datasets huggingface_hub hf_transfer
```
- `sentencepiece`: 用于文本分词
- `datasets`: Hugging Face的数据集工具
- `huggingface_hub`: 用于与Hugging Face模型库交互
- `hf_transfer`: 优化的模型下载工具

6. 最后安装unsloth主包:
```python
!pip install --no-deps unsloth
```

这些库构成了一个完整的大语言模型微调环境。使用unsloth可以帮助我们更高效地进行模型微调,它提供了很多优化和加速的特性。

小提示:如果安装过程中遇到错误,可以去掉`%%capture`来查看具体的错误信息,这样更容易排查问题。

from unsloth import FastLanguageModelimport torch
model, tokenizer = FastLanguageModel.from_pretrained( model_name = "unsloth/DeepSeek-R1-Distill-Llama-8B-unsloth-bnb-4bit", max_seq_length = 512, # 减小到512 dtype = None, load_in_4bit = True,)
好的,我来详细解释这段代码的作用。这是加载预训练模型的关键步骤,让我们逐行分析:

1. 首先是导入必要的库:
```python
from unsloth import FastLanguageModel
import torch
```
- `FastLanguageModel` 是unsloth提供的快速语言模型加载工具
- `torch` 是PyTorch深度学习框架,为模型训练提供基础支持

2. 加载预训练模型:
```python
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "unsloth/DeepSeek-R1-Distill-Llama-8B-unsloth-bnb-4bit",
max_seq_length = 512,
dtype = None,
load_in_4bit = True,
)
```

这行代码的各个参数含义如下:

- `model_name`: 指定要加载的模型
- 这里使用的是DeepSeek-R1-Distill-Llama-8B模型
- 这是一个8B参数的Llama架构模型






请到「今天看啥」查看全文