使用Langchain,vLLM,FastAPI构建一个自托管的Qwen-7B-Chat

自从2022年底chatgpt横空出世,ai的应用层出不穷。你是否希望可以通过一些流行的框架构建一个自己的llm(Large Language Model)系统,并将LLM投入生产?那么本文或许将符合你的要求。
本教程将逐步构建出一个简单的Demo,在过程中将使用Vllm进行模型推理,Langchain构建向量数据库,使用Fastapi提供Web服务,并在DeepLn平台实现模型的部署。
如何选择实例
运行深度学习模型特别是LLM需要大量的算力,虽然可以通过一些方法来使用cpu运行llm(llama.cpp),但一般来说需要使用GPU才可以流畅并高效地运行。对于本教程来说,vLLM目前支持Qwen 7B Chat的Int4量化版本(经过测试,截止到教程发布前不支持Int8量化),该版本最小运行显存为7GB,所以可以在类似3060这样显存>=8GB的显卡上运行。如果需要使用半精度推理,那么至少需要16.5GB显存,那么运行它就需要3090这样大显存的卡了。
由于vLLM并没有对量化模型进行优化,所以在示例中使用模型的未量化版本,以获得更好的准确性和更高的吞吐量。
启动实例并配置环境
启动实例
打开DeepLn官网,如果没有注册账号,可以先注册账号,现在注册账号并绑定微信送30算力金, DeepLn旨在为算力需求着们提供高性能、易于使用、性价比极高的算力服务,坚信GPU算力不应该成为算力需求者的科研障碍。话不多说,点击"算力市场",这里以A100为示例,点击"可用"进入选择主机界面,选择可用的主机,点击"立即租用",此时出现选择gpu数量和框架等的界面,参考配置如下

点击**“可用"进入选择主机界面,选择可用的主机,点击"立即租用”**,此时出现选择gpu数量和框架等的界面,参考配置如下

点击**“立即创建”,即可来到控制台,此时状态为"创建中”**

在创建结束后状态变为"运行中",此时即可通过code-server或者ssh访问实例。
配置环境
使用如下命令将pip源更换为国内源,加速包的安装:
cd ~
mkdir .pip
cd .pip
touch pip.conf
echo "[global]\nindex-url=https://pypi.tuna.tsinghua.edu.cn/simple">>pip.conf
然后通过如下命令安装依赖项:
pip install langchain vllm gptcache modelscope
pip install transformers==4.32.0 accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed
如果使用的是Int4版本的模型,还需要额外安装如下依赖项:
pip install auto-gptq optimum
下载模型并测试离线推理
在本教程中将使用Qwen-7B-Chat,以下为模型的官方介绍:
**通义千问-7B(Qwen-7B)**是阿里云研发的通义千问大模型系列的70亿参数规模的模型。Qwen-7B是基于Transformer的大语言模型, 在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-7B的基础上,我们使用对齐机制打造了基于大语言模型的AI助手Qwen-7B-Chat。相较于最初开源的Qwen-7B模型,我们现已将预训练模型和Chat模型更新到效果更优的版本。Github代码库
我们先测试离线LLM推理,然后再部署模型。只要从modelscpoe或者huggingface上将模型下载到本地,就可以无限进行推理。
from vllm import LLM, SamplingParams
import time
import os
#使用modelscope,如果不设置该环境变量,将会从huggingface下载
os.environ['VLLM_USE_MODELSCOPE']='True'
上面的代码导入了需要的库,并设置了”VLLM_USE_MODELSCOPE“这个环境变量为"True",这将会从modelscope而不是huggingface下载模型。如果需要从huggingface上下载可以将这行代码注释掉。
然后就可以下载模型了,只需要执行如下代码,就会自动从modelscope/huggingface下载到本地。
#无量化,最低显存占用约16.5GB
llm = LLM(model="qwen/Qwen-7B-Chat", trust_remote_code=True)
#int4量化,最低显存占用约7GB
# llm = LLM(model="qwen/Qwen-7B-Chat-int4", trust_remote_code=True,gpu_memory_utilization=0.35)
值得注意的是如果显存不够大,需要自行调整gpu_memory_utilization参数到一个合适的值,这个值会限制模型可以使用的最大显存(当然,给模型使用的显存必须大于最低值,否则无法成功加载)。
当你下载成功后,代码的输出应该类似于这样:
Downloading: 100%|██████████| 8.21k/8.21k [00:00<00:00, 12.1MB/s]
Downloading: 100%|██████████| 50.8k/50.8k [00:00<00:00, 1.39MB/s]
Downloading: 100%|██████████| 244k/244k [00:00<00:00, 3.02MB/s]
Downloading: 100%|██████████| 135k/135k [00:00<00:00, 1.74MB/s]
Downloading: 100%|██████████| 910/910 [00:00<00:00, 3.00MB/s]
Downloading: 100%|██████████| 77.0/77.0 [00:00<00:00, 317kB/s]
Downloading: 100%|██████████| 2.29k/2.29k [00:00<00:00, 8.67MB/s]
Downloading: 100%|██████████| 1.88k/1.88k [00:00<00:00, 7.11MB/s]
Downloading: 100%|██████████| 249/249 [00:00<00:00, 1.05MB/s]
Downloading: 100%|██████████| 1.63M/1.63M [00:00<00:00, 12.8MB/s]
Downloading: 100%|██████████| 1.84M/1.84M [00:00<00:00, 12.7MB/s]
Downloading: 100%|██████████| 2.64M/2.64M [00:00<00:00, 17.7MB/s]
Downloading: 100%|██████████| 6.73k/6.73k [00:00<00:00, 1.29MB/s]
Downloading: 100%|██████████| 80.8k/80.8k [00:00<00:00, 2.01MB/s]
Downloading: 100%|██████████| 80.8k/80.8k [00:00<00:00, 2.22MB/s]
Downloading: 100%|█████████▉| 1.83G/1.83G [00:22<00:00, 87.2MB/s]
Downloading: 100%|█████████▉| 1.88G/1.88G [00:20<00:00, 99.9MB/s]
Downloading: 100%|█████████▉| 1.88G/1.88G [00:26<00:00, 77.0MB/s]
Downloading: 100%|█████████▉| 1.88G/1.88G [00:27<00:00, 74.3MB/s]
Downloading: 100%|█████████▉| 1.88G/1.88G [00:25<00:00, 79.9MB/s]
...
Downloading: 100%|██████████| 41.9k/41.9k [00:00<00:00, 1.12MB/s]
Downloading: 100%|██████████| 230k/230k [00:00<00:00, 2.84MB/s]
Downloading: 100%|██████████| 1.27M/1.27M [00:00<00:00, 11.0MB/s]
Downloading: 100%|██████████| 664k/664k [00:00<00:00, 6.90MB/s]
Downloading: 100%|██████████| 404k/404k [00:00<00:00, 5.16MB/s]
接下来测试模型的推理:
prompts = [
'''
Let's think step by step:
将大象塞到冰箱里面有几个步骤?
'''
]
sampling_params = SamplingParams(temperature=0.8,top_k=10, top_p=0.95,max_tokens=256,stop

本文介绍使用Langchain、vLLM、FastAPI构建自托管Qwen-7B-Chat系统的教程。先讲解实例选择,强调GPU算力需求;接着说明启动实例和配置环境步骤;然后介绍下载模型与离线推理测试;再阐述用FastAPI启动web服务推理;最后讲述用langchain增加知识库,实现模型根据背景知识作答。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



