组合式增强大型语言模型框架
CALM-pytorch是基于Google Deepmind研究的开源PyTorch实现,旨在通过组合多个专业LLM来增强大型语言模型的能力。该框架支持集成任意数量的增强型模型,提供灵活的连接配置和便捷的训练工具。CALM-pytorch可与多种Transformer架构兼容,包括视觉Transformer,为研究人员和开发者提供了一个强大的平台来探索和扩展LLM的潜力。不仅支持文本处理,还能整合视觉和音频模型,为多模态AI应用开发提供了强大支持。
实现来自Google Deepmind发表的论文<a href="https://arxiv.org/abs/2401.02412">LLM增强LLM:通过组合扩展能力</a>中的CALM
可支持任意数量的增强LLM
$ pip install CALM-pytorch
例如使用x-transformers
import torch from x_transformers import TransformerWrapper, Decoder augment_llm = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 12, heads = 8 ) ) anchor_llm = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 512, depth = 2, heads = 8 ) ) # 导入CALM包装器 from CALM_pytorch import CALM, AugmentParams calm = CALM( anchor_llm, augment_llms = AugmentParams( model = augment_llm, connect_every_num_layers = 4 ) ) # 模拟输入 seq = torch.randint(0, 20000, (1, 1024)) mask = torch.ones((1, 1024)).bool() prompt = torch.randint(0, 20000, (1, 256)) # 前向传播计算微调损失 loss = calm( seq, mask = mask, prompt = prompt ) loss.backward() # 经过大量训练后,对组合模型进行提示 generated = calm.generate( prompt = seq[:, :1], seq_len = 1024 )
要使用基于🤗 Accelerate的方便的训练器类,只需导入FineTuner
并按如下方式使用
trainer = FineTuner( calm = calm, dataset = dataset, # 返回一个包含calm输入kwargs的字典 - dict(seq: Tensor, mask: Tensor, prompt: Tensor)。它也可以返回一个元组,此时需要将data_kwargs设置为正确的有序kwarg名称值 batch_size = 16, num_train_steps = 10000, learning_rate = 3e-4, weight_decay = 1e-2, warmup_steps = 1000, checkpoint_every = 1000 ) trainer() # 每1000步会将交叉注意力参数的检查点保存到./checkpoints
要探索多个增强LLM,只需为augment_llm
传入一个列表
例如:
calm = CALM( anchor_llm = anchor_llm, augment_llm = [AugmentParams(augment_llm1), AugmentParams(augment_llm2)] # 传入一个包含AugmentParams的列表,包装模型和特定于该变压器的其他超参数 )
如果你想探索锚模型和增强模型之间不同类型的连接,只需将连接作为整数对的元组元组传入,指定锚到增强层的编号。
calm = CALM( anchor_llm = anchor_llm, augment_llms = ( AugmentParams( model = augment_llm1, connections = ( (1, 12), # augment llm1的第1层被anchor llm的第12层关注 (2, 12), (3, 12), (4, 12), ), ), AugmentParams( model = augment_llm2, connections = ( (6, 1), # augment llm2的第6层被anchor llm的第1层关注 (6, 2), (12, 12), ) ) ) )
带有2个专门的增强LLM和一个视觉变压器的CALM设置
import torch # pip install vit-pytorch x-transformers from vit_pytorch.vit import ViT, Attention from x_transformers import TransformerWrapper, Encoder, Decoder anchor_llm = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Decoder( dim = 16, dim_head = 2, depth = 12, heads = 8 ) ) augment_llm1 = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 16, dim_head = 2, depth = 12, heads = 8 ) ) augment_llm2 = TransformerWrapper( num_tokens = 20000, max_seq_len = 1024, attn_layers = Encoder( dim = 16, dim_head = 2, depth = 12, heads = 8 ) ) vit = ViT( image_size = 256, patch_size = 32, num_classes = 1000, dim = 256, depth = 6, heads = 16, mlp_dim = 2048 ) # calm from CALM_pytorch import CALM, AugmentParams, FineTuner calm = CALM( anchor_llm = anchor_llm, augment_llms = ( AugmentParams( model = augment_llm1, mask_kwarg = 'mask' ), AugmentParams( model = augment_llm2, mask_kwarg = 'mask' ), AugmentParams( model = vit, input_shape = (3, 256, 256), hidden_position = 'input', extract_blocks_fn = lambda vit: [m for m in vit.modules() if isinstance(m, Attention)] ) ), attn_kwargs = dict( linear_project_context = True, pre_rmsnorm = True, flash = True ) ) seq = torch.randint(0, 20000, (1, 1024)) mask = torch.ones((1, 1024)).bool() prompt = ( torch.randint(0, 20000, (1, 256)), torch.randint(0, 20000, (1, 256)), torch.randn(1, 3, 256, 256) ) loss = calm( seq, mask = mask, prompt = prompt ) loss.backward() ## 待办事项 - [x] 找出如何正确掩蔽增强语言模型的标记 - [x] 使用虚拟输入自动推导模型维度 - [x] 处理微调训练逻辑 - [x] 展示2个或更多注意力网络之间自定义连接的示例 - [x] 如果直接传入锚定和增强变换器块模块(无需提取函数),通过两个网络运行虚拟输入,并使用钩子正确排序它们 - [x] 修复x-transformers的示例,因为在x-transformers中,深度实际上是 深度的2倍,从注意力和前馈网络之后获取隐藏状态 - [x] 在精细指定隐藏位置时,如果传入的变换器块本身未排序,请确保重新排序 - [x] 扩展到多个增强语言模型列表 - [x] 完整的连接自定义 - [x] 每个增强语言模型的自定义增强层数 - [x] 使简单的视觉变换器工作 - [x] 重构,使提取函数、掩码关键字参数和其他相关超参数分组在{[augment_llm_name]: {augment_llm_related_hparams}}的字典下 - 使用数据类 - [x] 展示示例 - [x] 处理采样时缓存增强隐藏状态。暂时忽略锚定KV缓存 - [x] 用于推理时不释放记录器保存的输出的逻辑 - [x] 管理交叉注意力块状态,以从记录器中弹出保存的输出 - [x] 将增强前向传播移到一个共享方法中,并为锚定制定采样方法 - [ ] 能够仅使用模块名称进行连接 - [ ] 展示一个示例,使用<a href="https://github.com/lucidrains/audiolm-pytorch">hubert或wav2vec</a>包装器赋予语言模型听力能力 - [ ] 处理一个包装器或函数,该函数接受序列和提示长度,并自动推导CALM的输入 - [ ] 添加一个选项,用于自注意力路径,其中记忆标记关注所有增强语言模型的隐藏状态,类似于<a href="https://github.com/lucidrains/zorro-pytorch">Zorro</a>中的做法 ## 引用 ```bibtex @inproceedings{Bansal2024LLMAL, title = {LLM Augmented LLMs: Expanding Capabilities through Composition}, author = {Rachit Bansal and Bidisha Samanta and Siddharth Dalmia and Nitish Gupta and Shikhar Vashishth and Sriram Ganapathy and Abhishek Bapna and Prateek Jain and Partha Pratim Talukdar}, year = {2024}, url = {https://api.semanticscholar.org/CorpusID:266755751} }
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号