跳到主要内容

训练文字类微调模型

目前流行的文字类生成模型,例如 LLama,ChatGLM,即使是相对较小的尺寸也难以在消费级GPU上进行全参数微调,因此,在这里,我们不讨论如何对文字类微调模型进行全参数微调,只关注如何进行轻量化微调

训练工具 🔧

图像类生成模型领域,往往都是基于Stable Diffusion,通常具有相同的网络结构,而不同的文字类生成模型可能源于不同的基础模型,我们这里只使用 text-generation-webui 的训练微调模型功能来说明如何训练微调模型

text-generation-webui 目前对流行的模型的支持度如下, (对于其他目前 text-generation-webui 不支持的模型,可以使用对应模型的微调方法进行训练,产物需要为 peft 的 lora 模型格式)

基础模型微调
LLaMA支持
OPT支持
GPT-J支持
GPT-NeoX支持
RWKV不支持
ChatGLM不支持,请使用第三方工具

模型选择

LLaMA 系列的模型目前是最主流的模型

但是因为在训练时采用的语料主要是英文,对于其他语言的支持较弱

对于英文类语言,建议使用 WizardLM-7B-Uncensoredvicuna-7b-1.1 在自己的数据上进行进一步微调

对于中文类语言,建议使用 Linly-Chinese-LLaMA-7b-hf 进行微调

对于韩语,建议使用 kollama-7b

模型语言
WizardLM-7B-UncensoredEnglish
vicuna-7b-1.1English
Linly-Chinese-LLaMA-7b-hf中文
kollama-7b한국어

数据准备 📚

对于文字类微调模型来说,存在两种数据大类

数据格式使用场景什么时候使用缺点作用
纯文字语料数据不需要有特别的数据格式,将所有的文字放到一个或多个txt文件文本补齐例如,你希望微调一个编故事的模型,输入故事的开头,让模型补充后续的内容进行微调后,可能失去原有的能力
指令数据需要有特殊的数据格式对话,命令让模型更好的理解人类的意图

指令数据是通过调整数据集,让模型更好的理解人类的意图

不管是指令数据还是纯文字语料,都是文本补齐类任务的。

对于指令数据,可以将其看作模型的输入为带有指令的文字,要求模型补全剩余的文字

text-generation-webui 目前对这两种形式的语料都支持 lora 微调

训练微调模型

  1. 按照 text-generation-webui 的安装指南,安装text-generation-webui

  2. 启动 text-generation-webui,从顶部的选项卡选择,进入到 Model 选项卡

  3. 在 Model 选项卡下,输入对应的基础模型的名字,例如 ehartford/WizardLM-7B-Uncensored,然后点击下载,下载基础模型(也可以手动下载模型,然后放到 text-generation-webui 安装目录下的 models 目录)

    Untitled

  4. 将准备好的数据集放到 text-generation-webui 安装目录下的 training/datasets 里

    Untitled

  5. 切换到 text-generation-webui 的 training 选项卡,选择你准备好的数据

    Untitled

    使用默认的参数进行训练即可,如果希望增加上下文长度,可以调高 cutoff 参数

    开始训练后,能在 text-generation-webui 看到训练进度

    Untitled

    等待模型训练完成,通常,这将持续1~8个小时。训练数据的大小训练参数GPU型号区别都会影响模型的训练速度

    训练过程中的产物保存在 lora 目录下,你也可以中途中断训练,直接使用 lora 目录现有的 checkpoint 模型

    Untitled

    在 lora 目录下手动新建一个文件夹,名字为你希望的 lora 模型的名字

    Untitled

    将最新的 checkpoint 模型,从文件夹中复制到 lora 目录下

    然后在 text-generation-webui 中选择 lora 模型进行使用

    对于如何使用模型,请参考模型使用概述/使用文字类模型

如果您对于如何微调模型仍然存在疑惑,我们提供了两个真实的微调案例流程供您参考

  • Dcard Emotion fine-tune (Chinese)
  • Reddit Fine-tune