专栏名称: GiantPandaLLM
专注于机器学习、深度学习、计算机视觉、图像处理等多个方向技术分享。团队由一群热爱技术且热衷于分享的小伙伴组成。我们坚持原创,每天一到两篇原创技术分享。希望在传播知识、分享知识的同时能够启发你,大家一起共同进步(・ω<)☆
目录
相关文章推荐
GiantPandaLLM  ·  Meta Shuffling的MoE ... ·  19 小时前  
GiantPandaLLM  ·  [vLLM实践][算子] ... ·  3 天前  
GiantPandaLLM  ·  MetaShuffling:Meta的Fus ... ·  昨天  
51好读  ›  专栏  ›  GiantPandaLLM

[InternLM/VL系列]InternLM2/LM2.5/ViT/VL1.5/VL2.0笔记: ...

GiantPandaLLM  · 公众号  · 3D  · 2025-04-01 15:16

正文

请到「今天看啥」查看全文


LMDeploy原生支持 ,LMDeploy无缝衔接InternLM2系列的部署,开箱即用,性能也不错;(2) de-Interleaving Wq, Wk, Wv -> LLaMA ,即先对权重解交织,还原成标准的LLaMA结构和参数保存格式,然后就可以开心地使用现有的众多框架进行部署了。InternLM官方也提供了转换工具,非常nice,具体请参考:

InternLM Convert Tools https://github.com/InternLM/InternLM/tree/main/tools

其中解交织部分的代码如下。这个gs表示就是上图中有多少个query head和kv的权重交织在一起,num_key_value_groups就是query head的数量,这些query head对应相同的KV,2是指k和v各占一份。torch.split在dim=1按照 [num_key_value_groups, 1, 1] 进行切分,这是由于使用了GQA,多个query head对应一组KV head,在split的时候要符合GQA的要求。split得到Wq,Wk,Wv权重矩阵后,在reshape回原来的二维矩阵的维度。其他剩余的逻辑主要就是权重name的一对一匹配了,这个很好理解。关于rearrange用法,推荐阅读(非常清晰): 科技猛兽:PyTorch 70.einops:优雅地操作张量维度 ( https://zhuanlan.zhihu.com/p/342675997 )

权重解交织逻辑
num_key_value_groups计算逻辑
  • TensorRT-LLM中的InternLM2权重解交织

另外,目前在TensorRT-LLM中,支持直接使用InternLM2原生模型进行checkpoint转换、build engine和推理,我们可以从convert_checkpoint.py中的逻辑可以看到,其中执行了权重解交织操作,然后使用TensorRT-LLM的API进行权重的赋值以及组网操作,并且调用了tensorrt_llm.models.llama中的convert组件,来对权重进行正确的转换。不过,在目前的实现中,还不支持FP8/SQ量化,只支持Weight Only。因此,如果需要走FP8量化部署的方案,还是建议走”de-Interleaving Wq, Wk, Wv -> LLaMA“的方案。TensorRT-LLM中示例见: https://github.com/NVIDIA/TensorRT-LLM/tree/main/examples/internlm2

TensorRT-LLM InternLM2 权重解交织
  • LMDeploy中的InternLM2的权重解交织

另外,我们再回到LMDeploy的源码看下交织后的权重是如何妥善处理,并利用TurboMind后端推理的。具体代码如下。从代码中看到,LMDeploy的实现,实际上也是先将权重进行解交织,并且对权重按照name一对一匹配,接着使用LLaMa结构进行转换,InternLM2Reader继承的是LlamaReader。详细代码见:

https://github.com/InternLM/lmdeploy/blob/main/lmdeploy/turbomind/deploy/source_model/internlm2.py

LMDeploy中的权重解交织
  • vLLM中的InternLM2权重解交织

作为LLM推理主流框架之一的vLLM,自然也是支持InternLM2的部署,大致瞄了一眼其中的实现,对于权重解交织的处理和TensorRT-LLM以及LMDeploy是完全一致的。(PS:这么说,权重交织这个事儿对于推理来说是不是有点多余了,实际部署的时候全都是得先解交织一遍...),代码见:

https://github.com/vllm-project/vllm/blob/main/vllm/model_executor/models/internlm2.py#L313

vLLM中的权重解交织

0x02 InternLM2.5简析

  • InternLM2.5最新进展

2024年7月3日,InternLM团队发布了InternLM2.5,模型结构和InternLM2一样,效果更好。大概看了下,这次主要是更新了7B系列的Chat模型。其中InternLM2.5-7B-Chat-1M模型支持百万长度的上下文窗口。这次发布的主要核心点有三个: (1)卓越的模型推理能力 ,在数学推理的任务上达到了SOTA,超过了同等规模参数量的其他模型,如LLaMA3-8B和Gemma-9B; (2)支持百万长度上下文长度的推理 ,并且可以通过LMDeploy快速部署,开箱即用(PS: 他们家训推一整套无缝衔接做的真的太棒了!赞!LMDeploy性能和用户体验都不错。); (3)增加了更多的应用工具的支持 ,比如快速对大量的网页信息进行聚合,后续也将会整和到Agent工具中。

InternLM2.5
  • InternLM2.5 Benchmark

可以看到,InternLM2.5 7B Chat模型在多项任务上都达到了同等参数规模模型的SOTA水平,并且在Math任务上,比LLaMA3-8B-Instruct和Gemma2-9B-IT要高出一大截啊,说实话,有点被震惊到了。

InternLM2.5 Benchmark

0x03 InternViT简析

  • InternViT模型结构解析

InternViT-6B

InternViT-6B采用的就是经典的ViT模型结构,作为InternVL的视觉模块进行使用,不单独使用。ViT参考文献: arxiv.org/abs/2010.1192( https://arxiv.org/abs/2010.11929 ) 9 ;ViT经典模型结构如下:







请到「今天看啥」查看全文