当前位置: 首页 > news >正文

大模型-vllm如何部署新模型-2

一、在vllm 中新增加模型

https://www.llamafactory.cn/vllm/models/adding_model.html

添加新模型的复杂程度在很大程度上取决于模型的架构。如果模型与 vLLM 中的现有模型具有相似的架构,则该过程相当简单。但是,对于包含新运算符(例如,新的注意力机制)的模型,该过程可能会稍微复杂一些。

默认情况下,vLLM 模型不支持多模态输入。要启用多模态支持,请在在此处实现模型后,按照 本指南 进行操作。

二、实际操作步骤

2.1下载vllm的源码

2.2 导入你的模型代码

从 HuggingFace Transformers 存储库克隆 PyTorch 模型代码,并将其放入 vllm/model_executor/models 目录中。例如,vLLM 的 OPT 模型 是从 HuggingFace 的 modeling_opt.py 文件改编而来的。

1. 重写 forward 方法

     接下来,你需要按照以下步骤重写模型的 forward() 方法:

 2.删除所有不必要的代码,例如仅用于训练的代码。

 3. 更改输入参数:

  def forward(self,input_ids: torch.Tensor,
-     attention_mask: Optional[torch.Tensor] = None,
-     position_ids: Optional[torch.LongTensor] = None,
-     past_key_values: Optional[List[torch.FloatTensor]] = None,
-     inputs_embeds: Optional[torch.FloatTensor] = None,
-     labels: Optional[torch.LongTensor] = None,
-     use_cache: Optional[bool] = None,
-     output_attentions: Optional[bool] = None,
-     output_hidden_states: Optional[bool] = None,
-     return_dict: Optional[bool] = None,
- ) -> Union[Tuple, CausalLMOutputWithPast]:
+     positions: torch.Tensor,
+     kv_caches: List[torch.Tensor],
+     attn_metadata: AttentionMetadata,
+ ) -> Optional[SamplerOutput]:
  1. 更新代码,考虑到:code:input_ids 和 positions 现在是扁平化的张量。

  2. 根据模型的架构,将注意力操作替换为 PagedAttentionPagedAttentionWithRoPEPagedAttentionWithALiBi 之一。

  3. 目前,vLLM 支持基本的 multi-head 注意力机制及其带有旋转位置嵌入的变体。如果你的模型采用不同的注意力机制,你需要在 vLLM 中实现一个新的注意力层。

  • 2.3(可选)实现张量并行和量化支持

如果你的模型太大而无法放入单个 GPU,你可以使用张量并行来管理它。为此,用其张量并行版本替换模型的线性层和嵌入层。对于嵌入层,你可以简单地用 VocabParallelEmbedding 替换 torch.nn.Embedding。对于输出 LM 头,你可以使用 ParallelLMHead。对于线性层,我们提供以下选项来并行化它们:

  • ReplicatedLinear: 在多个 GPU 上复制输入和权重。不节省内存。

  • RowParallelLinear: 输入张量沿隐藏维度进行分区。权重矩阵沿行(输入维度)进行分区。在矩阵乘法后执行 all-reduce 操作以减少结果。通常用于第二个 FFN 层和注意力层的输出线性变换。

  • ColumnParallelLinear: 输入张量被复制。权重矩阵沿列(输出维度)进行分区。结果沿列维度进行分区。通常用于第一个 FFN 层和原始 Transformer 中注意力层的独立 QKV 变换。

  • MergedColumnParallelLinear: 合并多个 ColumnParallelLinear 运算符的列并行线性。通常用于具有加权激活函数(例如,SiLU)的第一个 FFN 层。此类处理多个权重矩阵的碎片权重加载逻辑。

  • QKVParallelLinear: 用于多头和分组查询注意力机制的查询、键和值投影的并行线性层。当键/值头的数量小于世界大小,此类会正确复制键/值头。此类处理权重矩阵的权重加载和复制。

请注意,以上所有线性层都将 linear_method 作为输入。vLLM 将根据不同的量化方案设置此参数以支持权重量化。

2.4 实现权重加载逻辑

现在你需要在你的 *ForCausalLM 类中实现 load_weights 方法。此方法应从 HuggingFace 的检查点文件加载权重,并将它们分配给模型中的对应层。具体来说,对于 MergedColumnParallelLinear 和 QKVParallelLinear 层,如果原始模型具有分离的权重矩阵,你需要分别加载不同的部分。

2.5 注册你的模型

最后,将你的 *ForCausalLM 类注册到 vllm/model_executor/models/__init__.py 中的 _MODELS

2.6 树外模型集成

我们还提供了一种无需修改 vLLM 代码库即可集成模型的方法。步骤 2、3、4 仍然需要,但你可以跳过步骤 1 和 5。

只需在你的代码中添加以下几行:

from vllm import ModelRegistryfrom your_code 
import YourModelForCausalLM
ModelRegistry.register_model("YourModelForCausalLM", YourModelForCausalLM)

如果你使用 vllm serve <ar

from vllm import ModelRegistry
from your_code import YourModelForCausalLMModelRegistry.register_model("YourModelForCausalLM", YourModelForCausalLM)
import runpy 
runpy.run_module('vllm.entrypoints.openai.api_server', run_name='__main__')

将以上代码保存在一个文件中,并使用 python your_file.py <args> 运行它。

三、参考示例

https://github.com/vllm-project/vllm/pull/2539/files

http://www.dtcms.com/a/619341.html

相关文章:

  • 我编辑好了一个urdf文件,但是我怕有什么错误,有什么可以用于调试或者发现urdf文件错误的命令行工具吗
  • 外贸公司网站有哪些西安市建设工程信息网平台
  • 中英文网站切换建设银行扬中网站
  • Java Faker库详解
  • 用七牛做网站定制化网站开发的好处
  • 荆门做网站北京网站备案注销中心
  • 著名建站公司哈尔滨市工程建设招投标网
  • 第三方软件验收测试报告有哪些测试内容?多少钱才算合适?
  • 松江品划网站建设推广宿州建设银行网站
  • 昆明网站建设网站建设视觉传播设计与制作专业
  • 软件常用运行库丨去游戏组件
  • 超市如何建立网站产品推广介绍怎么写
  • 网站建设品牌排行榜湘潭做网站口碑好磐石网络
  • 十大设计创意产品网站青岛网站建设seo优化
  • 仿制网站侵权吗网站开发流程的认识
  • Vue Vue与VueComponent的关系
  • 精益求精,支持处理嵌套表格的Word表格转HTML表格
  • 网站推广是什么意思大连建设网水电费查询网址
  • 海丰网站建设中国台州网
  • 关于设计图的网站wordpress优化教程
  • 西安网站建设培训光伏项目建设背景
  • 做饲料机械的网站小挑可以做网站吗
  • 我想做网站怎么做ps做网站首页的尺寸
  • 综合实训-03
  • app推广的网站马来西亚的网站后缀
  • 网站留言效果怎么做淘宝客网站模板
  • 13.【Linux系统编程】从ELF格式深入理解动静态库
  • 梅河口市建设局网站广告策划书模板word
  • 郑州加盟网站建设网站开发者模式下载视频
  • 01BFS学习笔记