FasterTransformer icon indicating copy to clipboard operation
FasterTransformer copied to clipboard

Support for chatglm-6B/GLM models?

Open tianmala opened this issue 2 years ago • 16 comments

Could you tell me if fastertransformer support for chatglm or glm model? If not, do you have plan to support glm model?

tianmala avatar May 17 '23 09:05 tianmala

Same request.

geolvr avatar May 18 '23 10:05 geolvr

Same request.

YueWen1024 avatar May 22 '23 05:05 YueWen1024

Same request

ppppppppig avatar May 22 '23 11:05 ppppppppig

same request

bmfire1 avatar May 23 '23 09:05 bmfire1

mark

cFireworks avatar May 24 '23 11:05 cFireworks

Same request

felix-fei-fei avatar May 29 '23 03:05 felix-fei-fei

Same request

dawnranger avatar May 30 '23 08:05 dawnranger

mark

uwadeearly avatar Jun 01 '23 12:06 uwadeearly

mark

FrankWhh avatar Jun 06 '23 06:06 FrankWhh

https://huggingface.co/TMElyralab/lyraChatGLM

This chatglm6b model may be optimized based on FasterTransformer

image

我们基于 FasterTransformer,对 ChatGLM-6B 做了较多的定制化优化,主要有:

  • 特有算子:ChatGLM-6B 有大量的特有计算,如 2D-RotaryEmbedding、AlphaResidual、Mask 和 PositionIds 的计算等,我们分析了所有的特定计算操作,以 CUDA 为基础重写了这一系列 Kernel。
  • 算子融合:对于模型计算中,大量的可融合操作,我们进行了融合以减少 kernel 启动的开销和显存的换入换出,如 QKV 变换。注意力计算后的 bias 添加,alpha 因子的残差和 LayerNorm 三个操作可混合为一个。
  • KV-Cache:AutoRegression 的 LLM 中,注意力计算都是单向的,token 一个一个的生成过程中,我们不必把前面计算过的每个样本在每层 transformer 的 tokens 的 key 和 value 重新计算,只需缓存起来。对于当前步的生成,只需用做一个长度为 1 的注意力计算,注意力计算过程中复用前面缓存的 key 和 value. 虽然会带来显存上的额外消耗,但计算得到更多收益。
  • 并行技术:对于过大的 tensor 直接的计算,我们可以通过 tensor 并行,将其切分到不同的机器上进行并行计算。
  • 显存复用:Transformer 结构模型的每一层的输出的尺寸是一致的,对于推理,我们不需要考虑梯度和中间值,因此我们可以对每一层的输入输出复用一块显存空间,以降低显存的开销和加速数据的 IO。

在以上优化技术上,我们实现了 ChatGLM-6B 的优化,为便捷化使用,提供了 Python 的调用方式,和 Huggingface model 的 generate 接口高度保持一致。

Nipi64310 avatar Jun 07 '23 07:06 Nipi64310

https://huggingface.co/TMElyralab/lyraChatGLM

This chatglm6b model may be optimized based on FasterTransformer

image

我们基于 FasterTransformer,对 ChatGLM-6B 做了较多的定制化优化,主要有:

  • 特有算子:ChatGLM-6B 有大量的特有计算,如 2D-RotaryEmbedding、AlphaResidual、Mask 和 PositionIds 的计算等,我们分析了所有的特定计算操作,以 CUDA 为基础重写了这一系列 Kernel。
  • 算子融合:对于模型计算中,大量的可融合操作,我们进行了融合以减少 kernel 启动的开销和显存的换入换出,如 QKV 变换。注意力计算后的 bias 添加,alpha 因子的残差和 LayerNorm 三个操作可混合为一个。
  • KV-Cache:AutoRegression 的 LLM 中,注意力计算都是单向的,token 一个一个的生成过程中,我们不必把前面计算过的每个样本在每层 transformer 的 tokens 的 key 和 value 重新计算,只需缓存起来。对于当前步的生成,只需用做一个长度为 1 的注意力计算,注意力计算过程中复用前面缓存的 key 和 value. 虽然会带来显存上的额外消耗,但计算得到更多收益。
  • 并行技术:对于过大的 tensor 直接的计算,我们可以通过 tensor 并行,将其切分到不同的机器上进行并行计算。
  • 显存复用:Transformer 结构模型的每一层的输出的尺寸是一致的,对于推理,我们不需要考虑梯度和中间值,因此我们可以对每一层的输入输出复用一块显存空间,以降低显存的开销和加速数据的 IO。

在以上优化技术上,我们实现了 ChatGLM-6B 的优化,为便捷化使用,提供了 Python 的调用方式,和 Huggingface model 的 generate 接口高度保持一致。

这个不开源权重转换工具,没法用自己的模型权重

zhaoying9105 avatar Jul 02 '23 13:07 zhaoying9105

torch.classes.FasterTransformer.GlmOp

datalee avatar Jul 13 '23 02:07 datalee

Same request.

xulunfan avatar Jul 16 '23 08:07 xulunfan

mark

yanguowei316 avatar Jul 23 '23 16:07 yanguowei316

Same request.

datalee avatar Aug 03 '23 10:08 datalee

FasterTransformer development has transitioned to TensorRT-LLM.

chatglm-6B and chatglm-v2-6B are supported in TensorRT-LLM. Please take a try.

byshiue avatar Oct 20 '23 10:10 byshiue