Unsloth微调DeepSeek-R1蒸馏模型 - 构建医疗专家模型

00:13:18
https://www.youtube.com/watch?v=XJH3fJ1X9wg

Resumo

TLDRVideo ini menerangkan cara menggunakan Unsloth untuk melakukan fine-tuning pada model DeepSeek R1 dengan dataset perubatan. Proses ini merangkumi persediaan persekitaran, pemilihan model asas, pengunduhan model, penyediaan dataset, dan pelaksanaan fine-tuning. Penonton juga diperkenalkan kepada cara memeriksa prestasi model sebelum dan selepas fine-tuning dan bagaimana untuk mengurus dataset bagi memastikan hasil yang berkualiti. Terdapat penekanan pada pentingnya memilih model asas yang sesuai bagi meningkatkan prestasi akhir model dalam aplikasi khusus.

Conclusões

  • 🛠️ Memanfaatkan Unsloth untuk fine-tuning model.
  • 📊 Penggunaan dataset perubatan untuk meningkatkan kecekapan model.
  • 💻 Menyiapkan persekitaran pengaturcaraan yang betul.
  • 📦 Memuat turun dan memilih model asas yang sesuai.
  • 📝 Memahami proses loceng output sebelum dan selepas fine-tuning.
  • 🔍 Menganalisis dan membandingkan hasil fine-tuning dengan hasil asal.
  • ⚙️ Menggunakan fungsi dari Unsloth untuk memuatkan model.
  • 📚 Persediaan dataset dan proses pembersihan data.
  • ⏳ Memantau penggunaan sumber semasa latihan.
  • ⌨️ Menggunakan Jupyter Notebook dalam Colab untuk hasil yang efisien.

Linha do tempo

  • 00:00:00 - 00:05:00

    Di dalam video ini, pengacara memperkenalkan kaedah penggunaan Unsloth untuk menyesuaikan model DeepSeek R1 menggunakan set data perubatan. Pengacara menunjukkan langkah-langkah dalam menyiapkan lingkungan pemodelan dan kesan penting dari penyelarasan model besar kepada prestasi yang lebih baik dalam tugas tertentu. Perbincangan juga merangkumi keperluan untuk menggunakan model dasar yang tepat yang sesuai dengan senario aplikasi dan memerlukan pertimbangan terhadap sumber penyimpanan dan data yang tersedia.

  • 00:05:00 - 00:13:18

    Setelah menyediakan model dasar, pengacara beralih ke penyediaan set data dan menerangkan proses pembersihan yang diperlukan untuk membina data latihan yang efisien. Melalui pemilihan yang berhati-hati dari model dan pemahaman tentang set data, pengacara menunjukkan bagaimana untuk memanfaatkan model yang sudah dilatih dan menilai hasil dengan memberikan soalan dan membandingkan jawapan yang dihasilkan, seterusnya mendedahkan keperluan untuk latihan selanjutnya guna meningkatkan ketepatan pengeluaran.

Mapa mental

Vídeo de perguntas e respostas

  • Apa itu fine-tuning dalam konteks pembelajaran mesin?

    Fine-tuning adalah proses menyesuaikan model pralatih untuk mencapai prestasi yang lebih baik dalam tugas atau domain tertentu.

  • Apa kegunaan Unsloth dalam projek ini?

    Unsloth digunakan sebagai alat untuk melakukan fine-tuning pada model DeepSeek R1 dengan dataset perubatan.

  • Mengapa penting untuk memilih model asas yang tepat?

    Model asas yang tepat dapat memastikan bahawa hasil fine-tuning akan lebih relevan dan berprestasi baik dalam tugas tertentu.

  • Apa yang dimaksudkan dengan dataset di sini?

    Dataset merujuk kepada kumpulan data yang digunakan untuk melatih dan menguji model, dalam kes ini, berkaitan dengan perubatan.

  • Berapa lama masa yang diambil untuk proses fine-tuning model?

    Proses fine-tuning biasanya mengambil masa sekitar 8-10 minit.

Ver mais resumos de vídeos

Obtenha acesso instantâneo a resumos gratuitos de vídeos do YouTube com tecnologia de IA!
Legendas
zh
Rolagem automática:
  • 00:00:00
    大家好,我是小木头
  • 00:00:02
    欢迎大家来到我的视频频道
  • 00:00:04
    本期视频
  • 00:00:05
    我们分享
  • 00:00:06
    利用Unsloth微调DeepSeek R1蒸馏模型
  • 00:00:10
    利用医疗数据集训练
  • 00:00:12
    具有专业领域知识的专家模型
  • 00:00:15
    现在我们就开始吧
  • 00:00:18
    在上一期视频分享中
  • 00:00:20
    我们介绍了如何利用Unsloth
  • 00:00:22
    训练自己的R1推理模型
  • 00:00:26
    本期视频分享
  • 00:00:27
    也会利用到
  • 00:00:28
    在上一期中介绍的Unsloth相关的概念
  • 00:00:32
    有兴趣的同学呢
  • 00:00:33
    可以点击视频上方链接
  • 00:00:35
    回到当时的分享来了解这部分内容
  • 00:00:38
    今天呢我们就开始模型的微调
  • 00:00:42
    首先准备环境
  • 00:00:44
    今天的分享依然会用到一份Python Notebook
  • 00:00:48
    在视频分享前
  • 00:00:49
    我已经执行完了所有的代码步骤
  • 00:00:51
    得到了输出
  • 00:00:53
    希望这样呢
  • 00:00:54
    也能够提高视频分享的效率
  • 00:00:57
    简单介绍一下使用到的资源
  • 00:01:00
    以及环境准备情况
  • 00:01:02
    今天的微调呢
  • 00:01:03
    我用到的是Colab L4类型的运行环境
  • 00:01:07
    根据我的测试
  • 00:01:08
    如果使用T4类型呢
  • 00:01:11
    在训练阶段
  • 00:01:12
    可能会出现GPU资源不足的情况
  • 00:01:15
    大家可以在自己的训练环境中
  • 00:01:17
    尝试一下
  • 00:01:18
    看看在实际的微调中
  • 00:01:20
    需要多少的GPU资源
  • 00:01:22
    根据我的测试呢
  • 00:01:23
    峰值大概是在18.8G左右
  • 00:01:27
    在安装必要的Python包之前
  • 00:01:29
    简单介绍一下
  • 00:01:30
    为什么我们会需要大院模型的微调
  • 00:01:34
    微调
  • 00:01:35
    使得大模型在特定的任务执行和领域
  • 00:01:38
    具有更好的表现
  • 00:01:40
    使得在实际的应用场景中
  • 00:01:42
    工作的更加高效
  • 00:01:45
    接下来我们进行必要的Python的安装
  • 00:01:49
    Unsloth是我们在微调中所用到的
  • 00:01:51
    开源的大模型微调工具包
  • 00:01:54
    同时我们会安装bitsandbytes以及unsloth_zoo
  • 00:01:58
    这两个工具包
  • 00:01:58
    在上一次的视频分享中同样做的介绍
  • 00:02:02
    那有兴趣的同学呢
  • 00:02:03
    再次回到上一期的视频分享
  • 00:02:05
    来了解这些工具包
  • 00:02:07
    在模型微调与训练中的作用
  • 00:02:10
    这样我们就有了基本的模型微调
  • 00:02:13
    或训练的环境
  • 00:02:16
    第二步下载基座模型
  • 00:02:18
    要下载基座模型
  • 00:02:20
    首先我们需要确定一款基座模型
  • 00:02:22
    那如何选择基座模型呢
  • 00:02:24
    我们需要选择一款模型
  • 00:02:26
    能够适配咱们的应用场景
  • 00:02:29
    当我们做微调时
  • 00:02:30
    通常希望微调后的模型
  • 00:02:32
    在特定的领域或特定任务执行上
  • 00:02:35
    能够具有更好的表现
  • 00:02:37
    比如当我们希望在视觉任务执行上
  • 00:02:39
    有更好表现时
  • 00:02:41
    则需要选择一款视觉模型作为基座
  • 00:02:44
    当我们期望微调后的模型
  • 00:02:46
    能够在编码方面发挥更好的作用时
  • 00:02:49
    那我们就应该选择一款coder模型
  • 00:02:53
    另一方面
  • 00:02:53
    我们需要评估自己的存储计算资源
  • 00:02:56
    以及手头所拥有的数据集
  • 00:02:59
    从而选择一款合适的参数规格的模型
  • 00:03:03
    从下面代码中大家可以看到
  • 00:03:05
    本次的分享呢
  • 00:03:07
    选择了DeepSeek-R1-Distill-Llama-8B这款模型
  • 00:03:12
    其中load_in_4bit这个参数呢
  • 00:03:14
    设为true
  • 00:03:16
    通过四位量化的策略
  • 00:03:17
    能够降低内存的开销
  • 00:03:20
    现在咱们通过Unsloth提供的工具类
  • 00:03:24
    FastLanguageModel
  • 00:03:26
    利用它的from_pretrained函数
  • 00:03:29
    来加载预训练的模型
  • 00:03:31
    代码执行中
  • 00:03:31
    大家应该能够看到类似的输出
  • 00:03:34
    这是对模型文件的下载
  • 00:03:37
    模型加载中会得到两个变量
  • 00:03:39
    一个是模型变量model
  • 00:03:40
    一个呢是分词器tokenizer
  • 00:03:43
    在进行微调前
  • 00:03:44
    我们可以利用这款已经加载的模型
  • 00:03:47
    进行推理
  • 00:03:48
    也就是问答
  • 00:03:49
    来看看在一些特定问题上
  • 00:03:51
    它的问答效果
  • 00:03:53
    在这里呢
  • 00:03:54
    我们准备了一个提示词模板
  • 00:03:57
    这个模板中给到了指令
  • 00:04:00
    给到了用户提问
  • 00:04:01
    希望得到回答
  • 00:04:03
    我们在数据集中
  • 00:04:04
    选择了一个已有的问题
  • 00:04:07
    这是一个中文的问题
  • 00:04:08
    一个患有急性阑尾炎的病人
  • 00:04:10
    已经发病5天
  • 00:04:12
    腹痛稍有减轻
  • 00:04:13
    但仍然发热
  • 00:04:15
    在体检时发现右下腹有压痛的包块
  • 00:04:18
    此时应如何处理
  • 00:04:20
    这个问题
  • 00:04:20
    来自于后面我们会选择的数据集
  • 00:04:23
    我们很快会分享这个数据集
  • 00:04:26
    那么在这里呢
  • 00:04:27
    我们先来看看如何做推理
  • 00:04:29
    在这里呢
  • 00:04:30
    使用了分词器
  • 00:04:31
    基于的提示词模板
  • 00:04:33
    基于用户的提问来构建了输入
  • 00:04:36
    将输入交给generate函数
  • 00:04:38
    这样呢就能得到大模型的推理结果
  • 00:04:41
    那么
  • 00:04:41
    我们在下面已经打印出来这个结果
  • 00:04:44
    大家可以看一下
  • 00:04:45
    这里面呢
  • 00:04:46
    包含了一段思考过程
  • 00:04:48
    这也是DeepSeek R1模型典型的输出
  • 00:04:51
    在下面呢
  • 00:04:52
    列出了处理步骤
  • 00:04:54
    最后给到了一个结束的标志end_of_sentence
  • 00:04:58
    在这个回答中给
  • 00:04:59
    到了针对用户的病情
  • 00:05:02
    或提问的6步处理计划
  • 00:05:05
    我们现在先来到数据集
  • 00:05:06
    看看针对这个提问
  • 00:05:08
    在数据集中的回答是什么样的
  • 00:05:10
    这就是我们会用到的数据集
  • 00:05:12
    这个数据集在下一步数据集的准备中
  • 00:05:15
    会更加详细的介绍
  • 00:05:17
    那我们现在先来看看刚才提问
  • 00:05:20
    在数据集中对应的回答是什么
  • 00:05:22
    问题在这里
  • 00:05:24
    一个患有急性阑尾炎的病人
  • 00:05:26
    已经发病5天
  • 00:05:27
    来看看对应的回答
  • 00:05:29
    这个回答呢
  • 00:05:30
    是一个文字段落
  • 00:05:32
    并没有六步, 五步的这么一个诊疗方案
  • 00:05:36
    我们简单看看在这其中介绍了些什么
  • 00:05:39
    在这个回答中
  • 00:05:40
    包含了几点重要的信息
  • 00:05:42
    首先是建议采用保守治疗方案
  • 00:05:46
    其次利用抗生素控制感染
  • 00:05:49
    同时需要根据监测的结果
  • 00:05:52
    判断是否考虑进行穿刺引流
  • 00:05:55
    降低感染扩散的风险
  • 00:05:58
    经过一段时间的保守治疗
  • 00:06:00
    根据患者的病情
  • 00:06:02
    再来决定是否进行手术切除阑尾
  • 00:06:08
    如果我们将这段响应的样本
  • 00:06:11
    与推理的结果相对比呢
  • 00:06:13
    可以发现
  • 00:06:14
    在推理结果中
  • 00:06:15
    还是缺失了许多关键的诊疗信息
  • 00:06:20
    这正是我们期望基于这个数据集
  • 00:06:23
    对模型微调后
  • 00:06:24
    能够对其进行改进的
  • 00:06:28
    那现在
  • 00:06:29
    我们就已经完成了基座模型的下载
  • 00:06:33
    第三步准备数据集
  • 00:06:35
    现在我们再次回到这个数据集
  • 00:06:38
    首先呢来到这个数据集的卡片
  • 00:06:42
    来看看它的描述
  • 00:06:43
    这个数据集
  • 00:06:44
    是用来微调HuatuoGPT-1
  • 00:06:47
    一款医疗大模型的
  • 00:06:49
    目的是能够实现更高级的
  • 00:06:51
    医疗领域方面的推理
  • 00:06:53
    我们就利用这个数据集
  • 00:06:55
    来微调DeepSeek R1模型
  • 00:06:57
    点击查看器来
  • 00:06:58
    我们看一下更加详细的数据及情况
  • 00:07:01
    这个数据集呢
  • 00:07:02
    有两个子集
  • 00:07:03
    对应了英文和中文的数据
  • 00:07:06
    我们在这个应用场景或事例中呢
  • 00:07:09
    用到的是中文
  • 00:07:11
    理论上我们期望经过微调大模型
  • 00:07:14
    具备这一数据集中的专业知识
  • 00:07:17
    能够更好地
  • 00:07:18
    为患者提供服务
  • 00:07:20
    准备数据集的过程
  • 00:07:21
    包含了数据集的下载
  • 00:07:24
    以及对数据集的清理
  • 00:07:25
    清理呢
  • 00:07:26
    通常会针对数据集中的多列进行转换
  • 00:07:30
    首先
  • 00:07:30
    对于训练提示词定义了一个模板
  • 00:07:34
    这里面呢
  • 00:07:34
    包含了用户提问
  • 00:07:36
    这是一个变量
  • 00:07:37
    另一个是模型的思考过程
  • 00:07:40
    也就是刚才咱们看到的CoT
  • 00:07:43
    最后呢是模型的回答
  • 00:07:45
    接下来定义了一个提示词
  • 00:07:48
    和数据集转换的函数
  • 00:07:50
    它会基于加载的数据集样本数据
  • 00:07:53
    针对每一列question, COT, response
  • 00:07:57
    来构建一个训练的提示词
  • 00:07:59
    或训练的语料
  • 00:08:02
    针对每个字段呢
  • 00:08:04
    会利用这个提示词模板
  • 00:08:06
    将这些字段填充到这个模板当中
  • 00:08:09
    构建训练数据集的文本数据
  • 00:08:12
    要注意的是
  • 00:08:13
    这里专门列出了一点非常重要的提示
  • 00:08:16
    非常重要的一点是
  • 00:08:17
    我们需要为数据集中每一条词条
  • 00:08:21
    添加EOS token
  • 00:08:24
    用它来标记句子的结束
  • 00:08:26
    否则呢在微调后
  • 00:08:28
    我们很有可能会遇到无限生成的情况
  • 00:08:32
    接下来就通过load_dataset这个函数
  • 00:08:35
    来加载数据集
  • 00:08:38
    zh表示我们加载中文数据集split
  • 00:08:41
    这里准备训练数据集
  • 00:08:43
    我们加载的呢是前500条
  • 00:08:46
    咱们也可以以完整的一个数据集
  • 00:08:49
    来进行微调
  • 00:08:51
    接下来就针对加载的原始数据集
  • 00:08:54
    来做处理或映射
  • 00:08:57
    转换后
  • 00:08:58
    我们打印了数据集中的第一条数据
  • 00:09:01
    我们看看它的输出情况
  • 00:09:03
    最开始是指令
  • 00:09:05
    然后包含了用户的提问在这里
  • 00:09:08
    下一部分
  • 00:09:09
    包含两部分内容
  • 00:09:10
    一个呢是思考的过程
  • 00:09:12
    是由think这个标签包裹的
  • 00:09:14
    然后呢就是推理的结果
  • 00:09:19
    有了这个数据集
  • 00:09:20
    我们就可以开始模型的训练
  • 00:09:22
    第四步
  • 00:09:23
    我们基于准备好的数据集来微调模型
  • 00:09:26
    微调模型的过程与上一期视频分享中
  • 00:09:29
    我们介绍的模型训练的过程几乎一致
  • 00:09:33
    首先准备PEFT模型变量
  • 00:09:37
    PEFT呢是参数高效的微调
  • 00:09:40
    然后创建训练器
  • 00:09:42
    在训练器这里
  • 00:09:44
    训练器的使用
  • 00:09:45
    与上一期视频分享略有不同
  • 00:09:47
    在上一期视频分享中
  • 00:09:48
    我们使用的是GRPO训练器
  • 00:09:51
    在这里呢使用的是SFTTrainer
  • 00:09:54
    这个呢是supervised fine-tuning trainer
  • 00:09:56
    将PEFT模型变量
  • 00:09:59
    以及分词器交给构造函数
  • 00:10:02
    同时呢会将数据集给它
  • 00:10:04
    并指定数据集中文本的字段
  • 00:10:07
    我们刚才的转换函数中
  • 00:10:09
    将所有的文本呢放在了text字段
  • 00:10:13
    在训练参数中
  • 00:10:15
    我们并没有用到wandb
  • 00:10:17
    在上一期视频分享中咱们是使用了
  • 00:10:20
    那在这里呢
  • 00:10:20
    没有使用它
  • 00:10:21
    所以将report_to设为了none
  • 00:10:26
    也使用了8位的优化器
  • 00:10:28
    训练器的配置
  • 00:10:29
    基本上与上一期视频分享中
  • 00:10:31
    用到的GRPO一样
  • 00:10:33
    现在呢就可以使用训练器的train函数
  • 00:10:36
    进行模型的训练了
  • 00:10:38
    整个过程大约花了8-10分钟
  • 00:10:42
    大家在训练过程中
  • 00:10:44
    也可以通过Colab资源卡片
  • 00:10:46
    来观测当前RAM的使用情况
  • 00:10:49
    以及磁盘的使用情况
  • 00:10:51
    根据我的观察呢
  • 00:10:53
    在训练过程中
  • 00:10:54
    GPU峰值基本上维持在了18.8G左右
  • 00:10:58
    大家在训练过程中
  • 00:10:59
    观测的一个重要指标呢
  • 00:11:01
    是下面图表中的training loss
  • 00:11:03
    我们期望的是这个值能够在训练过
  • 00:11:07
    程中逐步收敛
  • 00:11:09
    那我们要进行第五步推理
  • 00:11:11
    验证微调模型
  • 00:11:13
    我们首先利用同样的问题
  • 00:11:15
    再做一次推理
  • 00:11:16
    在这次的推理中
  • 00:11:17
    用到的是微调后的模型
  • 00:11:19
    这是一次非常简单的推理验证
  • 00:11:23
    希望看到微调后的模型
  • 00:11:25
    能在同样的问题上有更好的表现
  • 00:11:28
    来看看同样问题的回答吧
  • 00:11:30
    他会有一个类似的思考过程
  • 00:11:33
    然后给出模型的推理结果
  • 00:11:36
    这个回答呢
  • 00:11:37
    从格式或文字结构上来讲呢
  • 00:11:39
    更接近于数据集中的样本响应
  • 00:11:45
    它是一个文字段落式的回复
  • 00:11:48
    同时给出了诊疗建议
  • 00:11:51
    一方面是考虑引流手术
  • 00:11:55
    这个呢是解决阻塞
  • 00:11:57
    另一方面呢
  • 00:11:57
    使用抗生素消除感染
  • 00:12:00
    同时进行影像学检查
  • 00:12:02
    根据检查结果决定是否进行引流手术
  • 00:12:07
    现在我们回到原始的数据集
  • 00:12:09
    在样本响应中
  • 00:12:11
    关于保守治疗这一点
  • 00:12:12
    似乎在微调后模型的回答中
  • 00:12:16
    还是缺失的
  • 00:12:17
    另一方面
  • 00:12:18
    关于择期进行手术
  • 00:12:20
    切除阑尾这一方面也没有提及
  • 00:12:24
    基于此我们看到微调呢
  • 00:12:26
    还有进一步提升的空间
  • 00:12:29
    大家可以根据这个推理的结果
  • 00:12:31
    来评判微调后的模型
  • 00:12:33
    是否在同样的问题上表现优于微调前
  • 00:12:38
    在微调中
  • 00:12:39
    通常我们会利用验证数据集
  • 00:12:42
    来评定微调后的模型
  • 00:12:45
    是否满足我们的预期
  • 00:12:48
    那这就是今天我们所分享的
  • 00:12:50
    如何利用Unsloth来完成模型的微调
  • 00:12:55
    那大家对今天视频分享中的内容
  • 00:12:57
    有任何的问题
  • 00:12:58
    或对这类内容有什么更好的建议
  • 00:13:02
    那欢迎在评论区给我们留言
  • 00:13:04
    我会将今天分享中用到的文档和代码
  • 00:13:07
    都放在视频描述中
  • 00:13:09
    需要的同学
  • 00:13:10
    呢就在描述中取用吧
  • 00:13:12
    那咱们就下次视频分享再见
  • 00:13:14
    同学们拜拜
Etiquetas
  • DeepSeek R1
  • Unsloth
  • fine-tuning
  • model asas
  • dataset perubatan
  • Python Notebook
  • GPU
  • pemilihan model
  • pengunduhan model
  • latihan model