-
Notifications
You must be signed in to change notification settings - Fork 448
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature] 我有一段代码,不知道怎么使用LMDeploy去加速它 #2958
Comments
这段代码跟传统的语言大模型有几点区别,
|
不确定能不能做。 decode 返回的是logits,而不是hidden_states。你代码里面的 llm_decoder 似乎不是 model 里面的 lm_head?如果可以 llm_decoder 可以替换 model 里面的 lm_head 的话,pipeliine.get_logits 就相当于 关于decode 传 embedding 格式大概是下面这个样子,含义就是有一串 dummy ids,用0表示,然后根据 input_embedding_ranges 用 input_embeddings 来替代 input_ids 经过 lookup table 得到的特征,其中 input_embedding_ranges 里面的 range是左闭右开的。 input_ids: [0,0,0,...] # list 长度是n 注意到你的 forward_one_step 其实是有状态的 (cache)。sequence_start / sequence_end 也需要设置一下,对于每个 sample 第一次需要设置 sequence_start=True,sequence_end=False,中间的step都设置为False,最后一个step设置为False,True |
感谢 感谢 我将做一个尝试 |
@irexyc Hi!多谢指点 ,decode 代码通了
但是发现了个问题
在 transformers/models/qwen2/modeling_qwen2.py 中 计算 logits = self.lm_head(),入参是 outputs[0],所以我认为 LMDeploy 也是这样做的 但是在cosvoice 的代码中,计算logp = self.llm_decoder(),入参是 outputs.hidden_states[-1][:,-1], 这显然跟 LMDeploy 的计算逻辑不一样 另外我感觉generator.decode()这个函数,入参都是在 cpu 上的,等最终跑起来之后,应该会有大量的传输开销, 从优化层面有什么方法可以避免嘛 |
lmdeploy decode 接口返回的是 LLM 模型最终的输出 (output of lm_head),所以我上面建议你把 llm_decoder 的权重放到 model 的 lm_head里面,这样你用 lmdeploy decode 就相当于做了你上面的 如果你的 lm_input 本身是gpu tensor,想避免传输开销的话,可以试试 pytorch backend,用法类似。 |
Motivation
工程里面有一段代码,想用LMDeploy加速它
https://github.com/FunAudioLLM/CosyVoice/blob/main/cosyvoice/llm/llm.py
Related resources
我把它的主体结构截出来了
网络结构,标准的QWen2-0.5B
decode 循环
我想问一下,这段代码可以使用LNDeploy 直接进行加速吗,或者我需要改什么
PS: 我在考虑直接使用LMDeploy 加速一个 forward_one_step (就是一个decode),其他的代码还复用之前的工程结构,
我找到了一个Demo,https://github.com/InternLM/lmdeploy/blob/main/lmdeploy/turbomind/decode.py ,但是decode的参数我不知道怎么传 ^_^~~
Additional context
No response
The text was updated successfully, but these errors were encountered: