【大模型部署实践-3】3个能在3090上跑起来的4bits量化Chat模型(baichuan2-13b、InternLM-20b、Yi-34b)

写在前面:操作环境

操作系统:win11专业版
GPU:GTX 3090 24G
CUDA:12.0
python: 3.8
PyTorch: 2.0.1(baichuan2必须)

一、baichuan2-13b-chat-4bits

模型下载

魔搭社区下载
先git clone仓库,然后手动下载bin文件

环境部署

  1. 这部分踩坑比较多,主要是各种库兼容性的问题,出现各种报错
  2. transformer需要4.33.1版本,高版本不能兼容,会出现No module named 'transformers_modules.Baichuan2-13B-Chat' transformers之类的错误。
  3. 需要下载bitsandbytes,由于项目所在环境为win11,尝试了下载bitsandbytes-windows并没有用。
  4. 找了一个改造过的仓库的release,对应版本需要bitsandbytes-0.41.1-py3-none-win_amd64(在https://github.com/jllllll/bitsandbytes-windows-webui/releases/tag/wheels下载),低于该版本容易出现问题,如CUDA detection failedcannot import name 'Params4bit' from 'bitsandbytes.nn.modules'(由该解决方案启发)。
  5. 通过pip install xFormers==0.0.20消除警告并推理加速

一些参考:

运行Baichuan2-int4量化版本
"玩一玩"baichuan2
Baichuan2大模型启动时,所依赖的三方包版本都有哪些

代码运行

这部分下载的baichuan2的github仓库,用的cli-demo运行

二、InternLM-20b-chat-4bits

模型下载

魔搭社区下载量化后的参数,
先git clone仓库,然后手动下载bin文件

环境部署

用工具箱所以不需要配置

代码运行

基于transformer加载参数的文档写得有点问题,主要参考“仅需一块3090显卡,高效部署InternLM-20B模型”,使用LMDeploy相关命令转化模型参数、交互。

lmdeploy convert \
    --model-name internlm-chat \
    --model-path ./internlm-chat-20b-4bit \
    --model-format awq \
    --group-size 128 \
    --tp 1

lmdeploy chat turbomind ./workspace

效果上有点问题,多轮对话的回复会重复…目前不知道原因
不过由于其服务化工具比较全,后续会用它来做实验,还po一个部署链接:简化部署,优化推理!LMDeploy RESTful API 让大模型落地更丝滑

部署服务

通过使用lmdeploy serve api_server ./workspace来部署服务,过程中遇到问题:cannot import name ‘Doc‘ from ‘typing_extensions‘,查找资料说因为安装的typing_extensions版本不正确,于是安装pip install typing_extensions==4.8.0

接下来遇到AttributeError: 'InternLMTokenizer' object has no attribute 'sp_model'问题,发现是transfomers版本原因,通过安装4.33.x版本的transformers解决。

然后可以通过本地端口调用接口服务~

三、Yi-34b-chat-4bits

模型下载

魔搭社区下载量化后的参数,
先git clone仓库,然后手动下载bin文件,包括safetensors和bin等文件

环境部署

除了示例代码,由于是4bit,需要安装autoAWQ库(安装对应版本),需要transformers>=4.35.0(这点和baichuan2-13b-chat-4bits不同)
参考:https://zhuanlan.zhihu.com/p/669876594

代码运行(transformer版本)

tokenizer = AutoTokenizer.from_pretrained(
    model_path,
    use_fast=False,
    trust_remote_code=True)


model = AutoModelForCausalLM.from_pretrained(
    model_path,
    device_map="cuda:0", 
    torch_dtype=torch.bfloat16,
    trust_remote_code=True).eval()

messages = []
messages.append({"role": "user", "content": "解释一下“温故而知新”"})

input_ids = tokenizer.apply_chat_template(conversation=messages, tokenize=True, add_generation_prompt=True, return_tensors='pt')
output_ids = model.generate(input_ids.to('cuda'))
response = tokenizer.decode(output_ids[0][input_ids.shape[1]:], skip_special_tokens=True)

代码运行(modelscope版本)

import torch
from modelscope import AutoTokenizer, AutoModelForCausalLM

model_dir = "你的模型所在目录"
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_path=model_dir, trust_remote_code=True)



model = AutoModelForCausalLM.from_pretrained(pretrained_model_name_or_path=model_dir, torch_dtype=torch.bfloat16,
                                             trust_remote_code=True).cuda()
model = model.eval()
inputs = tokenizer(["来到美丽的大自然,我们发现"], return_tensors="pt")
for k,v in inputs.items():
    inputs[k] = v.cuda()
gen_kwargs = {"max_length": 128, "top_p": 0.8, "temperature": 0.8, "do_sample": True, "repetition_penalty": 1.05}
output = model.generate(**inputs, **gen_kwargs)
output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
print(output)

部署服务

还没来得及复现的:

模型Yi-34B-4bits 版本部署

四、总结

  1. 安装部署模型一个个来,耐心慢慢调,基本就是兼容性的问题
  2. 模型从国内开源社区下载比HuggingFace快
  3. 量化方法拓展阅读:大语言模型量化方法对比:GPTQ、GGUF、AWQ
  4. 部署本地知识库的项目:19.7k langchain-chatchat
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aq_Seabiscuit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值