issue/350 - Support ChatGLM model#374
Conversation
|
在上一次提交的chatglm的pr中#353 ,还修改了tokenizer, 添加了add_special_tokens变量等。 请问这个pr,还需要tokenizer的改动么 |
@rubik-hua 华老师,请您看下ChatGLM模型的这个问题 |
|
我在解决,这个模型有点问题,离线和推理服务都有, |
1、attention层与GLM4一致,复用。 2、decoder与标准llama一样 3、各个layer层名字与llama进行映射 4、修复examples/test_infer.py中的batch处理 5、修复bench测试时的key名字不一致问题
|
上面的检视意见的问题都已经解决和修复,并且在最上面的comment中粘贴验证截图了。 |
|
@wooway777 你发截图的这两个我理解是模型本身权重就有点问题的,这两天我也发现了,我绕过InfiniLM用transformers去测也有类似问题 |
了解,感谢老师~~ |
wooway777
left a comment
There was a problem hiding this comment.
详见关于test_infer中括号的最新评论,感谢
|
这个地方我研究了一个晚上,仍然感觉原先不加中括号是个bug,我描述下我的思路,看看哪里有漏洞就帮我指出来: 后续的流程大概就是触发调度schedule(),拿到调度结果,构建推理推理的输入: 所谓batch处理,我理解的就是只要调度器的策略认为哪些请求是可以放一起处理的,就是它的调度结果。 现在的问题是,原来不带中括号的情况下 以上是分析代码感觉原来的conversations是有点问题的。 下面做一些验证: 而conversations改成带中括号,输出就是有3条了,我觉得这样才是正确的。 而原先conversations不带中括号的情况下,我理解实际上就是只有一个请求,只不过把三个message拼到一起了,然后模型居然还能吭哧吭哧写出来。 所以,这个地方还是仔细研究一下看看, @pengcheng888 @wooway777 |
|
test_infer这个地方,模拟的是已经扎好batch之后的批处理场景。就是多个相同的请求扎成一个batch然后做一次推理。显示结果时只显示第一个请求。 后来前端重构的时候为了省事,直接调用了LLM,才经过了调度器。这个我们后面确实可以考虑再简化成之前的版本。 目前来说,好像加了中括号之后ChatGLM行为确实相对正常。但是对于其他已经支持的模型,batch size是多少就会做多少次单batch单请求推理,可以从耗时中直接体现出来,与预期不符。 |
|
@wooway777 @pengcheng888 然后还是从实际跑的结果来看,还是抛开chatglm不谈,直接跑已支持的模型DeepSeek-R1-Distill-Qwen-7B 但实际运行不是这样的。 比如 调度器默认的max_batch_size为16,可以预见当batch_size=32,时间就会加大 |
|
@wooway777 非常感谢。麻烦再核对一下,也可以考虑拉个视频会议交流一下。 上面comment我忘记说了一点,batch处理得开启paged-attention,运行时得加上--enable-paged-attn 这个实测也是符合预期的。 batch-size =8 python examples/test_infer.py --device nvidia --model=/data/rubik/models/DeepSeek-R1-Distill-Qwen-7B/ --batch-size=8 --prompt="山东最高的山是?" |





























1、attention层与GLM4一致,复用。
2、decode层相比GLM4少了post_self_attn_layernorm和post_mlp_layernorm
3、各个layer层名字与llama进行映射
测试命令:python examples/test_infer.py --device nvidia --model=/data/rubik/models/chatglm3-6b/


测试命令:python examples/test_infer.py --device nvidia --model=/data/rubik/models/chatglm3-6b/ --enable-paged-attn
推理服务测试命令:CUDA_VISIBLE_DEVICES=0,1 python python/infinilm/server/inference_server.py --device nvidia --model=/data/rubik/models/chatglm3-6b/ --enable-paged-attn --tp=2



修改了python/infinilm/modeling_utils.py中的remap逻辑,验证GLM4逻辑没变化

python examples/test_infer.py --device nvidia --model=/data/rubik/models/GLM-4-9B-0414/ --enable-paged-attn
batch测试:

python examples/test_infer.py --device nvidia --model=/data/rubik/models/chatglm3-6b/ --enable-paged-attn --batch-size=8 --prompt="山东最高的山是?"
bench测试:

python examples/bench.py --device nvidia --model=/data/rubik/models/chatglm3-6b/ --enable-paged-attn
英文输出丢空格验证:python examples/test_infer.py --device nvidia --model=/data/rubik/models/chatglm3-6b/ --enable-paged-attn --prompt="introduce yourself"

test_benchmark.py能跑测试:python test/bench/test_benchmark.py --device nvidia --model=/data/rubik/models/chatglm3-6b/ --enable-paged-attn --bench=mmlu --split=val
