OpenBMB / CPM-Bee

百亿参数的中英文双语基座大模型

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

是否支持CPU部署模型并推理

Daniel-1997 opened this issue · comments

image

这里支持CPU部署模型吗?商用的话,一般生产环境缺少GPU机器

当前cpu加载模型的时候会出错

/data/liu/CPM-Bee/src/test_cpm.py:180 in │
│ │
│ 177 │ config = CPMBeeConfig.from_json_file("/data/liu/CPM-Bee/cpm_weight/config.jso │
│ 178 │ ckpt_path = "/data/liu/CPM-Bee/cpm_weight/pytorch_model.bin" │
│ 179 │ tokenizer = CPMBeeTokenizer() │
│ ❱ 180 │ model = CPMBeeTorch(config=config) │
│ 181 │ delta_model = LoraModel(backbone_model=model, modified_modules=["project_q", "projec │
│ 182 │ lora_ckpt_path = "/data/liu/CPM-Bee/save_model/abstract_extract-delta-best.pt │
│ 183 │ model.load_state_dict(torch.load(lora_ckpt_path), strict=False) │
│ │
│ /data/liu/CPM-Bee/src/cpm_live/models/bee_torch.py:40 in init
│ │
│ 37 │ │ │ mask_modules=config.mask_modules, │
│ 38 │ │ ) │
│ 39 │ │ │
│ ❱ 40 │ │ self.input_embedding = EmbeddingExt( │
│ 41 │ │ │ vocab_size=config.vocab_size, │
│ 42 │ │ │ embedding_size=config.dim_model, │
│ 43 │ │ │ dtype=config.dtype, │
│ │
│ /data/liu/CPM-Bee/src/cpm_live/native_layers/embedding.py:77 in init
│ │
│ 74 │ │ super().init() │
│ 75 │ │ │
│ 76 │ │ self.dim_model = embedding_size │
│ ❱ 77 │ │ self.rotary_emb = RotaryEmbedding( │
│ 78 │ │ │ dim=embedding_size, distance_scale=distance_scale, dtype=dtype │
│ 79 │ │ ) │
│ 80 │
│ │
│ /data/liu/CPM-Bee/src/cpm_live/native_layers/position_embedding.py:222 in init
│ │
│ 219 │ ): │
│ 220 │ │ super().init() │
│ 221 │ │ inv_freq = 1.0 / ( │
│ ❱ 222 │ │ │ base ** (torch.arange(0, dim, 2, device="cuda", dtype=torch.float32) / dim) │
│ 223 │ │ ) │
│ 224 │ │ inv_freq = inv_freq.to(dtype) │
│ 225 │ │ self.distance_scale = distance_scale │
│ │
│ /data/anaconda3/envs/moss/lib/python3.8/site-packages/torch/cuda/init.py:229 in _lazy_init │
│ │
│ 226 │ │ # are found or any other error occurs │
│ 227 │ │ if 'CUDA_MODULE_LOADING' not in os.environ: │
│ 228 │ │ │ os.environ['CUDA_MODULE_LOADING'] = 'LAZY' │
│ ❱ 229 │ │ torch._C._cuda_init() │
│ 230 │ │ # Some of the queued calls may reentrantly call _lazy_init(); │
│ 231 │ │ # we need to just return without initializing in that case. │
│ 232 │ │ # However, we must not let any other threads in! │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
RuntimeError: No CUDA GPUs are available

您好,目前已支持,但需要安装bmtrain
如果您没有GPU支持bmtrain,可以使用huggingface

您好,目前已支持,但需要安装bmtrain 如果您没有GPU支持bmtrain,可以使用huggingface

你好,感谢回复,我下载了huggingface上的最新的内容(权重,config.json等)也拉取了最新的代码

我在运行text_generation.py脚本时报错:
image

我理解这里传入的config,应该就是huggingface上的config.json
image
我想是因为config.json里面的字段名和CPMBeeConfig输入参数有不匹配的情况导致的
image

当我按照CPMBeeConfig的输入参数把config改成下面这样就可以了
image

是不是我哪里没有更新导致的?

您好,这是因为huggingface的config字段与bmtrain版本的仓库有差异,这个差异是huggingface中PretrainedConfig类带来的
如果您是从huggingface中下载的config,建议以huggingface的方式运行(text_generation_hf.py),如果是仓库README中下载的config,建议以local/bmtrain的方式运行(text_generation.py)

您好,这是因为huggingface的config字段与bmtrain版本的仓库有差异,这个差异是huggingface中PretrainedConfig类带来的 如果您是从huggingface中下载的config,建议以huggingface的方式运行(text_generation_hf.py),如果是仓库README中下载的config,建议以local/bmtrain的方式运行(text_generation.py)

好的,请问目前支持微调的最小CPM模型的尺寸是1B的是吗?

您好,这是因为huggingface的config字段与bmtrain版本的仓库有差异,这个差异是huggingface中PretrainedConfig类带来的 如果您是从huggingface中下载的config,建议以huggingface的方式运行(text_generation_hf.py),如果是仓库README中下载的config,建议以local/bmtrain的方式运行(text_generation.py)

好的,请问目前支持微调的最小CPM模型的尺寸是1B的是吗?

是的

您好,这是因为huggingface的config字段与bmtrain版本的仓库有差异,这个差异是huggingface中PretrainedConfig类带来的 如果您是从huggingface中下载的config,建议以huggingface的方式运行(text_generation_hf.py),如果是仓库README中下载的config,建议以local/bmtrain的方式运行(text_generation.py)

你好,readme和huggingface我都尝试了,发现对同样一条数据,模型推断的结果不一样,text_generation_hf推理的更快一些,但是在我的问题上不如text_generation的表现,这是beamsearch 和 model.generate机制不同导致的吗?

您将text_generation_hf里面添加repetition_penalty参数呢

res = model.generate([{"input": "", "<ans>": ""}], tokenizer, max_new_tokens=100, repetition_penalty=1.1)

您将text_generation_hf里面添加repetition_penalty参数呢

res = model.generate([{"input": "", "<ans>": ""}], tokenizer, max_new_tokens=100, repetition_penalty=1.1)

你好,我加了这个参数了,现在model.generate 和beam参数是一致的:
repetition_penalty=1.1
生成的结果没有变,两个还是不一样,model.generate用时短,生成的也明显更短,两个我都加载了同样的delta权重,delta权重是模型在CPMBeeTorch(config=config)加载下训练出来的,这个影响吗?
因为我发现在使用huggingface的情况下,加载delta权重和不加载微调的delta权重得到的推理结果一致,感觉delta权重没有加载成功。很奇怪。我加载模型和delta是这样的:

tokenizer = AutoTokenizer.from_pretrained("/data/liu/CPM-Bee/cpm_weight", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("/data/liu/CPM-Bee/cpm_weight", trust_remote_code=True).cuda()【这里我没加cuda的话进行的就是cpu推理吧?】
delta_model = LoraModel(backbone_model=model, modified_modules=["project_q", "project_v"], backend="hf")
model.load_state_dict(torch.load("/data/liu/CPMBee/save_model/abstract_extract-delta-best.pt"), strict=False)

上面的指令执行完没有报错,但是有很多权重不一致的打印:
image

您好,目前已支持,但需要安装bmtrain 如果您没有GPU支持bmtrain,可以使用huggingface

这里bmtrain必须有gpu、cuda 才能安装,cpu的机器是无法pip install的对吗?(这里的使用指像text_generation那样推理)
image

感谢您的反馈

  1. 关于text_generation.py与text_generation_hf.py输出结果不一致的问题已修复
  2. load delta权重的问题已修复
  3. bmtrain依赖gpu与cuda,cpu机器无法安装
  4. 设置cpu推理在去掉.cuda()之外,需要添加.float()调整为float32格式:
    model = AutoModelForCausalLM.from_pretrained("/data/liu/CPM-Bee/cpm_weight", trust_remote_code=True).float()

感谢支持~