ChatGLM2-6B模型部署教程

新知榜官方账号

2023-07-31 10:08:31

ChatGLM2-6B模型部署教程

ChatGLM2-6B是由清华大学开发的中英双语对话模型,它能生成相当符合人类偏好的回答,使每个人都能拥有自己的AI大模型。

本文总结了部署该模型过程中的一些技术点,希望通过详细的教程帮助到更多的开发者。

SEO关键词:

  • ChatGLM2-6B
  • 双语对话模型
  • 开源生态

ChatGLM2-6B的整体运行流程可以分为5个阶段,具体如下:

  1. 将句子通过分词器(使用google的sentencepiece)转换成tokens。
  2. 通过WordEmbedding将tokens转换成词向量。
  3. 通过Tranformer进行神经网络推理。
  4. 经过LmHead操作生成输出的Token。
  5. Token经过分词器转成词语,且传递给下一轮推理,进入第一阶段。

ChatGLM2-6B从前面的描述中,可以看到有两处是动态的,一是因句子的长短不同,Transformer的输入Shape有所有不同;二是每一轮Transformer生成的kvcache会逐步增长。为了方便部署,根据网络特点转换成静态网络。

转换后的运行流程如下:

  1. 将原始tokens输入尾部补0,从<1x17xi32>转换成<1x512xi32>
  2. 将position_ids从GlmBlock中提取出来,并固定长度为<1x512xi32>,也是尾部补0,用于位置编码。
  3. 将attention_mask从GlmBlock中提取出来,并固定长度为<1x512x512xf32>,注意无效部分全部补1,因为它之后会有masked_fill操作将mask为1的部分全部配置为-inf。
  4. 经过Softmax使超出部分全部清0,保留有效部分,从而保证最终结果与原始结果一致。
  5. 将kvcache的累加移到末尾[512-17:],并头部清0。
  6. 从第二轮开始累加后做Slice操作去掉头部1个单位,取[1:],这样就保证了kvcache始终保持在512。
  7. attentionmask也要是从尾部实际tokenlen长度的0,头部全部置1。

ChatGLM2-6B模型部署需要将模型导出成ONNX,并使用TPU-MLIR编译器实现网络的编译。导出ONNX将该网络分为4块:WorkEmbedding,GlmBlock,GlmBlockCache,LmHead。

最后,根据执行逻辑编写C++代码即可。

本页网址:https://www.xinzhibang.net/article_detail-8977.html

寻求报道,请 点击这里 微信扫码咨询

关键词

ChatGLM2-6B 双语对话模型 开源生态

分享至微信: 微信扫码阅读

相关工具

相关文章