[BUG] 启动2个本地模型指定显卡不生效
问题描述 / Problem Description 如果启动2个本地大模型,会出现占用一张显卡内存不够的现象,对两个大模型分配配置不同的gpus,不生效
复现问题的步骤 / Steps to Reproduce 1 server_config相关配置如下 FSCHAT_MODEL_WORKERS配置项 "chatglm2-6b": { # 使用default中的IP和端口 "device": "cuda", "gpus":"0", "port":20003, }, "chatglm3-6b": { # 使用default中的IP和端口 "device": "cuda", "gpus":"1", #TODO 未生效 "port":20004, }, 其他正常启动。
预期的结果 / Expected Result 2个模型分别使用0和1两张显卡
实际结果 / Actual Result 描述实际发生的结果 / Describe the actual result. 0号显卡内存不够,两个模型都使用0卡,1卡空闲。 环境信息 / Environment Information 默认
附加信息 / Additional Information 添加与问题相关的任何其他信息 / Add any other information related to the issue. os.environ["CUDA_VISIBLE_DEVICES"] = args.gpus 这个代码需要在torch工作之前生效,这样处理显然不可以。
嘿,@ilovecomet!很高兴再次见到你。希望你一切都好!
感谢您的反馈。您的问题是在启动两个本地大模型时,GPU分配配置不生效,导致两个模型都使用同一张显卡,从而导致显存不足。这个问题可能是由于在create_model_worker_app函数中,GPU分配的配置没有根据启动的模型数量或它们的内存需求动态调整。
在Langchain-Chatchat的代码中,GPU分配在两个地方静态设置,这并没有考虑到多个大模型可能同时运行的情况。
-
VLLM Worker配置:对于VLLM(Very Large Language Model)worker,GPU的数量(
args.num_gpus)被设置为1,args.tensor_parallel_size根据args.num_gpus进行调整。这个配置没有考虑到可能同时启动多个模型并需要多于一个GPU或基于它们大小的动态分配的情况。args.num_gpus = 1 # vllm worker的切分是tensor并行,这里填写显卡的数量 if args.num_gpus > 1: args.tensor_parallel_size = args.num_gpus -
Model Worker配置:对于一般的model worker,GPU索引(
args.gpus)被硬编码为"0",表示只使用第一张GPU。同样,args.num_gpus被设置为1。这个设置并没有促进模型工作负载在多个GPU之间的分配。args.gpus = "0" # GPU的编号,如果有多个GPU,可以设置为"0,1,2,3" args.num_gpus = 1 # model worker的切分是model并行,这里填写显卡的数量
这两个配置都没有根据启动的模型的实际需求动态分配GPU。这种静态分配可能导致两个大模型试图使用同一张GPU的情况,从而导致显存不足的错误。
为了解决这个问题,应该修改代码,根据启动的模型数量和它们各自的内存需求动态分配GPU。这可能涉及到检查可用的GPU内存,并更均匀地在可用的GPU之间分配模型工作负载。此外,实现一个更复杂的GPU管理系统,可以根据实时的工作负载和内存需求动态调整GPU分配,将防止此类问题的发生。
关于server_config字典中的gpus参数,它在Langchain-Chatchat代码库中的作用是指定用于模型推理的GPU。它应该是一个表示GPU ID的字符串,例如"0,1"表示使用前两个GPU。如果这个参数无效,建议使用环境变量CUDA_VISIBLE_DEVICES="0,1"来指定GPU。
希望这个解答能帮助到您,如果有任何其他问题或需要进一步的帮助,请随时告诉我。
Sources
- 使用vllm怎么配置多卡并行推理
- 运行出错,显示CUDA内存不足,同时还有别的问题,不值得怎么解决
- 程序报错torch.cuda.OutOfMemoryError如何解决?
- 24G的显存还是爆掉了,是否支持双卡运行
- startup.py
- configs/server_config.py.example
- configs/model_config.py.example
About Dosu
This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.
Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.
If you want to continue the conversation, start your reply with @dosu-bot.
嘿,@ilovecomet!很高兴再次见到你。希望你一切都好!
感谢您的反馈。您的问题是在启动两个本地大模型时,GPU分配配置不生效,导致两个模型都使用同一张显卡,从而导致显存不足。这个问题可能是由于在
create_model_worker_app函数中,GPU分配的配置没有根据启动的模型数量或它们的内存需求动态调整。在Langchain-Chatchat的代码中,GPU分配在两个地方静态设置,这并没有考虑到多个大模型可能同时运行的情况。
- VLLM Worker配置:对于VLLM(Very Large Language Model)worker,GPU的数量(
args.num_gpus)被设置为1,args.tensor_parallel_size根据args.num_gpus进行调整。这个配置没有考虑到可能同时启动多个模型并需要多于一个GPU或基于它们大小的动态分配的情况。args.num_gpus = 1 # vllm worker的切分是tensor并行,这里填写显卡的数量 if args.num_gpus > 1: args.tensor_parallel_size = args.num_gpus- Model Worker配置:对于一般的model worker,GPU索引(
args.gpus)被硬编码为"0",表示只使用第一张GPU。同样,args.num_gpus被设置为1。这个设置并没有促进模型工作负载在多个GPU之间的分配。args.gpus = "0" # GPU的编号,如果有多个GPU,可以设置为"0,1,2,3" args.num_gpus = 1 # model worker的切分是model并行,这里填写显卡的数量这两个配置都没有根据启动的模型的实际需求动态分配GPU。这种静态分配可能导致两个大模型试图使用同一张GPU的情况,从而导致显存不足的错误。
为了解决这个问题,应该修改代码,根据启动的模型数量和它们各自的内存需求动态分配GPU。这可能涉及到检查可用的GPU内存,并更均匀地在可用的GPU之间分配模型工作负载。此外,实现一个更复杂的GPU管理系统,可以根据实时的工作负载和内存需求动态调整GPU分配,将防止此类问题的发生。
关于
server_config字典中的gpus参数,它在Langchain-Chatchat代码库中的作用是指定用于模型推理的GPU。它应该是一个表示GPU ID的字符串,例如"0,1"表示使用前两个GPU。如果这个参数无效,建议使用环境变量CUDA_VISIBLE_DEVICES="0,1"来指定GPU。希望这个解答能帮助到您,如果有任何其他问题或需要进一步的帮助,请随时告诉我。
Sources
- 使用vllm怎么配置多卡并行推理
- 运行出错,显示CUDA内存不足,同时还有别的问题,不值得怎么解决
- 程序报错torch.cuda.OutOfMemoryError如何解决?
- 24G的显存还是爆掉了,是否支持双卡运行
- startup.py
- configs/server_config.py.example
- configs/model_config.py.example
About Dosu
This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.
Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.
If you want to continue the conversation, start your reply with @dosu-bot.
改了好像没起作用
没办法进行多卡分配模型