liangwq / Chatglm_lora_multi-gpu

chatglm多gpu用deepspeed和
404 stars 61 forks source link

推理问题 #46

Open UncleFB opened 1 year ago

UncleFB commented 1 year ago

比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢

shell-nlp commented 11 months ago

比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢

同问, 你现在有解决方案吗

liangwq commented 11 months ago

https://github.com/THUDM/ChatGLM3/commit/f1852ec467b5f28f5fe1899c250f99e0f3b42733 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合

liangwq commented 11 months ago

比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢

同问, 你现在有解决方案吗

https://github.com/THUDM/ChatGLM3/commit/f1852ec467b5f28f5fe1899c250f99e0f3b42733 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合

shell-nlp commented 11 months ago

比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢

同问, 你现在有解决方案吗

THUDM/ChatGLM3@f1852ec 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合

Chatglm3官方仍然是个 demo, 也没有使用 deepspeed多卡推理, 如果使用deepspeed --num_gpus 进行启动的话,程序中写的web 服务 端口 比如 8080 会被加载 多次,导致端口占用报错,

liangwq commented 11 months ago

比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢

同问, 你现在有解决方案吗

THUDM/ChatGLM3@f1852ec 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合

Chatglm3官方仍然是个 demo, 也没有使用 deepspeed多卡推理, 如果使用deepspeed --num_gpus 进行启动的话,程序中写的web 服务 端口 比如 8080 会被加载 多次,导致端口占用报错,

我抽空解决下,不过估计要到元旦了

shell-nlp commented 11 months ago

好的, 全网找不到一个 将deepspeed单机多卡部署为如fastapi服务的代码,  😭 确实很难

---原始邮件--- 发件人: @.> 发送时间: 2023年12月25日(周一) 晚上6:04 收件人: @.>; 抄送: @.**@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46)

比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢

同问, 你现在有解决方案吗

@.*** 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合

Chatglm3官方仍然是个 demo, 也没有使用 deepspeed多卡推理, 如果使用deepspeed --num_gpus 进行启动的话,程序中写的web 服务 端口 比如 8080 会被加载 多次,导致端口占用报错,

我抽空解决下,不过估计要到元旦了

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

liangwq commented 11 months ago

好的, 全网找不到一个 将deepspeed单机多卡部署为如fastapi服务的代码,  😭 确实很难 ---原始邮件--- 发件人: @.> 发送时间: 2023年12月25日(周一) 晚上6:04 收件人: @.>; 抄送: @.**@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢 同问, 你现在有解决方案吗 @. 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合 Chatglm3官方仍然是个 demo, 也没有使用 deepspeed多卡推理, 如果使用deepspeed --num_gpus 进行启动的话,程序中写的web 服务 端口 比如 8080 会被加载 多次,导致端口占用报错, 我抽空解决下,不过估计要到元旦了 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>

已更新代码,查看最新更新部分

shell-nlp commented 11 months ago

但是 这个代码是用HF 多gpu推理推理的,并没有用deepspeed进行多gpu推理

---原始邮件--- 发件人: @.> 发送时间: 2024年1月3日(周三) 下午2:41 收件人: @.>; 抄送: @.**@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46)

好的, 全网找不到一个 将deepspeed单机多卡部署为如fastapi服务的代码,  😭 确实很难 … ---原始邮件--- 发件人: @.> 发送时间: 2023年12月25日(周一) 晚上6:04 收件人: @.>; 抄送: @.@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢 同问, 你现在有解决方案吗 @. 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合 Chatglm3官方仍然是个 demo, 也没有使用 deepspeed多卡推理, 如果使用deepspeed --num_gpus 进行启动的话,程序中写的web 服务 端口 比如 8080 会被加载 多次,导致端口占用报错, 我抽空解决下,不过估计要到元旦了 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>

已更新代码,查看最新更新部分

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

liangwq commented 11 months ago

但是 这个代码是用HF 多gpu推理推理的,并没有用deepspeed进行多gpu推理 ---原始邮件--- 发件人: @.> 发送时间: 2024年1月3日(周三) 下午2:41 收件人: @.>; 抄送: @.**@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 好的, 全网找不到一个 将deepspeed单机多卡部署为如fastapi服务的代码,  😭 确实很难 … ---原始邮件--- 发件人: @.> 发送时间: 2023年12月25日(周一) 晚上6:04 收件人: @.>; 抄送: @.@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢 同问, 你现在有解决方案吗 @. 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合 Chatglm3官方仍然是个 demo, 也没有使用 deepspeed多卡推理, 如果使用deepspeed --num_gpus 进行启动的话,程序中写的web 服务 端口 比如 8080 会被加载 多次,导致端口占用报错, 我抽空解决下,不过估计要到元旦了 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.> 已更新代码,查看最新更新部分 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

更新了两个文件夹,一个是openai api模式多卡用的Accelerate做的多卡并发推理,速度应该可以的 一个是deepspeed多卡batch推理的 如果你一定要deepspeed+openai api模式这个需要再等等了,感觉速度和Accelerate做的多卡并发推理差不了多少

shell-nlp commented 11 months ago

因为deepspeed infer提供了 张量并行的配置  而hf和acc是没有的

---原始邮件--- 发件人: @.> 发送时间: 2024年1月3日(周三) 下午3:26 收件人: @.>; 抄送: @.**@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46)

但是 这个代码是用HF 多gpu推理推理的,并没有用deepspeed进行多gpu推理 … ---原始邮件--- 发件人: @.> 发送时间: 2024年1月3日(周三) 下午2:41 收件人: @.>; 抄送: @.@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 好的, 全网找不到一个 将deepspeed单机多卡部署为如fastapi服务的代码,  😭 确实很难 … ---原始邮件--- 发件人: @.> 发送时间: 2023年12月25日(周一) 晚上6:04 收件人: @.>; 抄送: @.@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢 同问, 你现在有解决方案吗 @.*** 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合 Chatglm3官方仍然是个 demo, 也没有使用 deepspeed多卡推理, 如果使用deepspeed --num_gpus 进行启动的话,程序中写的web 服务 端口 比如 8080 会被加载 多次,导致端口占用报错, 我抽空解决下,不过估计要到元旦了 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.> 已更新代码,查看最新更新部分 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>

更新了两个文件夹,一个是openai api模式多卡用的Accelerate做的多卡并发推理,速度应该可以的 一个是deepspeed多卡batch推理的 如果你一定要deepspeed+openai api模式这个需要再等等了,感觉速度和Accelerate做的多卡并发推理差不了多少

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

liangwq commented 11 months ago

因为deepspeed infer提供了 张量并行的配置  而hf和acc是没有的 ---原始邮件--- 发件人: @.> 发送时间: 2024年1月3日(周三) 下午3:26 收件人: @.>; 抄送: @.**@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 但是 这个代码是用HF 多gpu推理推理的,并没有用deepspeed进行多gpu推理 … ---原始邮件--- 发件人: @.> 发送时间: 2024年1月3日(周三) 下午2:41 收件人: @.>; 抄送: @.@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 好的, 全网找不到一个 将deepspeed单机多卡部署为如fastapi服务的代码,  😭 确实很难 … ---原始邮件--- 发件人: @.> 发送时间: 2023年12月25日(周一) 晚上6:04 收件人: @.>; 抄送: @.@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46) 比如我要启一个服务端,我怎么能在接收到请求的时候用上deepspeed的多卡推理呢 同问, 你现在有解决方案吗 @. 可以看看chatglm官方github给的方案,如果还是跑不通,在发issue,我来做整合 Chatglm3官方仍然是个 demo, 也没有使用 deepspeed多卡推理, 如果使用deepspeed --num_gpus 进行启动的话,程序中写的web 服务 端口 比如 8080 会被加载 多次,导致端口占用报错, 我抽空解决下,不过估计要到元旦了 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.> 已更新代码,查看最新更新部分 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.> 更新了两个文件夹,一个是openai api模式多卡用的Accelerate做的多卡并发推理,速度应该可以的 一个是deepspeed多卡batch推理的 如果你一定要deepspeed+openai api模式这个需要再等等了,感觉速度和Accelerate做的多卡并发推理差不了多少 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>

最简单的办法就是重写下面方法: @app.post("/chat", response_model=ChatCompletionResponse) async def create_chat_completion(request: ChatCompletionRequest): 这个方法每次接收到前端请求都用python cmd的方式来deepspeed inference这个问题(这部分代码项目里面也有) 这个方法你不需要改太多东西

第二种方法就是集成deepspeed和accelerate,可以直接通过python方式启动一个服务 这个是有难度的(这部分如果你不想自己开发需要等些时间)

liangwq commented 11 months ago

deepspeed的类似openai api接口调用问题 这个问题其实就是grpc服务请求问题 1.deepspeed本质就是一个多卡多节点的服务管理器 2.deepspeed是launch服务的脚本,所以启动服务每次都需要在py文件前面这个指令 3.如果希望把deepspeed服务起一个长连接的占用服务作为推理的服务,理论就是需要基于deepspeed的服务管理做开发 4.这部分其实deepspeed又做了deepspeedmii的开发,所以如果需要可以直接用这个框架起一个resful服务,然后再用fastgpt或者openapi包更上层api就可以了https://github.com/microsoft/DeepSpeed-MII/tree/main/mii/legacy/examples/local 5.deepspeedmii现在有几个问题: a.不支持chatglm模型架构(我看了下它的实现这个问题不大,网络加载用的是transformer,做并发推理用的deepspeed理论和架构关系不大) b.这个框架在做task时候调用了huggingface的hub api也就是每一次都会去判断hub上这个模型的作用和你给的task是否相符合;这个如果外网不好的朋友用起来会很抓狂 c.加载本地模型部分它也用到了hub做cache时间更新管理,一样的如果外网不好的朋友这个用起来很难受 d.这个模型的实现是路就是用了deepspeed的launch包了一层multi gpu服务接口,然后对服务状态做了管理(比如模型内存、状态)这部分如果对grpc熟悉的朋友解决起来几天时间应该够 e.如果用legacy模式上面讲的入口就在deploy方法,这部分代码在deployment.py文件里面实现,可以进去看看,看看怎么样可以把和hub结合代码关闭

liangwq commented 11 months ago

这部分之所以要起一个deepspeed的长服务原因就在于 如果用deepspeed *.py方式每次起服务,会消耗大量的模型加载初始化时间 而如果用mii.deploy或者是mii.server方式相当于是一个异步阻塞服务,模型一直在内存中初始化也一直在进程中 可以同时服务多个客户端,并且可以充分利用deepspeed做的各种加速优化

liangwq commented 11 months ago
image

这个问题测试了opt和llama的用mii可以解决,本地加载可以直接跑起来 chatglm需要做些小改动,在deepspeed的图的文件里面写一个chatglm模型加载类 重新编译一下deepspeed(pip install -e .)发布下就行

shell-nlp commented 11 months ago

万分感谢,学到了,按照大佬讲的 我再好好研究一下

---原始邮件--- 发件人: @.> 发送时间: 2024年1月4日(周四) 晚上8:35 收件人: @.>; 抄送: @.**@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46)

image.png (view on web) 这个问题测试了opt和llama的用mii可以解决,本地加载可以直接跑起来 chatglm需要做些小改动,在deepspeed的图的文件里面写一个chatglm模型加载类 重新编译一下deepspeed(pip install -e .)发布下就行 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

liangwq commented 11 months ago

deepspeed代码做了chatglm适配改了一版本;能跑起来了,但是模型编码适配有些没对齐结果有些问题 有兴趣的可以参考看怎么优化 https://github.com/liangwq/deepspeedmii_chatglm_qwen/tree/main

shell-nlp commented 11 months ago

好的,我研究研究

---原始邮件--- 发件人: @.> 发送时间: 2024年1月7日(周日) 中午1:01 收件人: @.>; 抄送: @.**@.>; 主题: Re: [liangwq/Chatglm_lora_multi-gpu] 推理问题 (Issue #46)

deepspeed代码做了chatglm适配改了一版本;能跑起来了,但是模型编码适配有些没对齐结果有些问题 有兴趣的可以参考看怎么优化 https://github.com/liangwq/deepspeedmii_chatglm_qwen/tree/main

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>