BLoRA

BLoRA

批量处理多个LoRA模型以提升GPU利用率

BLoRA项目开发了一种新技术,通过在同一批次中处理多个LoRA模型的推理来提高GPU利用率。该技术支持同时加载多个LoRA适配器,并在单一基础模型上进行并行推理。BLoRA不仅优化了计算效率,还为开发者提供了在不同任务间灵活切换模型行为的工具。这一简单而直观的实现为大规模语言模型的应用创造了新机会。

LoRAGPU优化批处理语言模型推理Github开源项目

批处理LoRA

通过在同一批次中路由多个LoRA的推理来最大化GPU利用率。

解释由@yacineMTB提供。

<table> <tr> <td align="center"> <img src="https://github.com/sabetAI/BLoRA/assets/28828395/a99a7503-e022-4012-84fb-4626d8a15cc5" alt="图片1" /> <p>低秩层适配器的可训练参数很小,可以同时全部保存在显存中。这意味着,你可以使用相同的基础模型,通过切换LoRA来改变其行为。Huggingface的PEFT允许通过其API交换适配器。</p> </td> <td align="center"> <img src="https://github.com/sabetAI/BLoRA/assets/28828395/759326cb-d4da-402c-940b-ad479144b6e4" alt="图片2"/> <p>但如果你想同时对所有适配器进行推理呢?LoRA操作其实很简单!它创建一个与适配层形状相同的输出,然后将它们相加。这肯定可以广播,对吧?</p> </td> <td align="center"> <img src="https://github.com/sabetAI/BLoRA/assets/28828395/b335b30c-438c-494b-ad74-65debcd1910e" alt="图片3" /> <p>确实如此!如果你有相同数量的LoRA适配器,你可以设计一个操作来应用于每个相应的批次。多个模型共享相同的权重。</p> </td> </tr> </table>

使用方法:

0. 克隆仓库

使用git克隆仓库,运行:

git clone https://github.com/sabetAI/BLoRA.git cd BLoRA

设置虚拟环境(推荐)并安装所需包

pip install -r requirements.txt

1. 加载基础模型

from transformers import LlamaForCausalLM, LlamaTokenizer model_path = "decapoda-research/llama-7b-hf" model = transformers.LlamaForCausalLM.from_pretrained(model_path, trust_remote_code=True) tokenizer = transformers.LlamaTokenizer.from_pretrained(model_path) tokenizer.pad_token = 0

2. 从检查点路径将lora注入基础模型

from blora_utils import load_loras loras = ["jondurbin/airoboros-7b-gpt4-1.2-peft", "trl-lib/llama-7b-se-rl-peft", "winddude/wizardLM-LlaMA-LoRA-7B"] model, lora_map = load_loras(model, loras)

3. 通过侧载lora批次ID到模型中准备批次(hack)

from blora_utils import prepare_batch inputs = [('概述一个五句话的短篇故事,其中一个角色在他们的房子里偶然发现一个秘密房间,里面装有来自他们未来的遗物。', 'jondurbin/airoboros-7b-gpt4-1.2-peft'), ('写一段6行的对话,内容是一个角色与只有他们能看到的神奇生物之间的对话。', 'trl-lib/llama-7b-se-rl-peft'), ('描述一个四句话的场景,其中一个角色发现了一项改变他们一生的隐藏天赋。', 'winddude/wizardLM-LlaMA-LoRA-7B'), ('创作一首三节诗,描述在一个郁郁葱葱、充满活力的盛开花园中漫步的感觉。', 'trl-lib/llama-7b-se-rl-peft'), ('创作一个八句话的短篇故事,讲述一个能将梦境变为现实的角色,但只能持续有限的时间。', 'winddude/wizardLM-LlaMA-LoRA-7B')] batch = prepare_batch(inputs, tokenizer, model, lora_map)

4. 流式输出

outputs = [] for out in model.generate(**batch, max_length=200, stream_output=True): outputs.append(out) batch_decoded = tokenizer.batch_decode( torch.cat([out.reshape(-1, 1) for out in outputs], dim=1) ) print( "\n\n".join( [ lora + ":\n" + prompt + "\n" + decoded for (prompt, lora), decoded in zip(inputs, batch_decoded) ] ) )

https://github.com/sabetAI/BLoRA/assets/28828395/287b6cce-555e-4626-852c-1ad79672f27e

致谢

感谢@yacineMTB的审核 🙏。

编辑推荐精选

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

下拉加载更多