通义千问(Qwen)是阿里云研发的通义千问大模型系列的70亿参数规模的模型。Qwen是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。

今天我们来对这个模型进行本地部署实践

一、环境要求

  • python 3.8及以上版本

  • pytorch 1.12及以上版本,推荐2.0及以上版本

  • 建议使用CUDA 11.4及以上(GPU用户、flash-attention用户等需考虑此选项)

、快速部署

git clone https://github.com/QwenLM/Qwen``pip install -r requirements.txt

PS:如果你的显卡支持fp16或bf16精度你还推荐安装flash-attention来提高你的运行效率以及降低显存占用。(不是必选项)

git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention``cd flash-attention && pip install .

下面我们可以Transformers来调用qwen模型了,代码具体如下:

from transformers import AutoModelForCausalLM, AutoTokenizer``from transformers.generation import GenerationConfig``?``# 可选的模型包括: "Qwen/Qwen-7B", "Qwen/Qwen-14B"``tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B", trust_remote_code=True)``?``# 打开bf16精度,A100、H100、RTX3060、RTX3070等显卡建议启用以节省显存``# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True, bf16=True).eval()``# 打开fp16精度,V100、P100、T4等显卡建议启用以节省显存``# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True, fp16=True).eval()``# 使用CPU进行推理,需要约32GB内存``# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="cpu", trust_remote_code=True).eval()``# 默认使用自动模式,根据设备自动选择精度``model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B", device_map="auto", trust_remote_code=True).eval()``?``# 可指定不同的生成长度、top_p等相关超参``model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B", trust_remote_code=True)``?``inputs = tokenizer('南斯拉夫战争后,分裂为哪几个国家?', return_tensors='pt')``inputs = inputs.to(model.device)``pred = model.generate(**inputs)``print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))``# 南斯拉夫战争之后,南斯拉夫社会主义联邦共和国彻底解体,分裂为以下几个独立国家: 斯洛文尼亚    克罗地亚    波斯尼亚和黑塞哥维纳(波黑)    北马其顿    黑山    塞尔维亚.....

、模型量化

1、AutoGPTQ量化法:

在量化使用前,请先保证满足要求(如torch 2.0及以上,transformers版本为4.32.0及以上,等等),并安装所需安装包:

pip install auto-gptq optimum

如安装auto-gptq遇到问题,我们建议您到官方repo搜索合适的wheel。repo网址:

https://github.com/PanQiWei/AutoGPTQ

随后即可使用和上述一致的用法调用量化模型:

# 可选用的模型包括:"Qwen/Qwen-7B-Chat-Int4", "Qwen/Qwen-14B-Chat-Int4"``model = AutoModelForCausalLM.from_pretrained(`    `"Qwen/Qwen-7B-Chat-Int4",`    `device_map="auto",`    `trust_remote_code=True``).eval()``response, history = model.chat(tokenizer, "hello", history=None)

2、KV cache量化法

提供use_cache_quantization以及use_cache_kernel两个参数对模型控制,当use_cache_quantization以及use_cache_kernel均开启时,将启动kv-cache量化的功能。具体使用如下:

model = AutoModelForCausalLM.from_pretrained(`    `"Qwen/Qwen-7B-Chat",`     `device_map="auto",`     `trust_remote_code=True,`     `use_cache_quantization=True,`     `use_cache_kernel=True,`     `use_flash_attn=False``)

四、微调

在已经下载的程序目录,找到finetune.py脚本,它供用户实现在自己的数据上进行微调的功能。

1、准备微调数据,需要的微调数据样式如下:

[`  `{`    `"id": "identity_0",`    `"conversations": [`      `{`        `"from": "user",`        `"value": "九源的山楂树林里有几棵树?",`      `},`      `{`        `"from": "assistant",`        `"value": "有15棵树"`      `}`    `]`  `}``]

准备好数据后,你可以使用我们提供的shell脚本实现微调。

注意,需要在脚本中指定你的数据的路径。

finetune目录下有几个脚本:能够帮你实现,全参数微调,LoRA,Q-LoRA集中方式的微调。

全参数微调:

# 分布式训练。由于显存限制将导致单卡训练失败,我们不提供单卡训练脚本。``# 注意运行前改数据文件路径哦``sh finetune/finetune_ds.sh

LoRA微调:

在开始前,请确保已经安装peft代码库。另外,记住要设置正确的模型、数据和输出路径。我们建议你为模型路径使用绝对路径。这是因为LoRA仅存储adapter部分参数,而adapter配置json文件记录了预训练模型的路径,用于读取预训练模型权重。

# 单卡训练``sh finetune/finetune_lora_single_gpu.sh``# 分布式训练``sh finetune/finetune_lora_ds.sh

Q-LoRA微调:

# 分布式训练``sh finetune/finetune_qlora_ds.sh``# 官方建议你使用我们提供的Int4量化模型进行训练,即Qwen-7B-Chat-Int4。然而,与全参数微调以及LoRA不同,Q-LoRA仅支持fp16。

微调完成后,和全参数微调不同,LoRA和Q-LoRA的训练只需存储adapter部分的参数。具体代码如下:

from peft import AutoPeftModelForCausalLM``   ``model = AutoPeftModelForCausalLM.from_pretrained(`    `path_to_adapter, # path to the output directory`    `device_map="auto",`    `trust_remote_code=True``).eval()

五、WEB UI

觉得命令行调用太不方便,官方提供了webui,具体安装如下:

pip install -r requirements_web_demo.txt``# 随后运行脚本启动web``python web_demo.py --server-port 8087 --server-name "0.0.0.0"

六、对外API

先安装依赖

pip install fastapi uvicorn openai "pydantic>=2.3.0" sse_starlette

随后即可运行以下命令部署你的本地API:

python openai_api.py

具体调用api脚本:

import openai``openai.api_base = "http://localhost:8000/v1"``openai.api_key = "none"``response = openai.ChatCompletion.create(`    `model="Qwen",`    `messages=[`        `{"role": "user", "content": "hello"}`    `],`    `stream=False,`    `stop=[] # 在此处添加自定义的stop words``)``print(response.choices[0].message.content)

END

那么,如何系统的去学习大模型LLM?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

篇幅有限,部分资料如下:

👉LLM大模型学习指南+路线汇总👈

💥大模型入门要点,扫盲必看!
在这里插入图片描述
💥既然要系统的学习大模型,那么学习路线是必不可少的,这份路线能帮助你快速梳理知识,形成自己的体系。

路线图很大就不一一展示了 (文末领取)
在这里插入图片描述

👉大模型入门实战训练👈

💥光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉国内企业大模型落地应用案例👈

💥两本《中国大模型落地应用案例集》 收录了近两年151个优秀的大模型落地应用案例,这些案例覆盖了金融、医疗、教育、交通、制造等众多领域,无论是对于大模型技术的研究者,还是对于希望了解大模型技术在实际业务中如何应用的业内人士,都具有很高的参考价值。 (文末领取)
在这里插入图片描述

👉GitHub海量高星开源项目👈

💥收集整理了海量的开源项目,地址、代码、文档等等全都下载共享给大家一起学习!
在这里插入图片描述

👉LLM大模型学习视频👈

💥观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 (文末领取)
在这里插入图片描述

👉640份大模型行业报告(持续更新)👈

💥包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

👉获取方式:

这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐