在Windows中使用WSL运行vLLM 精华

发布于 2025-8-7 07:15
浏览
0收藏

介绍了在 Windows 系统中通过 WSL2 运行大模型推理框架 vLLM。

vLLM 具备高吞吐、低延迟、节省显存等优势,适配多种模型与硬件平台。讲解了推理代码示例,与 OpenAI API 接口兼容的部署方式。

1. vLLM的核心优势

2. vLLM对Windows的支持

3. 安装vLLM前的准备:Nvidia 显卡驱动和WSL

5. 新建Python虚拟环境

6. 安装GPU版PyTorch

6.1 确定CUDA Toolkit版本

6.2 选择与以确认CUDA版本匹配的Pytorch

9. 安装vLLM

8. 使用vLLM离线批量推理

8.1 下载模型

8.2 代码示例

8.3 运行效果

9. 启动与OpenAI API 协议兼容的服务

9.1 调用和openai兼容的补全接口(/v1/completions)

9.2 调用和openai兼容的聊天接口(/v1/chat/completions)


vLLM是伯克利大学组织开源的大语言模型高速推理框架,极大地提升实时场景下的语言模型服务的吞吐与内存使用效率。

vLLM是一个快速且易于使用的库,用于 LLM 推理和服务,可以和HuggingFace 无缝集成。

1. vLLM的核心优势

高性能高吞吐

vLLM 引入了PagedAttention 技术,将键值缓存(KV cache)分成多个小块(pages)存储,避免内存碎片化,减少浪费。研究表明,它在处理大模型与长上下文时,吞吐可提升 2–4 倍,搭配优化后可达最多 24×,远胜传统引擎如 HuggingFace Transformers 。

连续批处理

传统方式需要将请求积满批次后才执行,容易造成延迟与 GPU 利用率低下。vLLM 则采用动态合批机制,新请求随时填补空余的 GPU 批次位置,既提升并行处理效率,也缩短响应时间,更适合多租户、高请求量场景。

硬件优化加速

支持 FlashAttention、FlashInfer、CUDA/HIP Graph 等多种高效计算优化手段,能在 NVIDIA(A100、H100)等 GPU 上最大化发挥性能。同时支持多种量化方案(如 INT4/8、FP8、GPTQ、AWQ 等),在保持接近准确率的前提下显著降低显存使用。

适配广泛模型与平台

无缝兼容 Hugging Face Transformers 中的众多模型(如 Llama、Llama 3.x、Mistral、Qwen 系列等),还支持分布式推理、多 LoRA adapter、OpenAI 风格 API 接口、流式输出、Prefix 缓存、推理并行等功能,可运行在 NVIDIA GPU、AMD GPU/CPU、Intel 平台、TPU、AWS Neuron 等多种硬件环境中。

可扩展部署便捷

提供 Python 库调用、命令行 CLI 和兼容 OpenAI API 的服务模式,也易于容器化部署(Docker/Kubernetes),集成例如 LangChain、LlamaIndex、KServe、Triton 等生态,无需深入硬件底层即可快速上线。

2. vLLM对Windows的支持

官方明确指出目前 不支持 Windows 原生运行

vLLM does not support Windows natively. 
To run vLLM on Windows, you can use the Windows Subsystem for Linux (WSL) with a compatible Linux distribution, or use some community-maintained forks.

https://docs.vllm.ai/en/stable/getting_started/installation/gpu.html?utm_source=chatgpt.com

如果希望在 Windows 上使用,有两种可行方案:

  • 通过 WSL2 在 Windows 上运行

利用 Windows 的 Linux 子系统,可以让 vLLM 在这类“虚拟”的 Linux 环境中运行。

  • 使用 Docker

通过 Docker Desktop + WSL 后端,可在 Windows 上启动 vLLM 服务

下面开始基于WSL2来进行安装

3. 安装vLLM前的准备:Nvidia 显卡驱动和WSL

为了运行 CUDA 应用程序,系统应具备与 CUDA Toolkit 兼容的 NVIDIA显示驱动程序

我们一般在电脑操作系统安装完成后,就安装了,因为要玩游戏.

WSL是一个为在Windows 10和Windows Server 2019以上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层.允许在不需要单独的虚拟机或双启动的情况下使用 Linux 环境。

WSL2基于Hyper-V技术,运行多个带有GNU/Linux镜像的虚拟机,拥有完整的Linux内核与对Systemd的支持。

WSL 比完整的虚拟机所需的资源(CPU、内存和存储)更少。

5. 新建Python虚拟环境

python3.11 -m venv .venv

激活虚拟环境

source .venv/bin/activate

如果新建虚拟环境失败,重新安装下Python

sudo apt install python3.11-full

6. 安装GPU版PyTorch

PyTorch 是一个开源的深度学习框架,由 Facebook AI 研究院开发和维护。它主要用于构建和训练神经网络,特别适合研究人员和开发者用来进行机器学习和人工智能的开发工作。

PyTorch 用的是 Python 语言,语法非常接近 NumPy(Python 里一个常用的科学计算库),但它在此基础上还加入了对 GPU 加速的支持,也就是说你可以把计算任务放到显卡上运行,大大提高训练速度。

现在很多主流的人工智能研究和工业应用,比如自然语言处理、图像识别、推荐系统等等,都有大量项目是用 PyTorch 来实现的。像 OpenAI、Meta、Microsoft 等很多团队的项目中,也广泛使用 PyTorch。

如果已经安装了CPU版的torch,如下:

(.venv) pip list
Package                           Version
--------------------------------- -------------
...
torch                             2.7.1
torchaudio                        2.7.1
torchvision                       0.22.1
...

需要先卸载了 ​​pip uninstall torch torchaudio torchvision​

GPU版本应该类似:

torch                             2.7.1+cu126
torchaudio                        2.7.1+cu126
torchvision                       0.22.1+cu126

6.1 确定CUDA Toolkit版本

打开CMD(非WSL环境)命令行执行:​​nvidia-smi​​命令

看到的​CUDA Version:12.8​ 就是当前系统支持​CUDA Toolkit​的最高版本号,接下来安装的CUDA运行时不能高于这个版本

​Driver Version​​: 显卡驱动版本号

PS C:\Users\sixon> nvidia-smi
Sat Jul 26 16:46:37 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 572.83                 Driver Version: 572.83         CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 2050      WDDM  |   00000000:01:00.0 Off |                  N/A |
| N/A   57C    P8              5W /   43W |    2079MiB /   4096MiB |      1%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
+-----------------------------------------------------------------------------------------+

6.2 选择与以确认CUDA版本匹配的Pytorch

PyTorch 通过调用 CUDA 提供的库(如 cuDNN、cuBLAS),实现了 GPU 加速的深度学习功能。将 CUDA 的底层功能封装为易于使用的高层 API,让开发者专注于模型构建和训练。这使得 PyTorch 用户无需关心 CUDA 的底层实现细节。

PyTorch 的发行版通常会绑定对应版本的 CUDA,例如 ​​torch==2.0.0+cu118​​ 表示这个版本的 PyTorch 使用 CUDA 11.8

选择正确的Pytorch版本:

打开Pytorch官网:

​https://pytorch.org/get-started/locally/​

PyTorch Build: 选标准版本Stable

Your OS: 选自己的系统版本

Package: 选包管理工具,这边选择pip

Language: 我这边选择Python

Compute Platform:这个CUDA版本选择小于nvidia-smi的CUDA Version,这个版本就是PyTorch编译时使用的运行时环境,Torch安装后会自带运行时(这时系统中没有单独安装CUDA Toolkit,你也会发现应用程序可以运行在Torch自带CUDA运行时中)

Run this Command: 最后根据所选项目生成的安装命令

在Windows中使用WSL运行vLLM-AI.x社区

安装:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126

检查torch的状态:

在Python环境中查询,可以查到​​torch.cuda.is_available()=True​

(.venv) litx@TXWIN:/mnt/g/workspace/idea/py/litx/hello-vllm_wsl$ python
Python 3.11.13 (main, Jun  4 2025, 08:57:30) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> print(torch.__version__)
2.7.1+cu126
>>> print(torch.cuda.device_count())
1
>>>

7. 安装vLLM

pip install vllm

8. 使用vLLM离线批量推理

安装好 vLLM 之后,你可以开始对一组提示词进行文本生成,也就是离线批量推理。

8.1 下载模型

modelscope download --model Qwen/Qwen3-0.6B-GPTQ-Int8  --local_dir ./ckpts/qwen3-0.6b-gptq-int8

8.2 代码示例

# 运行前先下载模型
# modelscope download --model Qwen/Qwen3-0.6B-GPTQ-Int8  --local_dir ./ckpts/qwen3-0.6b-gptq-int8


from vllm import LLM, SamplingParams

# 提示词
prompts = [
    "从前有座山",
    "今年夏天好热"
]
# 创建采样参数对象
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)


def main():
    # 创建LLM实例
    llm = LLM(
        model="./ckpts/qwen3-0.6b-gptq-int8",
        swap_space="1",
        gpu_memory_utilizatinotallow=0.7,
        max_model_len=6000
    )
    print("创建LLM实例成功")
    # 从提示词生成文本
    # 输出是一个RequestOutput对象列表
    # 包含提示词、生成的文本和其他信息
    outputs = llm.generate(prompts, sampling_params)
    # 打印输出结果
    print("\nGenerated Outputs:\n" + "-" * 60)
    for output in outputs:
        prompt = output.prompt
        generated_text = output.outputs[0].text
        print(f"Prompt:    {prompt!r}")
        print(f"Output:    {generated_text!r}")
        print("-" * 60)


if __name__ == "__main__":
    main()

在这个示例的开头,导入了两个核心类:​​LLM​​​ 和 ​​SamplingParams​​。

​LLM​​ 是用来运行 vLLM 引擎、执行离线推理的主要类;

​SamplingParams​​ 用来设置文本生成时的采样参数。

接下来的部分,定义一组提示词(prompts)和用于文本生成的采样参数。

之后,通过 ​​LLM​​ 类会初始化 vLLM 引擎,并加载我们模型(ckpts/qwen3-0.6b-gptq-int8),用于执行离线推理。

接下来就是使用 ​​llm.generate​​ 就可以开始生成文本。

这个方法会把你提供的提示词加入到 vLLM 引擎的等待队列中,然后启动引擎以高吞吐量的方式生成输出结果。

生成的内容会以一组 ​​RequestOutput​​ 对象的形式返回,每个对象都包含完整的输出 token。

8.3 运行效果

(.venv) litx@TXWIN:/mnt/g/workspace/idea/py/litx/hello-vllm_wsl$ python hello-1.py
...

Generated Outputs:
------------------------------------------------------------
Prompt:    '从前有座山'
Output:    ',山脚是花。当桃花开时,山中才会成景'
------------------------------------------------------------
Prompt:    '今年夏天好热'
Output:    ',可能和哪几方面有关?  作为一位退休教师,我'
------------------------------------------------------------
(.venv) litx@TXWIN:/mnt/g/workspace/idea/py/litx/hello-vllm_wsl$

9. 启动与OpenAI API 协议兼容的服务

vLLM 可以作为一个兼容 OpenAI API 协议的服务器运行。

这样一来,原本依赖 OpenAI API 的应用程序几乎不用改动,就可以直接切换到使用 vLLM。

默认情况下,它会在 ​​​http://localhost:8000​​ 启动服务。

vllm serve ckpts/qwen3-0.6b-gptq-int8 --swap-space 1 --gpu-memory-utilization 0.7 --max-model-len 6000

9.1 调用和openai兼容的补全接口(/v1/completions)

# 补全接口
curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ckpts/qwen3-0.6b-gptq-int8",
    "prompt": "从前有座山",
    "max_tokens": 100,
    "temperature": 0
}'
{"id":"cmpl-b670ffb18c9a49a4915bb120ece2d63d","object":"text_completion","created":1753526021,"model":"ckpts/qwen3-0.6b-gptq-int8","choices":[{"index":0,"text":",山上有树,树上有鸟,鸟有鸟巢。山上的鸟巢是鸟的家。这说明了什么?\n\nA. 人类的家是鸟的家\nB. 人类的家是鸟的家\nC. 人类的家是鸟的家\nD. 人类的家是鸟的家\n答案:A\n答案:A\n答案:A\n答案:A\n\n答案:A\n答案:A\n\n答案:A\n","logprobs":null,"finish_reason":"length","stop_reason":null,"prompt_logprobs":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":4,"total_tokens":104,"completion_tokens":100,"prompt_tokens_details":null},"kv_transfer_params":null}

9.2 调用和openai兼容的聊天接口(/v1/chat/completions)

# 聊天接口
curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "ckpts/qwen3-0.6b-gptq-int8",
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "写一篇不超过300字的中文科幻小说"}
        ]
    }'
{"id":"chatcmpl-e92ffd1f36b94a6ebfb5561746ebcd86","object":"chat.completion","created":1753526114,"model":"ckpts/qwen3-0.6b-gptq-int8",
"choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n好的,用户让我写一篇不超过300字的中文科幻小说。首先,我需要确定故事的主题和核心冲突。科幻小说通常涉及未来科技、外星生命或人类与科技的关系。考虑到字数限制,我需要简洁有力,不能拖沓。\n\n接下来,用户可能希望故事有悬念或转折,所以得设计一个引人入胜的情节。比如,可以设定一个未来社会,科技已经高度发达,但人类面临某种危机。比如,月球上的外星生命体入侵,或者某种未知的科技威胁。\n\n然后,考虑角色。主角可以是一个普通人,比如科学家或普通市民,通过自己的经历揭示更大的问题。这样能增加故事的可信度。比如,主角发现月球上的生物,引发一系列事件,最终揭示真相。\n\n还要注意字数,300字以内,所以每个场景都要简洁。可能需要分几个段落,每段集中一个关键点。比如,开头介绍主角和发现的线索,中间发展冲突,最后解决或留下悬念。\n\n另外,用户可能希望故事有情感元素,比如孤独、希望或牺牲。这样能让读者产生共鸣。比如,主角在发现外星生命后,选择帮助人类,或者牺牲自己保护他们。\n\n最后检查是否符合要求,没有超过字数,主题明确,结构紧凑。确保语言流畅,没有语法错误。这样就能满足用户的需求了。\n</think>\n\n《月光之书》\n\n林深站在月球观测站,望着直径300公里的月球背面。那里曾是人类最深的禁区,直到某个深夜,他发现卫星轨道上浮现出一行陌生的符号——\"2077年,月球文明将被唤醒\"。\n\n他用全息投影在月球表面绘制出时间线,却在第四个星系发现异常。当月球背面的生物群落开始发光时,林深意识到自己可能触碰到真正的文明。他带着生物学家和量子探测器潜入月球,却发现这些生命体不是外星,而是人类的进化产物。\n\n在月球核心,他发现时间循环装置。当林深将自己的时间线与生物体的基因序列对接时,整个月球表面开始同步闪烁。他颤抖着按下启动按钮,月球开始以人类的视角重演自己诞生的那一刻。\n\n(字数:298)","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning_content":null},"logprobs":null,"finish_reason":"stop","stop_reason":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":30,"total_tokens":527,"completion_tokens":497,"prompt_tokens_details":null},"prompt_logprobs":null,"kv_transfer_params":null}

本文转载自​​AI取经路,作者:AI取经路

收藏
回复
举报
回复
相关推荐