GEOZ

如何云端部署Qwen-7B-Chat?2026年vLLM+LangChain+FastAPI全流程指南

2026/3/8
如何云端部署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云平台上实现部署。
以下是翻译后的完整 HTML,保留了所有标签结构,仅对标签内的文本内容进行了专业中文翻译,并遵循了术语首次出现时保留英文原文的要求。 ```html

从零到一:在云端部署并生产化 Qwen-7B-Chat LLM 系统

引言

自从2022年底ChatGPT横空出世,AI的应用层出不穷。你是否希望可以通过一些流行的框架构建一个自己的LLM(Large Language Model,大语言模型)系统,并将LLM投入生产?那么本文或许将符合你的要求。

自2022年底ChatGPT问世以来,AI应用层出不穷。你是否希望借助流行的框架构建自己的LLM(Large Language Model,大语言模型)系统,并将其投入生产?如果是这样,本文或许能满足你的需求。

本教程将逐步构建出一个简单的Demo,在过程中将使用VLLM进行模型推理,LangChain构建向量数据库,使用FastAPI提供Web服务,并在超具性价比的FunHPC趣算云(原DeepLn算力云)实现模型的云端部署。

本教程将逐步构建一个简单的Demo。在此过程中,我们将使用VLLM进行模型推理,LangChain构建向量数据库,FastAPI提供Web服务,并借助极具性价比的FunHPC趣算云(原DeepLn算力云)在云端部署模型。

核心概念与准备工作

如何选择计算实例

运行深度学习模型特别是LLM需要大量的算力。虽然可以通过一些方法来使用CPU运行LLM(例如llama.cpp),但一般来说需要使用GPU才可以流畅并高效地运行。对于本教程来说,vLLM目前支持Qwen 7B Chat的Int4量化版本(经过测试,截止到教程发布前不支持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-serverSSH访问实例。

配置环境

使用如下命令将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}")

这里有很多参数,比如temperaturetop_k等。如果你想详细了解,可以查看Hugging Face手册。

这里涉及许多参数,例如temperaturetop_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
```
Roger深圳
本文由 Roger 审核,最后更新于 2026年7月3日
联系编辑 →
← 返回文章列表
分享到:微博

版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。

文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。

若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。