Langchain-Chatchat icon indicating copy to clipboard operation
Langchain-Chatchat copied to clipboard

[BUG] 启动2个本地模型指定显卡不生效

Open ilovecomet opened this issue 1 year ago • 3 comments

问题描述 / 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 avatar Mar 13 '24 07:03 ilovecomet

嘿,@ilovecomet!很高兴再次见到你。希望你一切都好!

感谢您的反馈。您的问题是在启动两个本地大模型时,GPU分配配置不生效,导致两个模型都使用同一张显卡,从而导致显存不足。这个问题可能是由于在create_model_worker_app函数中,GPU分配的配置没有根据启动的模型数量或它们的内存需求动态调整。

在Langchain-Chatchat的代码中,GPU分配在两个地方静态设置,这并没有考虑到多个大模型可能同时运行的情况。

  1. 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
    
  2. 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

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.

dosubot[bot] avatar Mar 13 '24 07:03 dosubot[bot]

嘿,@ilovecomet!很高兴再次见到你。希望你一切都好!

感谢您的反馈。您的问题是在启动两个本地大模型时,GPU分配配置不生效,导致两个模型都使用同一张显卡,从而导致显存不足。这个问题可能是由于在create_model_worker_app函数中,GPU分配的配置没有根据启动的模型数量或它们的内存需求动态调整。

在Langchain-Chatchat的代码中,GPU分配在两个地方静态设置,这并没有考虑到多个大模型可能同时运行的情况。

  1. 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
    
  2. 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

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.

改了好像没起作用

Molocks avatar Mar 13 '24 09:03 Molocks

没办法进行多卡分配模型

Modas-Li avatar Mar 14 '24 02:03 Modas-Li