[THUDM/ChatGLM-6B]deepspeed inference 显存问题

2024-06-12 709 views
5

deepspeed 执行chatglm推理会出现显存成倍的情况,具体如下:

deepspeed --num_gpus 2 test.py 服务器环境中有2个gpu,执行推理的时候,会出现显存为2倍参数量。 也就是可以理解为,并deepspeed加载后,并没有完成模型并行,2块gpu都加载了同样参数量,存在显存翻倍的情况。 测试bloom模型并未出现这个情况,具体不知道是不是和模型底层有关,chatglm为什么使用deepspeed推理时候会出现这个问题?

import torch import os from transformers import AutoTokenizer, AutoModelForCausalLM,AutoModel import deepspeed from modeling_chatglm import ChatGLMForConditionalGeneration import pandas as pd model_id = "chatglm-6b" tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True) model = AutoModel.from_pretrained(model_id, trust_remote_code=True,torch_dtype=torch.float16) model = deepspeed.init_inference( model=model, # Transformers models mp_size=2, # Number of GPU dtype=torch.float16, # dtype of the weights (fp16) replace_method="auto", # Lets DS autmatically identify the layer to replace replace_with_kernel_inject=True, # replace the model with the kernel injector ) model.eval()

批量生成文案

prompt = "请用c++写一段代码,代码的功能是实现对数据库的查询,需要有注释" response, history = model.module.chat(tokenizer, prompt, history=[], max_length=4000) print(response) print("\n\n"+"="70+" 显存占用 "+"="70) print(os.system("nvidia-smi")

Environment
- OS:
- Python: 3.8.10
- Transformers:4.28.0
- PyTorch: 2.0
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :

回答

0

能请教下怎么用deepspeed 做推理吗? x我堆了320g显存

9

能请教下怎么用deepspeed 做推理吗? x我堆了320g显存

上面有推理代码,但是推理有问题,模型没有并行

0

你的代码我能跑出来, 要么我们私聊下?

7

你的代码我能跑出来, 要么我们私聊下?

跑出来我也能啊,我的问题你没看仔细吧? 我的问题是,显存问题,你测过1张卡和2张卡的时候,显存情况? 就是chatglm的显存1张卡15g,2张卡就变成了30g,正常2张卡的话,每张肯定比15g少

2

我这边 好像mp_size=2 就跑不起来,等于1 就可以。

4

mp_size = 2可以运行啊,你服务器有没有2张卡? 等于1是肯定可以,我测试的是显存问题

3

8张显卡,我单卡显存还正常

7

请问下,用deepspeed之后回答一个问题的推理时间有减少吗?

4

老哥请问下 deepspeed 训练粗来的增量模型 怎么样像pt 那样叠加在原来模型之上使用

2

遇到了同样的问题,麻烦官方看看吧

5

遇到了同样的问题,麻烦官方看看吧 目测很多教程和项目写了用deepspeed做多机多卡训练,其实压根就没仔细看显存情况,尤其是那些写推理教程的,真的就不认真研究是否真的用到模型并行

0

同样的问题

8

我遇到了类似问题,LLM 13B

2

请问解决了吗,同样得问题,出现在baichuan 13B

7

大佬,GPU显存成倍增加的问题有解决办法了吗?

6

我想知道,deepspeed的推理如何和自己的服务集成到一起呢,这样直接通过命令跑一个脚本肯定没啥意义吧

4

同问这个问题