掘金 人工智能 17小时前
vLLM在RTX50系显卡上部署大模型-使用wsl2
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文针对vLLM框架在RTX50系显卡上的兼容性问题,提供了手动编译的解决方案。通过详细的步骤指导,包括环境配置、代码拉取、PyTorch安装、CUDA工具包配置以及手动编译vLLM,成功解决了部署失败的问题。文章还介绍了QWEN3模型的部署,并提供了测试结果和显存占用情况,为用户提供了在本地部署大模型的完整指南。

🛠️ 针对RTX50系显卡,由于vLLM官方支持不足,手动编译是解决部署问题的有效方法。

⚙️ 详细介绍了手动编译vLLM的步骤,包括安装必要的依赖,如pipx、uv,以及配置Python环境,并提供了PyTorch和CUDA的安装建议,确保环境兼容性。

🚀 提供了QWEN3模型的部署流程,涵盖了模型下载、服务启动和测试,并展示了通过API进行交互的示例,方便用户验证部署结果。

💡 总结了不同硬件条件下对显存的需求,并提供了不同规模Qwen3模型的推荐配置,帮助用户根据自身硬件条件选择合适的模型。

vLLM是一个并发性能优良的大模型部署框架,然而vLLM目前对RTX50系显卡支持不足,导致使用50系显卡部署的时候会遇到很多问题。这里提供一个手动编译vLLM的解决方案,以解决部署失败的问题,在官方支持跟进之前,可以使用这种方案来使用RTX50系显卡部署大模型。

准备工作

配置环境

步骤 1:安装pipx

建议将 uv 安装到隔离环境中,这里使用pipx。使用如下命令安装:

# 安装 pipxsudo apt update sudo apt install pipx 
步骤 2:安装uv

uv是一个非常快的 Python 环境管理器,来创建和管理 Python 环境。

使用如下命令安装:

pipx install uv

验证安装:

# 输出版本号(如 0.1.0)即安装成功uv --version 
步骤 3:安装vLLM
    安装 uv 后,可以使用以下命令创建新的 Python 环境并安装 vLLM

执行命令:

# 创建虚拟环境,需要等待一段时间uv venv --python 3.12 --seed# 切换到虚拟环境source .venv/bin/activate

重要:使用50系显卡时,目前官方兼容性比较差,需要手动编译vllm。

参考文章:CSDN-慕迟明的文章

    拉取代码:
# 拉取代码git clone https://github.com/vllm-project/vllm.git# 进入项目目录cd vllm# 切换到合适的分支,请自行到github页面查询,以仓库最新版本分支为准git checkout releases/v0.9.1
    环境准备

安装对应的pytorch版本,目前最新版为2.7.1,已经支持cuda12.8

请在网站:pytorch.org/get-started… 进行查询。

我的RTX5070ti对应的命令如下:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

附:重新安装pytorch

# 卸载pytorchpip uninstall torch torchvision torchaudio# 删除缓存pip cache purge# 重新安装pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

安装CUDA工具包,具体教程请查阅官方指南,这里我安装的是12.8版本。需要与pytorch支持的最高版本对应,请仔细检查。

关于具体的安装方法,请查阅官方文档:docs.nvidia.com/cuda/cuda-i…

最终环境检查:

# nvidia显卡驱动版本,最新即可nvidia-smi # cuda版本:12.8+nvcc --version # 使用python脚本检查PyTorch版本python>>> import torch>>> print(torch.__version__)             # 查看 PyTorch 版本>>> print(torch.cuda.is_available())     # 检查是否支持 CUDA>>> print(torch.version.cuda)            # 查看 PyTorch 编译时的 CUDA 版本>>> print(torch.backends.cudnn.version())  # 查看 cuDNN 版本(如适用)
    手动编译:
# 使用已安装的torchpython use_existing_torch.py  # 准备编译环境pip install -r requirements/build.txtpip install -r requirements/common.txtpip install --upgrade pip setuptools setuptools-scm  # 执行编译,使用MAX_JOBS参数执行并行处理加速,可以设置为自己处理器的核心数MAX_JOBS=8 pip install -e . --no-build-isolation -v

如果你不是50系列显卡,没有兼容性问题,请参照下面的教程:

参考文档:vLLM文档

在虚拟环境中安装vLLM

如果您不使用RTX50系列显卡,建议利用 uv 通过 --torch-backend=auto(或 UV_TORCH_BACKEND=auto)检查已安装的 CUDA 驱动程序版本来在运行时自动选择合适的 PyTorch 索引

uv pip install vllm --torch-backend=auto

🍵这里需要等待一段时间安装。

步骤 4:安装QWEN3

注意:以下操作均在虚拟环境中。

对应文档:QWEN

借助vLLM,构建一个与OpenAI API兼容的API服务十分简便,该服务可以作为实现OpenAI API协议的服务器进行部署。默认情况下,它将在 http://localhost:8000 启动服务器。可以通过 --host 和 --port 参数来自定义地址。

默认情况下,如果模型未指向有效的本地目录,它将从 Hugging Face Hub 下载模型文件。要从 ModelScope 下载模型,请在运行上述命令之前设置以下内容:

export VLLM_USE_MODELSCOPE=true

首先需要安装modelscope

pip install modelscope>=1.18.1

这里的nvidia-cuda-toolkit版本需要和PyTorch对应支持的CUDA版本/显卡驱动CUDA版本匹配。

可以访问 PyTorch 的安装页面查看版本适配,使用以下命令查看当前cuda版本,如果CUDA版本不对应,需要安装别的版本,解决兼容性问题。

查询nvidia-cuda-toolkit版本:

nvcc --version

查询显卡驱动版本:

nvidia-smi

如果版本不兼容,请安装其它版本的CUDA工具包。

下载对应的模型:

# 其中,--local_dir后面填写你的目录地址modelscope download --model Qwen/Qwen3-8B-AWQ --local_dir /home/miesme/llms/vllm/qwen/qwen3-8b-awq

其中,/home/miesme/llms/vllm/qwen/qwen3-8b-awq是大模型文件安装的相对目录,请保证根目录(这里是/home)已经创建。此时开始下载相应文件,等待下载完成即可,显示如下:

Downloading Model from https://www.modelscope.cn to directory: /home/miesme/llms/vllm/qwen/qwen3-8b-awqDownloading [config.json]: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████| 1.02k/1.02k [00:00<00:00, 2.87kB/s]Downloading [generation_config.json]: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████| 239/239 [00:00<00:00, 661B/s]Downloading [configuration.json]: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 48.0/48.0 [00:00<00:00, 127B/s]Downloading [README.md]: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 16.4k/16.4k [00:00<00:00, 35.3kB/s]Downloading [tokenizer_config.json]: 100%|█████████████████████████████████████████████████████████████████████████████████████████████| 9.45k/9.45k [00:00<00:00, 16.9kB/s]Downloading [vocab.json]: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████| 2.65M/2.65M [00:02<00:00, 1.02MB/s]Downloading [LICENSE]: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████| 11.3k/11.3k [00:04<00:00, 2.85kB/s]Downloading [model.safetensors.index.json]: 100%|██████████████████████████████████████████████████████████████████████████████████████| 72.3k/72.3k [00:04<00:00, 17.7kB/s]Downloading [merges.txt]: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.59M/1.59M [00:04<00:00, 347kB/s]Downloading [tokenizer.json]: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████| 10.9M/10.9M [00:08<00:00, 1.41MB/s]Processing 12 items:  83%|████████████████████████████████████████████████████████████████████████████████████████████▌                  | 10.0/12.0 [00:08<00:03, 1.50s/it]Downloading [model-00002-of-00002.safetensors]:   1%|▉                                                                                 | 13.0M/1.16G [00:04<05:27, 3.76MB/s]Downloading [model-00002-of-00002.safetensors]:   3%|██▎                                                                               | 33.0M/1.16G [00:08<03:51, 5.22MB/s]Downloading [model-00002-of-00002.safetensors]:  28%|███████████████████████▌                                                           | 337M/1.16G [01:02<02:37, 5.66MB/s]Downloading [model-00001-of-00002.safetensors]:   1%|▋                                                                                 | 42.0M/4.52G [00:08<14:39, 5.47MB/s]Downloading [model-00001-of-00002.safetensors]:   7%|██████▏                                                                            | 344M/4.52G [01:02<13:05, 5.72MB/s]

部署时,运行命令:

# 不使用推理模式vllm serve /home/miesme/llms/vllm/qwen/qwen3-8b-awq --port 8000# 使用推理模式,以及一些其他的参数vllm serve /home/miesme/llms/vllm/qwen/qwen3-8b-awq --max-model-len 32768 --host 0.0.0.0 --port 8000 --enable-reasoning --reasoning-parser deepseek_r1

这里选择的是量化模型AWQ,减少显存占用。

对于可以下载的模型型号,可以查看:Hugging Face

如果服务启动成功,应该会提示:

INFO:     Started server process [15361]INFO:     Waiting for application startup.INFO:     Application startup complete.

步骤 5:测试结果

如果使用50系显卡,不采用手动编译vLLM的方式,虽然服务能正常启动,但是执行推理的时候会报错崩溃。

使用PostmanApiFox等工具发送http对话请求:

POST http://{你配置的主机地址}:{你配置的端口号}/v1/chat/completions# 例:默认部署在本机,端口号8000POST http://localhost:8000/v1/chat/completions

对应的RequestBody:

{  "model": "/home/miesme/llms/vllm/qwen/qwen3-8b-awq",  "messages": [    {"role": "user", "content": "who are you?."}  ],  "temperature": 0.9,  "top_p": 0.95,  "top_k": 20,  "max_tokens": 2048}

参数解析:

测试结果:

{    "id": "chatcmpl-afeb1a7bce014fb7a468195dc77278ce",    "object": "chat.completion",    "created": 1751800781,    "model": "/home/miesme/llms/vllm/qwen/qwen3-8b-awq",    "choices": [        {            "index": 0,            "message": {                "role": "assistant",                "reasoning_content": "\nOkay, the user is asking, \"who are you?\" I need to respond appropriately. First, I should introduce myself as Qwen, the large language model developed by Alibaba. I should mention my capabilities, like answering questions, creating content, and engaging in conversations. I should keep it friendly and open-ended, inviting the user to ask anything they need. Let me make sure the response is clear and concise, avoiding any technical jargon. Also, I should check for any typos and ensure the tone is welcoming.\n",                "content": "\n\nHello! I am Qwen, a large language model developed by Alibaba Cloud. I am designed to assist with a wide range of tasks, including answering questions, creating content, and engaging in conversations. Whether you need help with writing, coding, or just want to chat, feel free to ask anything you need! 😊",                "tool_calls": []            },            "logprobs": null,            "finish_reason": "stop",            "stop_reason": null        }    ],    "usage": {        "prompt_tokens": 12,        "total_tokens": 187,        "completion_tokens": 175,        "prompt_tokens_details": null    },    "prompt_logprobs": null,    "kv_transfer_params": null}

🎉可见,模型开启了深度思考,并给出了回复。

通过返回的json,也可以将大模型整合到我们的Web应用中,到此,我们就完成了vLLM50系列显卡本地大模型部署,通过手动编译配置,解决了报错问题。

显存占用:

硬件要求

这里我的GPURTX5070ti 16G显存,可以部署8B的模型。

对于不同的硬件条件,推荐的配置如下:

模型版本参数规模显存需求推荐 GPU推荐 CPU内存要求备注
Qwen/Qwen3-0.6B6 亿1GB+GTX1050以上Xeon W-2400系列或同等性能CPU4GB+入门测试用
Qwen/Qwen3-1.7B17 亿2GB+GTX1660以上Xeon W-2400系列或同等性能CPU8GB+入门测试用
Qwen/Qwen3-4B40 亿8GB+RTX3090以上Xeon W-2400系列或同等性能CPU16GB+轻量部署/手机端应用
Qwen/Qwen3-8B80 亿14GB+RTX4080以上Xeon W-2400系列或同等性能CPU16GB+电脑端或汽车端对话助手/语音助手等
Qwen/Qwen3-14B140 亿24GB+RTX3090*2 以上Xeon W-3400系列或同等性能CPU32GB+企业级任务入门

此外,还有更大参数量的模型,最高为Qwen3-235B-A22B,需要350GB+的显存,一般是企业用,这里就不再介绍。


如果使用张量并行的分布式推理,操作非常简单,如:

vllm serve Qwen/Qwen3-8B --tensor-parallel-size 4

此时报错:

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

vLLM RTX50系显卡 手动编译 大模型部署 QWEN3
相关文章