如何云端部署Qwen-7B-Chat?2026年vLLM+LangChain+FastAPI全流程指南
This tutorial provides a step-by-step guide to deploying the Qwen-7B-Chat large language model on the cloud using vLLM for inference, LangChain for vector database construction, and FastAPI for web services, with deployment on the cost-effective FunHPC cloud platform. 原文翻译: 本教程提供了一个分步指南,指导如何在云端部署Qwen-7B-Chat大语言模型,使用vLLM进行推理,LangChain构建向量数据库,FastAPI提供Web服务,并在高性价比的FunHPC云平台上实现部署。
从零到一:在云端部署并生产化 Qwen-7B-Chat通义千问-7B-Chat,是阿里云研发的70亿参数规模的大语言模型,基于Transformer架构,在超大规模预训练数据上训练得到,并使用对齐机制打造的AI助手模型。 LLM 系统
引言
自从2022年底ChatGPT横空出世,AI的应用层出不穷。你是否希望可以通过一些流行的框架构建一个自己的LLM(Large Language Model,大语言模型)系统,并将LLM投入生产?那么本文或许将符合你的要求。
自2022年底ChatGPT问世以来,AI应用层出不穷。你是否希望借助流行的框架构建自己的LLM(Large Language Model,大语言模型)系统,并将其投入生产?如果是这样,本文或许能满足你的需求。
本教程将逐步构建出一个简单的Demo,在过程中将使用VLLM一个高性能的LLM推理和服务库,为DeepSeek-OCR提供优化的推理能力,支持流式输出和批量处理。进行模型推理,LangChainA framework for developing applications powered by language models through composable components.构建向量数据库,使用FastAPIA modern web framework for building APIs with Python 3.7+ based on standard Python type hints.提供Web服务,并在超具性价比的FunHPC趣算云(原DeepLn算力云)实现模型的云端部署。
本教程将逐步构建一个简单的Demo。在此过程中,我们将使用VLLM进行模型推理,LangChain构建向量数据库,FastAPI提供Web服务,并借助极具性价比的FunHPC趣算云(原DeepLn算力云)在云端部署模型。
核心概念与准备工作
如何选择计算实例
运行深度学习模型特别是LLM需要大量的算力。虽然可以通过一些方法来使用CPU运行LLM(例如llama.cpp),但一般来说需要使用GPU才可以流畅并高效地运行。对于本教程来说,vLLM目前支持Qwen 7B Chat的Int4量化一种模型压缩技术,将模型权重从浮点数(如FP16)量化为4位整数,显著减少模型大小和显存占用,但可能略微影响精度。版本(经过测试,截止到教程发布前不支持Int8量化)。该版本最小运行显存为7GB,所以可以在类似RTX 3060这样显存>=8GB的显卡上运行。如果需要使用半精度(FP16/BF16)推理,那么至少需要16.5GB显存,这就需要RTX 3090或A100这样大显存的卡了。
运行深度学习模型,尤其是LLM,需要大量的算力。虽然可以通过某些方法在CPU上运行LLM(例如llama.cpp),但通常需要GPU才能实现流畅高效的运行。对于本教程而言,vLLM目前支持Qwen 7B Chat的Int4量化版本(经测试,截至教程发布时,不支持Int8量化)。该版本最低需要7GB显存,因此可以在RTX 3060等显存>=8GB的显卡上运行。若需使用半精度(FP16/BF16)推理,则至少需要16.5GB显存,这就需要RTX 3090或A100等大显存显卡。
由于vLLM并没有对量化模型进行优化,所以在示例中使用模型的未量化版本,以获得更好的准确性和更高的吞吐量。
由于vLLM目前尚未针对量化模型进行优化,因此本示例将使用模型的未量化版本,以获得更好的准确性和更高的吞吐量。
启动实例并配置环境
启动实例
打开FunHPC趣算云官网。如果没有注册账号,可以先注册一下,并领取注册并绑定微信赠送的30算力金。话不多说,点击“算力市场”,就能看到平台上超具性价比的云端显卡了。这里以A100为示例,开始我们的配置。
打开FunHPC趣算云官网。若尚未注册账号,请先注册,并领取注册及绑定微信后赠送的30算力金。闲话少叙,点击“算力市场”,即可看到平台上极具性价比的云端显卡。我们以A100为例,开始配置。
点击“可用”进入选择主机界面,选择可用的主机,点击“立即租用”。此时出现选择GPU数量和框架等的配置界面(性价比极高,A100仅2.58元/卡时?)。参考配置如下:
点击“可用”进入主机选择界面,选择一台可用主机,然后点击“立即租用”。此时会出现选择GPU数量、框架等配置界面(性价比极高,A100仅2.58元/卡时?)。参考配置如下:
点击“立即创建”,即可来到控制台,此时状态为“创建中”。
点击“立即创建”,即可进入控制台,此时状态显示为“创建中”。
在创建结束后状态变为“运行中”,此时即可通过code-server或者SSH访问实例。
创建完成后,状态变为“运行中”,此时即可通过code-server或SSH访问实例。
配置环境
使用如下命令将pip源更换为国内源,加速包的安装:
使用以下命令将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量化版本的模型,还需要额外安装如下依赖项:
如果计划使用Int4量化版本的模型,还需额外安装以下依赖项:
pip install auto-gptq optimum
下载模型并测试离线推理
在本教程中将使用Qwen-7B-Chat。以下为模型的官方介绍:
本教程将使用Qwen-7B-Chat。以下是该模型的官方介绍:
**通义千问-7B(Qwen-7B)**是阿里云研发的通义千问大模型系列的70亿参数规模的模型。Qwen-7B是基于Transformer的大语言模型,在超大规模的预训练数据上进行训练得到。预训练数据类型多样,覆盖广泛,包括大量网络文本、专业书籍、代码等。同时,在Qwen-7B的基础上,我们使用对齐机制打造了基于大语言模型的AI助手Qwen-7B-Chat。相较于最初开源的Qwen-7B模型,我们现已将预训练模型和Chat模型更新到效果更优的版本。
Qwen-7B 是阿里云通义千问大模型系列中拥有70亿参数的模型。Qwen-7B基于Transformer架构,在超大规模预训练数据上训练而成,数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。此外,在Qwen-7B的基础上,我们利用对齐机制打造了基于大语言模型的AI助手Qwen-7B-Chat。相较于最初开源的Qwen-7B模型,我们已将预训练模型和Chat模型更新至效果更优的版本。
我们先测试离线LLM推理,然后再部署模型。只要从ModelScope阿里云推出的模型开源社区和平台,提供模型托管、下载和推理服务,支持国内高速访问。或者Hugging Face上将模型下载到本地,就可以无限进行推理。
我们先测试离线LLM推理,然后再部署模型。只需将模型从ModelScope或Hugging Face下载到本地,即可进行无限次推理。
from vllm import LLM, SamplingParams
import time
import os
# 使用ModelScope。如果不设置该环境变量,将会从Hugging Face下载。
os.environ['VLLM_USE_MODELSCOPE'] = 'True'
上面的代码导入了需要的库,并设置了VLLM_USE_MODELSCOPE这个环境变量为True,这将会从ModelScope而不是Hugging Face下载模型。如果需要从Hugging Face上下载可以将这行代码注释掉。
上述代码导入了所需库,并将环境变量
VLLM_USE_MODELSCOPE设置为True,这将从ModelScope而非Hugging Face下载模型。若希望从Hugging Face下载,可注释掉此行代码。
然后就可以下载模型了。只需要执行如下代码,就会自动从ModelScope/Hugging Face下载到本地。
接着即可下载模型。只需执行以下代码,模型便会自动从ModelScope/Hugging Face下载到本地。
# 无量化,最低显存占用约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参数到一个合适的值。这个值会限制模型可以使用的最大显存(当然,给模型使用的显存必须大于最低值,否则无法成功加载)。
需要注意的是,如果显存不足,需自行将
gpu_memory_utilization参数调整至合适值。该参数会限制模型可使用的最大显存(当然,分配给模型的显存必须大于最低要求,否则加载会失败)。
当你下载成功后,代码的输出应该类似于这样:
下载成功后,代码输出应类似如下:
Downloading: 100%|██████████| 8.21k/8.21k [00:00<00:00, 12.1MB/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=["<|endoftext|>", "<|im_end|>"])
start_time = time.time()
outputs = llm.generate(prompts, sampling_params)
end_time = time.time()
latency = end_time - start_time
print(f"Latency: {latency} seconds")
# Print the outputs.
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt} \nGenerated text: \n{generated_text}")
这里有很多参数,比如temperature、top_k等。如果你想详细了解,可以查看Hugging Face手册。
这里涉及许多参数,例如
temperature、top_k等。如需详细了解,可查阅Hugging Face文档。
执行如上代码,输出如下:
执行上述代码后,输出如下:
Processed prompts: 100%|██████████| 1/1 [00:00<00:00, 3.27it/s]
Latency: 0.30954647064208984 seconds
Prompt:
Let's think step by step:
将大象塞到冰箱里面有几个步骤?
Generated text:
首先,打开冰箱门。其次,将大象塞入冰箱。最后,关闭冰箱门。
可以看到FunHPC趣算云上的A100只用了约0.3秒就完成了推理,速度非常快,并且正确回答了问题。
可以看到,FunHPC趣算云上的A100仅用约0.3秒便完成了推理,速度极快,且正确回答了问题。
使用FastAPI启动Web服务并进行推理
既然我们已经部署了模型,尝试了离线推理,让我们开始使用FastAPI构建一个API服务。它将处理请求并使用已部署的模型生成LLM响应。
既然我们已经部署了模型并测试了离线推理,现在开始使用FastAPI构建一个API服务。该服务将处理请求,并利用已部署的模型生成LLM响应。
以下代码将启动FastAPI Python应用程序,并在/v1/generateText端点托管LLM模型。它会在端口5001上启动API。如果之前的离线推理部分已经完成了LLM模型下载,则此处不会重新下载LLM模型。
以下代码将启动一个FastAPI Python应用程序,并在
/v1/generateText端点托管LLM模型。API将在端口5001上启动。如果之前的离线推理部分已完成LLM模型下载,此处将不会重新下载。
from vllm import LLM, SamplingParams
import os
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import uvicorn
# 使用ModelScope。如果不设置该环境变量,将会从Hugging Face下载。
os.environ['VLLM_USE_MODELSCOPE'] = 'True'
app = FastAPI()
llm = LLM(model="qwen/Qwen-7B-Chat", trust_remote_code=True)
sampling_params = SamplingParams(temperature=0.8, top_k=10, top_p=0.95, max_tokens=256, stop=["<|endoftext|>", "<|im_end|>"])
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.post("/v1/generateText")
async def generateText(request: Request):
request_dict = await request.json()
prompt = request_dict.pop("prompt")
prompt = [f'''
{prompt}
''']
print(prompt)
output = llm.generate(prompt, sampling_params)
generated_text = output[0].outputs[0].text
print("Generated text:", generated_text)
return JSONResponse({"text": generated_text})
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=5001)
运行上面的Python程序,它的输出应该类似:
运行上述Python程序,其输出应类似如下:
INFO: Started server process [30399]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on ht
```版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。



