喂饭式微调教程,Colab免费T4,不要说没手没脚,用舌头都行

首先,非常感谢 unsloth 提供了微调的方法,这个教程的一切都是基于这个 repo。如果大家有兴趣,可以去仔细看看,非常详细。

unsloth GitHub Repo

虽然 B 站、知乎等网站也提供了教程,但大部分都是按照默认 repo 提供的 Colab notebook 跑一次就结束了。原本的 repo 并未对 notebook 的内容提供详细的中文说明,很多朋友可能因此一知半解。所以我在原来的基础上对代码进行了改进,更适合小白使用。

废话不多说,下面是具体的教程(需要科学上网和 Google 账号)。

首先下载解压附件(Unsloth_finetuning_V1.ipynb),打开 Google Colab(Colab),点击“文件”–“上传笔记本”–选择你下载的文件并上传。

你将看到以下内容:

让我们一步步来讲解各个模块的作用及必要的修改:

  1. 准备环境
    这一部分是为微调准备虚拟环境框架,无需修改。

  2. 导入需要微调的模型
    这一部分将你想要微调的模型导入。你可以看到 unsloth 为我们准备了很多示例,包括 llama,gemma,phi 等,并且你可以在unsloth的Hugging Face主页(unsloth (Unsloth AI)) 上找到更多模型。当然,你也可以选择任意你想要的 Hugging Face 模型,只需修改 model_name = "unsloth/gemma-2-2b-it" 这一部分即可。

比如,你想微调官方的 gemma2,那么只需到 Hugging Face 搜索 gemma2,然后点击复制,将复制内容粘贴到此处即可。

注意保留双引号!!!

部分 repo,比如官方的 gemma、llama 等需要通过申请才能调用。申请部分我不赘述,但申请通过后,你必须设置 Hugging Face token 才能下载。在 Hugging Face 首页点击左上方你的账号头像–“Settings”–“Access Tokens”–“Create new token”–“Read”–填入名称–“Create token”。

创建完成后点击复制,然后在此处填入,token 的格式是 hf_abcdefg12345(注意删除 # 符号,但不要删除双引号)。

  1. 设置 LoRA adapters
    这一部分是关于微调(LoRA)的设置,小白保持默认即可。如果你想要修改,请仔细研究 repo 的相关文档。

  2. 准备 dataset
    这一部分的作用是设置你想要用于训练的数据集。你可以在 Hugging Face 上搜索你感兴趣的数据集,或者自己制作(使用 GPT 和 Claude 都行,但不推荐 Gemini)。考虑到你可能想要一次训练多个数据集,我修改了默认的模板。

    以 Hugging Face 上的弱智吧训练数据集为例,首先到 Hugging Face 上找到弱智吧的训练数据集。点击 Hugging Face 上的“Datasets”,输入“ruozhiba”。

然后选择你想要的数据集,比如“hfl/ruozhiba_gpt4”,点击进入并点击复制。

找到 # 加载多个数据集 这一部分,将你选择的数据集替换掉 aaa/AAA, bbb/BBB 即可。

注意保留双引号!!!

还有一点,我在这个范例 notebook 中使用了标准的 Alpaca 数据集,也就是类似这种格式的:

如果你打算使用其他格式的数据集,则需要对“准备 dataset”部分的代码进行修改,或者让 Claude 帮你修改。

  1. 预估训练步数
    这一部分是我自己增加的,目的是通过判断你的数据集来决定可能(我强调是可能)的最优步数。因为在原版 unsloth 提供的范例 notebook 中,微调步数是 60,这对于大多数情况并不适用。然而如果你选择 full run,则你白嫖的 Colab T4 基本不可能完成。所以我增加了这一部分。

    无需修改。

  2. 设置微调参数
    如果没有深入研究,请保持默认设置。我已经修改代码调用上面的“预估训练步数”来执行。

  3. 预估微调资源占用
    这一部分无需修改,目的只是让你知道是否会爆显存,运行后没有警告则一切正常。

  4. 开始微调
    顾名思义。

  5. 微调结果报告
    报告你在这个微调上浪费了多少时间。。。

  6. 测试微调模型
    微调结束后,你可以运行这个模块对模型进行测试,只需将你的测试问题替换这一部分即可(注意不要删除双引号!!!)。

  1. 保存 LoRA 适配器 [注意] 要保存为 16 位或者 GGUF,请向下滚动!
    在你测试满意后,可以保存这个微调的 LoRA,但它并不是完整的模型。

  2. 保存微调后的模型 仅限 16/4/或者仅仅是 LoRA
    顾名思义,选择你想要保存的类别,将 False 改成 True 即可。

第一行是保存在虚拟环境中,第二行则是推送到 Hugging Face 的 repo,需要配合 Hugging Face token (write权限)使用。
  1. 保存为 GGUF
    小白推荐,可以直接用 Ollama 调用。同理,第一行是保存在虚拟环境中,第二行则是推送到 Hugging Face 的 repo,需要配合 Hugging Face token(write权限) 使用。
    选择你想要量化的类别(q8/q4),将 False 改成 True 即可。
    运行这个模块后会告诉你模型被保存在哪里,可以直接下载(不推荐),也可以配合下面的部分使用。

  1. 挂载 Google 云端硬盘及将模型保存到云端硬盘
    考虑到 Hugging Face 对于部分朋友的网络并不友好,我增加了将模型保存到 Google 的云端硬盘,方便你下载。
    将上面显示的路径替换掉 local = '/content/XXXX.gguf',同时可以在 google_drive = '/content/drive/My Drive/XXXXX.gguf' 设定你想要保存的名称。

之后你便可以在你的google云盘中找到它了~

几点需要提醒:

  1. 不建议使用“执行所有代码”,建议单独执行每个模块,这样可以方便地看到运行结果,便于查找问题。
  2. 虽然理论上可以使用 unsloth 微调任意模型,但免费的 Colab 硬盘、内存和显卡都有较大限制,建议使用 10B 左右且不要超过 21B 的模型。
  3. 免费用户使用 T4 有时间限制,大约每 24 小时提供 1 小时免费,最多不会超过 12 小时。此外,运行 Colab 时不能关闭网页。
  4. 我自己也是小白,所以很多地方肯定有所疏漏,还请各位大佬多多指教。

以上,谢谢大家。如果对你有帮助,请点个免费的赞!

Unsloth_finetuning_V1.zip (4.9 KB)

58 Likes

有点厉害

太强了佬,支持一波

1 Like

强,刚好用的上,谢谢分享

1 Like

绑定

1 Like

学习学习

1 Like

感谢分享

1 Like

感谢大佬,学习了!

1 Like

前排围观

1 Like

厉害了佬

1 Like

有点厉害

1 Like

好厉害!感谢

1 Like

感谢分享!

1 Like

如果想喂点更简单的任务 DPO效果更好: DPO_OpenHermes_Unsloth.ipynb · cnbeining/OpenHermes-2.5-Mistral-7B-Sentence-Segmentation at main

1 Like

mark 微调

1 Like

Mark 感谢佬

1 Like

mark

加入标签就等于看了,看了就等于会了。谢谢大佬分享。

正好在学习,感谢!

感谢分享