PEFT消费级设备训练模型
《PEFT消费级设备训练模型》共 0.2 万字,通篇围绕 LoRA、微调、推理、上下文 展开,归在「训练、微调与数据」这一层。
适合要自己训模型、或者判断这一版该不该训的人
目录骨架(3 节)
- 示例代码
- 快速入门
- 保存模型
示例代码
注:将ppt后缀名改为zip后解压
参数高效微调(PEFT)方法在微调过程中冻结预训练模型的参数,并在其顶部添加少量可训练参数(adapters)。adapters 被训练以学习特定任务的信息。这种方法已被证明非常节省内存,同时具有较低的计算使用量,同时产生与完全微调模型相当的结果。
使用 PEFT 训练的 adapters 通常比完整模型小一个数量级,使其方便共享、存储和加载。
与完整尺寸的模型权重(约为 700MB)相比,存储在 Hub 上的 OPTForCausalLM 模型的 adapter 权重仅为~ 6MB。
如果您对学习更多关于🤗 PEFT 库感兴趣,请查看文档。
安装
在开始之前,您需要设置您的环境,安装适当的软件包,并配置 🤗 PEFT。🤗 PEFT 在 Python 3.9+ 版本上进行了测试。
🤗 PEFT 在 PyPI 和 GitHub 上均有提供
PyPI
要从 PyPI 安装 🤗 PEFT,请运行:
pip install peft
源代码
尚未发布的新功能每天都会添加,这也意味着可能存在一些错误。要尝试这些新功能,请从 GitHub 仓库安装
pip install git+https://github.com/huggingface/peft
如果您正在为库做贡献,或者希望使用源代码并查看代码运行的实时结果,则可以从本地克隆的仓库版本安装可编辑版本
git clone https://github.com/huggingface/peft
cd peft
pip install -e .[test]
快速入门
PEFT 为微调大型预训练模型提供了参数高效的方法。传统的范式是为每个下游任务微调模型的所有参数,但这正变得极其昂贵且不切实际,因为如今模型中的参数数量庞大。相反,训练少量 prompt 参数或使用像低秩适配 (LoRA) 这样的重参数化方法来减少可训练参数更为有效。
本快速入门将向您展示 PEFT 的主要功能,以及如何在通常在消费级设备上无法访问的大型模型上进行训练或运行推理。
训练
每种 PEFT 方法都由 PeftConfig 类定义,该类存储构建 PeftModel 的所有重要参数。例如,要使用 LoRA 进行训练,请加载并创建 LoraConfig 类,并指定以下参数:
- task_type:要训练的任务类型(在本例中为序列到序列语言建模)条件生成任务,根据给定的输入(可能是文本、图片等)生成符合条件的输出。
SEQ_CLS
序列分类(Sequence Classification),对整个句子进行分类。如: 获取评论的情绪,检测电子邮件是否为垃圾邮件,确定句子在语法上是否正确或两个句子在逻辑上是否相关等
SEQ_2_SEQ_LM
条件生成任务,根据给定的输入(可能是文本、图片等)生成符合条件的输出。
与因果语言建模任务不同,条件生成不仅仅关注于给定上下文的连贯性,还关注于满足预定的任务要求。因果语言建模仅关注于根据给定的上下文生成文本序列。
条件生成的应用包括但不限于机器翻译、文本摘要、图像描述等。这些任务通常需要模型在输入和输出之间建立复杂的映射关系。
CAUSAL_LM
因果语言建模任务(CLM),在这种建模方法中,模型试图预测给定上下文中的下一个单词,该上下文通常包括在当前单词之前的所有单词。这种建模方法遵循因果原则,即当前单词只受到其前面单词的影响,而不受后面单词的影响。代表模型有 GPT2、Bloom、OPT、GPT-Neo、GPT-J、LLaMA、ChatGLM。
TOKEN_CLS
Token 分类任务(Token Classification),对句子中的每个词进行分类。如: 识别句子的语法成分(名词、动词、形容词)或命名实体(人、地点、组织)。
- inference_mode:是否将模型用于推理
- r:低秩矩阵的维度
- lora_alpha:低秩矩阵的缩放因子
- lora_dropout:LoRA 层的 dropout 概率
from peft import LoraConfig, TaskType