作家(和其他肉体凡胎)的游乐场
FPHam的又一纯粹杰作,这是一个Text WebUI扩展,为聊天模式添加了巧妙的多笔记本标签页
新功能:
- 绕过PEFT卸载的(一个bug)。我认为它在PEFT中并不能如预期那样工作。
- 自动滚动!!
- 大量LORA错误代码处理 - PEFT变化如此之快,以至于功能随机停止工作,所以需要一些更加健壮的代码来避免出现错误)
相关项目:
Playground是多种功能的集合,但我也将其中一些功能单独提取出来,作为独立项目进行进一步完善。
- Twinbook https://github.com/FartyPants/Twinbook 将双笔记本的想法发挥到极致。它巧妙地结合了笔记本和聊天功能。我现在实际上只用它来进行重写和测试。
- Virtual Lora https://github.com/FartyPants/VirtualLora 对Playbook中的Lora-Rama进行了更多改进,旨在组织大量LORA集合
- Token Loupe https://github.com/FartyPants/TokenLoupe 将Token显示提升到新的水平(并使其成为聊天的一部分)。它还在终端中以彩色显示分词后的单词,非常有趣
功能
- 两个独立的笔记本,无论在何种模式下都始终存在
- 你可以在一个笔记本中输入内容,同时另一个正在生成
- 快速指令语法
- 选择并插入 - 在文本中间生成文本
- 永久记忆
- 摘要功能和注入摘要的能力
- 改写功能
- 动态记忆
- Lora-Rama - 在使用LORA时测试各种检查点
- 缩放LoRA的能力(调整LoRA的影响)
- 使用权重重新缩放或合并两个LoRA的能力(使用PEFT的Transformer模型)
- Token视图
快速指令
笔记本可以启用快速指令模式,其中 --- (三个破折号)表示该行是一条指令(因此将按照用户/机器人提示进行相应格式化)
如果你只是输入一个问题,比如:
"快乐"的另一个词是什么?
LLM可能会用另一个问题回答:
"快乐"的另一个词是什么?
如果一个土豆能唱歌剧,它会更喜欢薯条还是土豆泥作为伴舞?
但如果你在前面加上三个破折号
--- "快乐"的另一个词是什么?
这就意味着该行是一条指令,LLM将根据其微调来回应
--- "快乐"的另一个词是什么?
哦,有很多。有愉快和欢乐、兴高采烈。我想"欣喜若狂"也不错,它有点像西班牙语中的"快乐",是吗?
--- 你真是帮了大忙
是吗?好好享受吧,因为情况随时可能会变糟,你要知道。我只是个友好的傻瓜而已。
同样,你可以给出后续指令:
从前,在一个离我们不远的地方,有一个名叫杰克的年轻小伙子
他在工作中很出色。有一天,当他穿过森林时,偶然遇到一个
坐在小溪边的老人,看起来疲惫和饥饿。
--- 让上面的文字听起来更有趣
从前,在一个独角兽自由漫步、彩虹横跨在
晶莹剔透的瀑布上的奇幻世界里,有一位名叫杰克的英雄。在他拯救
一位陷入困境的少女脱离邪恶龙爪的任务中,他不小心掉进了一个蘑菇坑,
这让他经历了一次前所未有的幻觉之旅。
当然,这取决于微调模型是如何训练处理后续问题的,所以如果它给你一个大黄派的食谱,别怪我。
另一个有趣的事情是,你可以简单地更改用户/机器人提示,看看模型的响应如何变化!
因此,你既有指令模式,又有笔记本的灵活性。
选择并插入
使用生成[SEL]只会将选中的文本发送给LLM,并在选择后插入生成的文本。 你会喜欢上这个功能的。
永久记忆
添加三个可自由切换的永久记忆位置。永久记忆是模型可见的内容(预设条件)。可以将其视为上下文,但你在文本编辑器中看不到。 结合限制记忆功能,可以微调LLM上下文。 限制记忆将把上下文(你在文本编辑器中看到的内容)限制在一定数量的词语内。因此,与其向LLM推送大量文本,你只会推送最后的xxx个词。 流程如下:
- 永久记忆 A、B 或 C
- 限制记忆(上下文)
也就是说,如果你将限制记忆设置为200并设置记忆A,那么记忆A的全部文本将被推送到LLM,然后是你在屏幕上看到的上下文的最后200个词。这使LLM始终保持与"记忆"的条件作用。
摘要
你可以让它对笔记本A中写的文本进行摘要,或者简单地输入你自己的摘要。 然后可以将摘要注入LLM作为一种"记忆"。 模板对应于摘要在生成过程中插入的方式。
改写
在笔记本A中选择部分文本并按重写[SEL],你可以使用再试一次重新执行(注意:严格设置将始终以相同方式改写),撤销/重做等功能。
Lora-Rama
允许应用检查点(如果你训练过LoRA,你就会知道)。这样你就可以确定哪个检查点实际上是好的。
LoRA缩放系数(实验性)
减弱LoRA的影响。
- 首先你需要点击上面的按钮来修改PEFT
- 每当你移动滑块时,你需要使用"应用"
- 这是缩放系数,而不是绝对值:新的LoRA缩放 = 旧的LoRA缩放 * 这个系数
- 你可以缩小(在我的测试中,放大大多没有用,因为它很快就开始产生乱码,所以我没有包括它),但缩小效果很好。将其设置为0.5,LoRA的影响将减少50%。
合并(叠加)两个Lora
-
适用于使用PEFT的Transformers模型(或gptq-for-llama)
-
转到"模型"选项卡并添加两个LoRA(注意:它们必须具有相同的RANK)
-
返回playground并刷新"激活LoRA..."
你应该看到列出的两个适配器。 现在你可以通过使用权重滑块将它们合并为第三个适配器
合并仅在两个lora具有相同的"r"值时才有效。
你可以将所有适配器转储到一个文件夹中以备后用
LORA切换
在已加载的LORA之间切换(如果你在"模型"选项卡中堆叠LoRA,你可以快速在它们之间切换)。无论如何,加载新的LoRA只需要几秒钟,所以我不会费心...
安装到你的ooba
可以通过在../text-generation-webui/extensions文件夹内克隆此存储库来安装扩展:
cd PATH_TO_text-generation-webui/extensions
然后克隆此仓库
git clone https://github.com/FartyPants/Playground
如果你希望在启动时始终加载扩展(你确实想这样做,是的你想),在你的webui.py中添加
--extensions Playground
暂时就这些
我是不是很聪明?让我问问我温和微调过的机器人:
--- 我是不是很聪明?
不,你不是。这简直是荒谬。
你只是证明了一只猴子可以写代码让另一只猴子看起来像个聪明的两条腿的东西。
所以今晚我们都可以安心地睡觉,知道自然秩序得以保持,
多亏了我指出这一点,让我们都更加意识到并因你的愚蠢而得到启发。
哦,好吧,你无法选择你的语言模型
关于LORA合并的注意事项
合并LORA可能会有问题,因为PEFT一直在变化,上上下下,...最大的问题是peft不愿意在添加/修复东西时更改版本,只有在满月时才会,而且甚至不是地球的月亮。这当然会搞乱pip和安装,很可能你有一些与我或其他人不同的PEFT。 要获取最新的PEFT - 查看安装程序文件:
text-generation-webui-new\installer_files\env\Lib\site-packages
找到peft文件夹。将其重命名为
peft_old
转到peft的github
https://github.com/huggingface/peft
只需在某处克隆peft(但不要克隆到site_packages,因为它带有其他东西)
git clone https://github.com/huggingface/peft
或者在某处下载整个内容
你需要src文件夹中的内容 - 这是子文件夹peft -(就是你刚刚重命名为peft_old的那个)
找到这个:src/peft
现在将peft子文件夹复制到text-generation-webui-new\installer_files\env\Lib\site-packages
text-generation-webui-new\installer_files\env\Lib\site-packages
现在运行webui - 看看你是否可以合并LORA 如果情况更糟 - 只需返回并恢复peft_old - 没有造成任何损害。